diff options
Diffstat (limited to 'sugar/chat/GroupChat.py')
-rw-r--r-- | sugar/chat/GroupChat.py | 45 |
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) |