Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/simulator.py
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-10-09 13:11:15 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-10-09 13:11:15 (GMT)
commitcbd3a52a6852574e3f481dac0ff2fc51c8d5038d (patch)
treed23c947525502e83be7b7640f21ed17eb276ace9 /sugar/simulator.py
parent1dd8f784535920dc1eb404b491761f442590e68c (diff)
Do not set up the owner of the presence service if there
is no nick name in the env. I'm not sure this is the best approach, we need to figure it out. First go at the new simulator.
Diffstat (limited to 'sugar/simulator.py')
-rw-r--r--sugar/simulator.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/sugar/simulator.py b/sugar/simulator.py
new file mode 100644
index 0000000..c7fccfa
--- /dev/null
+++ b/sugar/simulator.py
@@ -0,0 +1,47 @@
+from sugar.presence import PresenceService
+from sugar.graphics.iconcolor import IconColor
+from sugar.p2p import Stream
+from sugar import util
+
+_PRESENCE_SERVICE_TYPE = "_presence_olpc._tcp"
+
+class BotService(object):
+ def __init__(self, bot):
+ self._bot = bot
+
+ def announce(self):
+ props = { 'color': self._bot.color.to_string() }
+ pservice = PresenceService.get_instance()
+ self._service = pservice.register_service(self._bot.name,
+ _PRESENCE_SERVICE_TYPE, properties=props)
+
+ self._stream = Stream.Stream.new_from_service(self._service)
+ self._stream.register_reader_handler(
+ self._handle_buddy_icon_request, "get_buddy_icon")
+ self._stream.register_reader_handler(
+ self._handle_invite, "invite")
+
+ def _handle_buddy_icon_request(self):
+ if self._bot.icon:
+ fd = open(self._bot.icon, "r")
+ icon_data = fd.read()
+ fd.close()
+ if icon_data:
+ return base64.b64encode(self._icon)
+ return ''
+
+ def _handle_invite(self, issuer, bundle_id, activity_id):
+ return ''
+
+ def set_current_activity(self, activity_id):
+ self._service.set_published_value('curact', dbus.String(activity_id))
+
+class Bot(object):
+ def __init__(self):
+ self.name = util.unique_id()
+ self.color = IconColor()
+ self.icon = None
+
+ def start(self):
+ self._service = BotService(self)
+ self._service.announce()