Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/chat/GroupChat.py
diff options
context:
space:
mode:
Diffstat (limited to 'sugar/chat/GroupChat.py')
-rw-r--r--sugar/chat/GroupChat.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/sugar/chat/GroupChat.py b/sugar/chat/GroupChat.py
new file mode 100644
index 0000000..e5d3a00
--- /dev/null
+++ b/sugar/chat/GroupChat.py
@@ -0,0 +1,45 @@
+from sugar.chat.Chat import Chat
+
+class GroupChat(Chat):
+ def __init__(self):
+ Chat.__init__(self, self)
+ self._chats = {}
+
+ def get_group(self):
+ return self._group
+
+ def new_buddy_writer(self, buddy):
+ service = buddy.get_service(CHAT_SERVICE_TYPE)
+ return self._buddy_stream.new_writer(service)
+
+ def _start(self):
+ name = self._group.get_owner().get_nick_name()
+
+ # Group controls the Stream for incoming messages for
+ # specific buddy chats
+ buddy_service = Service(name, CHAT_SERVICE_TYPE, CHAT_SERVICE_PORT)
+ self._buddy_stream = Stream.new_from_service(buddy_service, self._group)
+ self._buddy_stream.set_data_listener(getattr(self, "_buddy_recv_message"))
+ buddy_service.register(self._group)
+
+ # Group chat Stream
+ group_service = Service(name, GROUP_CHAT_SERVICE_TYPE,
+ GROUP_CHAT_SERVICE_PORT,
+ GROUP_CHAT_SERVICE_ADDRESS)
+ self._group.add_service(group_service)
+
+ self._group_stream = Stream.new_from_service(group_service, self._group)
+ self._group_stream.set_data_listener(self._group_recv_message)
+ self._stream_writer = self._group_stream.new_writer()
+
+ def _group_recv_message(self, buddy, msg):
+ self.recv_message(buddy, msg)
+
+ def _buddy_recv_message(self, buddy, msg):
+ if not self._chats.has_key(buddy):
+ chat = BuddyChat(self, buddy)
+ self._chats[buddy] = chat
+ chat.connect_to_shell()
+ else:
+ chat = self._chats[buddy]
+ chat.recv_message(buddy, msg)