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.
This commit is contained in:
Marco Pesenti Gritti 2006-10-09 15:11:15 +02:00
parent 1dd8f78453
commit cbd3a52a68
6 changed files with 92 additions and 5 deletions

View File

@ -5,6 +5,7 @@ import Activity
import random import random
import logging import logging
from sugar import util from sugar import util
from sugar import env
import BuddyIconCache import BuddyIconCache
@ -302,9 +303,13 @@ class PresenceService(object):
self._icon_cache = BuddyIconCache.BuddyIconCache() self._icon_cache = BuddyIconCache.BuddyIconCache()
# Our owner object # Our owner object
if env.get_nick_name():
objid = self._get_next_object_id() objid = self._get_next_object_id()
self._owner = Buddy.Owner(self, self._bus_name, objid, self._icon_cache) self._owner = Buddy.Owner(self, self._bus_name,
objid, self._icon_cache)
self._buddies[self._owner.get_name()] = self._owner self._buddies[self._owner.get_name()] = self._owner
else:
self._owner = None
self._started = False self._started = False

View File

@ -8,6 +8,7 @@ sugar_PYTHON = \
logger.py \ logger.py \
setup.py \ setup.py \
oldsimulator.py \ oldsimulator.py \
simulator.py \
TracebackUtils.py \ TracebackUtils.py \
util.py util.py

View File

@ -14,10 +14,16 @@ def setup_user(profile):
os.environ['SUGAR_COLOR'] = profile.get_color().to_string() os.environ['SUGAR_COLOR'] = profile.get_color().to_string()
def get_nick_name(): def get_nick_name():
if os.environ.has_key('SUGAR_NICK_NAME'):
return os.environ['SUGAR_NICK_NAME'] return os.environ['SUGAR_NICK_NAME']
else:
return None
def get_color(): def get_color():
if os.environ.has_key('SUGAR_COLOR'):
return os.environ['SUGAR_COLOR'] return os.environ['SUGAR_COLOR']
else:
return None
def setup_python_path(): def setup_python_path():
for path in sugar_python_path: for path in sugar_python_path:

47
sugar/simulator.py Normal file
View File

@ -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()

View File

@ -0,0 +1,6 @@
from sugar.simulator import Bot
bot = Bot()
bot.name = 'penelope'
bot.start()

22
tests/simulator/simulator Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/python
import os
import gobject
from sugar.session.TestSession import TestSession
from sugar.presence import PresenceService
session = TestSession()
session.start()
PresenceService.start()
base_path = os.path.abspath(os.path.dirname(__file__))
bots_path = os.path.join(base_path, 'bots')
for bot_file in os.listdir(bots_path):
if bot_file.endswith('.py') and bot_file != 'kiu.py':
execfile(os.path.join(bots_path, bot_file))
mainloop = gobject.MainLoop()
mainloop.run()