Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-06-16 18:20:09 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-06-16 18:20:09 (GMT)
commit0cae557ab56cb82a30087e8abbc6bc82d118a995 (patch)
tree809f01b48d4a076e2d5fdff99fff69edc456df94
parent5446b2509f8c542925aa24b2d822e32b2a83e077 (diff)
Register the model service and start working on
looking it up
-rw-r--r--.gitignore1
-rw-r--r--sugar/browser/BrowserActivity.py28
-rw-r--r--sugar/p2p/NotificationListener.py5
-rw-r--r--sugar/p2p/Notifier.py11
-rw-r--r--sugar/p2p/model/LocalModel.py14
-rw-r--r--sugar/p2p/model/RemoteModel.py6
-rw-r--r--sugar/presence/PresenceService.py9
7 files changed, 37 insertions, 37 deletions
diff --git a/.gitignore b/.gitignore
index 0d20b64..f3d74a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
*.pyc
+*~
diff --git a/sugar/browser/BrowserActivity.py b/sugar/browser/BrowserActivity.py
index e5e6ce7..0101973 100644
--- a/sugar/browser/BrowserActivity.py
+++ b/sugar/browser/BrowserActivity.py
@@ -10,6 +10,7 @@ from sugar.browser import NotificationBar
from sugar.browser import NavigationToolbar
from sugar.presence.PresenceService import PresenceService
from sugar.p2p.model.LocalModel import LocalModel
+from sugar.p2p.model.RemoteModel import RemoteModel
_BROWSER_ACTIVITY_TYPE = "_web_olpc._udp"
_SERVICE_URI_TAG = "URI"
@@ -46,20 +47,16 @@ class BrowserActivity(activity.Activity):
self.embed.load_address(address)
self._notif_bar.hide()
- #def set_mode(self, mode):
- # self._mode = mode
- # if mode == BrowserActivity.LEADING:
- # self._notif_bar.set_text('Share this page with the group.')
- # self._notif_bar.set_action('set_shared_location', 'Share')
- # self._notif_bar.set_icon('stock_shared-by-me')
- # self._notif_bar.show()
-
- def _setup_shared(self, uri):
- pass
- #self._model = self._group.get_store().get_model(uri)
- #if self._model:
- # self.set_mode(BrowserActivity.FOLLOWING)
- # self._model.add_listener(self.__shared_location_changed_cb)
+ def set_mode(self, mode):
+ self._mode = mode
+ if mode == BrowserActivity.LEADING:
+ self._notif_bar.set_text('Share this page with the group.')
+ self._notif_bar.set_action('set_shared_location', 'Share')
+ self._notif_bar.set_icon('stock_shared-by-me')
+ self._notif_bar.show()
+
+ def _setup_shared(self, service, no):
+ self._model = RemoteModel(service, notification_service)
def on_connected_to_shell(self):
self.set_ellipsize_tab(True)
@@ -106,9 +103,10 @@ class BrowserActivity(activity.Activity):
stype=_BROWSER_ACTIVITY_TYPE, properties=properties)
# Create our activity-specific browser sharing service
- self._model = LocalModel(stype)
+ self._model = LocalModel(self, self._pservice, self._share_service)
self._model.set_value('owner', self._pservice.get_owner().get_nick_name())
self._update_shared_location()
+
self.set_mode(BrowserActivity.LEADING)
def __title_cb(self, embed):
diff --git a/sugar/p2p/NotificationListener.py b/sugar/p2p/NotificationListener.py
index ba89936..433b777 100644
--- a/sugar/p2p/NotificationListener.py
+++ b/sugar/p2p/NotificationListener.py
@@ -2,9 +2,8 @@ from sugar.p2p.Notifier import Notifier
import network
class NotificationListener:
- def __init__(self, group, name):
- service = group.get_service(name, Notifier.TYPE)
- server = network.GroupServer(service.get_group_address(),
+ def __init__(self, service):
+ server = network.GroupServer(service.get_address(),
service.get_port(),
self._recv_multicast)
server.start()
diff --git a/sugar/p2p/Notifier.py b/sugar/p2p/Notifier.py
index 54ce735..2672f28 100644
--- a/sugar/p2p/Notifier.py
+++ b/sugar/p2p/Notifier.py
@@ -2,15 +2,8 @@ from sugar.p2p import network
from sugar.presence.Service import Service
class Notifier:
- TYPE = "_olpc_model_notification._udp"
- ADDRESS = "224.0.0.222"
- PORT = 6300
-
- def __init__(self, group, name):
- service = Service(name, Notifier.TYPE, Notifier.PORT, Notifier.ADDRESS)
- service.register(group)
-
- address = service.get_group_address()
+ def __init__(self, service):
+ address = service.get_address()
port = service.get_port()
self._client = network.GroupClient(address, port)
diff --git a/sugar/p2p/model/LocalModel.py b/sugar/p2p/model/LocalModel.py
index 7fb24a0..9d7046d 100644
--- a/sugar/p2p/model/LocalModel.py
+++ b/sugar/p2p/model/LocalModel.py
@@ -19,14 +19,15 @@ class LocalModel(AbstractModel):
SERVICE_TYPE = "_olpc_model._tcp"
SERVICE_PORT = 6300
- def __init__(self, pservice, model_id):
+ def __init__(self, activity, pservice, service):
AbstractModel.__init__(self)
self._pservice = pservice
- self._model_id = model_id
+ self._activity = activity
+ self._service = service
self._values = {}
self._setup_service()
- self._notifier = Notifier(group, model_id)
+ self._notifier = Notifier(service)
def get_value(self, key):
return self._values[key]
@@ -37,10 +38,9 @@ class LocalModel(AbstractModel):
self._notifier.notify(key)
def _setup_service(self):
- self._service = self._pservice.share_activity(self,
- stype=LocalModel.SERVICE_TYPE,
- '', port=LocalModel.PORT_TYPE
- properties=properties)
+ service = self._pservice.share_activity(self._activity,
+ stype = LocalModel.SERVICE_TYPE,
+ address = '', port = LocalModel.SERVICE_PORT)
self._setup_server(service)
# FIXME this is duplicated with StreamReader
diff --git a/sugar/p2p/model/RemoteModel.py b/sugar/p2p/model/RemoteModel.py
index a95c8c0..d11157a 100644
--- a/sugar/p2p/model/RemoteModel.py
+++ b/sugar/p2p/model/RemoteModel.py
@@ -4,11 +4,11 @@ from sugar.p2p.NotificationListener import NotificationListener
from sugar.p2p.model.AbstractModel import AbstractModel
class RemoteModel(AbstractModel):
- def __init__(self, group, service):
+ def __init__(self, service, notification_service):
AbstractModel.__init__(self)
self._service = service
- self._group = group
+ self._notification_service = notification_service
addr = "http://%s:%d" % (service.get_address(), service.get_port())
self._client = xmlrpclib.ServerProxy(addr)
@@ -23,5 +23,5 @@ class RemoteModel(AbstractModel):
def _setup_notification_listener(self):
name = self._service.get_name()
- self._notification = NotificationListener(self._group, name)
+ self._notification = NotificationListener(self._notification_service)
self._notification.add_listener(self._notify_model_change)
diff --git a/sugar/presence/PresenceService.py b/sugar/presence/PresenceService.py
index fe5f74f..0aeb711 100644
--- a/sugar/presence/PresenceService.py
+++ b/sugar/presence/PresenceService.py
@@ -122,6 +122,15 @@ class PresenceService(gobject.GObject):
self._server = dbus.Interface(self._bus.get_object(avahi.DBUS_NAME,
avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
+ def get_activity_service(activity, stype):
+ uid = activity.get_id()
+ if self._activity_services.has_key(uid):
+ services = self._activity_services[uid]
+ for service in services:
+ if group.get_stype() == stype:
+ return service
+ return None
+
def start(self):
"""Start the presence service by kicking off service discovery."""
self._lock.acquire()