diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2006-06-18 05:05:40 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2006-06-18 05:05:40 (GMT) |
commit | b4413fe3c25e1f709d261bd4db0935f98f378924 (patch) | |
tree | 33a1829084741c95711b480f088957cc00e30f78 /sugar/chat/GroupChat.py | |
parent | afc587212eb908420b8fb186cecc324753a5bbb1 (diff) |
Some work to make group chat work again
Diffstat (limited to 'sugar/chat/GroupChat.py')
-rw-r--r-- | sugar/chat/GroupChat.py | 60 |
1 files changed, 24 insertions, 36 deletions
diff --git a/sugar/chat/GroupChat.py b/sugar/chat/GroupChat.py index 9420094..c77525a 100644 --- a/sugar/chat/GroupChat.py +++ b/sugar/chat/GroupChat.py @@ -1,53 +1,41 @@ +import logging + from sugar.chat.Chat import Chat from sugar.presence.Service import Service from sugar.p2p.Stream import Stream - -GROUP_CHAT_SERVICE_TYPE = "_olpc_group_chat._udp" -GROUP_CHAT_SERVICE_ADDRESS = "224.0.0.221" -GROUP_CHAT_SERVICE_PORT = 6200 +from sugar.presence.PresenceService import PresenceService class GroupChat(Chat): - def __init__(self): + SERVICE_TYPE = "_olpc_group_chat._udp" + SERVICE_PORT = 6200 + + def __init__(self, activity): Chat.__init__(self) self._chats = {} + self._activity = activity - def get_group(self): - return self._group + self._pservice = PresenceService.get_instance() + self._pservice.start() + self._pservice.connect('service-appeared', self._service_appeared_cb) + self._pservice.track_service_type(GroupChat.SERVICE_TYPE) - def new_buddy_writer(self, buddy): - service = buddy.get_service(Chat.SERVICE_TYPE) - return self._buddy_stream.new_writer(service) + # FIXME remove, when we join the activity this will happen automatically + # (Once we have a global presence service) + self._pservice.track_activity(activity.get_id()) - def _start(self): - name = self._group.get_owner().get_nick_name() + def _service_appeared_cb(self, pservice, buddy, service): + if service.get_type() == GroupChat.SERVICE_TYPE: + logging.debug('Group chat service appeared, setup the stream.') + self._setup_stream(service) - # 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) + def publish(self): + service = self._pservice.share_activity(self._activity, + stype = GroupChat.SERVICE_TYPE, port = GroupChat.SERVICE_PORT) - # 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) + def _setup_stream(self, service): + self._group_stream = Stream.new_from_service(service) 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() - pass - else: - chat = self._chats[buddy] - chat.recv_message(buddy, msg) |