[DBUS] Observer pattern design
David Eriksson
twogood at users.sourceforge.net
Mon May 23 11:37:05 PDT 2005
On Mon, 2005-05-23 at 15:06 -0300, Claudio Takahasi wrote:
> Hi folks,
>
> What is the correct design for a observer* pattern application using D-BUS?
>
> Suppose a wireless connection manager, when the signal is weak or
> the link is down, the connection manager must notify all connected clients.
> Implement the other side(clients requiresting services) is trivial. There
> are a lot of sample addressing this context. However, for a observer
> pattern I was not able to figure out how implement it. I think use polling
> is NOT a interesting approach.
>
> What are the possible implementations for this kind of D-BUS application?
First a disclaimer:
1. I'm just a humble (ab)user of D-BUS and a Python newbie
2. I have currently only (ab)used D-BUS 0.2x
Now I can share what I've done for an observer-like pattern:
I have an interface with a Subscribe method in a C++ daemon. In order to
know who subscribed, I save the value of dbus_message_get_sender() for
the message containing the Subscribe call. The Subscribe method returns
an object path.
When I have an event I want to share with my subscribers, I create and
send a method call for each subscriber with the same path as returned to
the subscriber from the Subscribe method.
In the Python client I created a special class for the base service:
class BaseService:
def __init__(self, bus):
self._service_name = bus.get_connection().get_base_service()
self._bus = bus
def get_bus(self):
return self._bus
def get_service_name(self):
return self._service_name
An instance of this class is used as a parameter to
dbus.Object.__init__(), something like this:
class Subscriber:
def __init__(self, name, type, path, base_service):
dbus.Object.__init__(self,
path, base_service,
[self.SomeEventISubscribeTo])
def SomeEventISubscribeTo(self, message, param1, param2):
print "event received!"
--
Regards,
-\- David Eriksson -/-
SynCE - http://synce.sourceforge.net
ScummVM - http://scummvm.sourceforge.net
Desquirr - http://desquirr.sourceforge.net
More information about the dbus
mailing list