DBUS service using glib: question

Xavier Claessens xclaesse at gmail.com
Fri Jul 14 02:13:11 PDT 2006


On dim, 2006-06-25 at 20:28 -0300, Andre Magalhaes wrote:
> On 6/25/06, Xavier Claessens <xclaesse at gmail.com> wrote:
> > Le dimanche 25 juin 2006 à 13:29 -0400, Havoc Pennington a écrit :
> > > Thiago Macieira wrote:
> > > >> - I register a main object with a connect method which returns an ID to
> > > >> the client. The connect method also create and register a new object
> > > >> just for this client which is stored in a list. The client, using the ID
> > > >> can get the remote object and use it. Signals and method on this object
> > > >> will have special effects depending on what the client does with it and
> > > >> not interfering with what other clients does with other objects.
> > > >> - The main object has also a disconnect method which takes the ID in
> > > >> param and remove all data related to this client.
> > > >>
> > > >> Is that the good way ? Does someone knows if other projects does the
> > > >> same thing, like that I can see how they do...
> > > >
> > > > Yes, that makes sense. In fact, this is what I recommend as a proper OOP
> > > > approach.
> > >
> > > A couple details that might help:
> > >   - of course you probably want to watch for the client's unique name
> > > vanishing and automatically clean up after the client if it does
> > >   - you probably don't need a custom ID thing, because you can use
> > > a client's unique name, or you can generate an object path for unique
> > > ids on the server side
> >
> > Thanks for answers. Maybe I didn't looked enough to documentation, but
> > how can I get the client's unique name ? And how can I get notified when
> > it disappear ? I can't find that in glib's API but it is maybe in lower
> > level API ?
> As Thiago said, you need to watch for the NameOwnerChanged signal to
> know when a client disappear.
> For an example, take a look at the file
> http://svn.sourceforge.net/viewcvs.cgi/tapioca-voip/trunk/tapioca/daemon/main.c?view=markup&rev=298
> and search for the name_owner_changed function.

Thanks ! I can now know when a client connect/disconnect and I keep a
hash table with information about all clients connected. Then only
problem remaining: When a method is called on my object, how can I know
which client called it ?

My callback for the "NameOwnerChanged" signal is always called twice !
Is is a bug ? For example, when a client connect the callback is called
2 times with the same args (name=:1.90 ; old_owner='\0' ;
new_owner=:1.90). I have the same thing when client disconnect. Bug or
feature ?

Thanks for all your help,

Xavier Claessens.



More information about the dbus mailing list