Bindings without callbacks (was Re: [ANN] Squeak bindings for D-Bus)
Daniel B. Faken
faken at cascv.brown.edu
Wed May 25 06:04:58 PDT 2005
On Wed, 25 May 2005, John (J5) Palmieri wrote:
> One note. It is not the best thing to patch dbus in order to support
> your bindings. What you probably want to do is create a helper library
> that your bindings then link to.
Yeah.. it just seemed like an awfully small library (~20 lines of C) :).
Can you think of any better way to go about this?
The code in question:
------------------------
// Helper function for Squeak bindings
#include <stdio.h>
static DBusHandlerResult _dbusMessageHolderHandler(DBusConnection *conn,
DBusMessage *msg, void *data)
{
_dbus_assert(conn && msg && data);
dbus_message_ref(msg); // needed?
*((void **)data) = msg;
return DBUS_HANDLER_RESULT_HANDLED;
}
DBusObjectPathVTable *dbus_message_holder_vtable(void);
DBusObjectPathVTable *dbus_message_holder_vtable(void)
{
static DBusObjectPathVTable tbl;
tbl.unregister_function = NULL;
tbl.message_function = _dbusMessageHolderHandler;
return (&tbl);
}
------------------
(actually I don't even need the latter part (to get the vtable) - just the
callback fn, since I don't know a way to dynamically generate these)
This allows the application (here: Squeak) to register a fallback
(/Squeak) with the result of calling dbus_message_holder_vtable() and a
data pointer-pointer.
The app can then call dbus_connection_read_write_dispatch() or
dbus_connection_dispatch() and check the pointer afterwards to see
if it got a message.
thanks,
Daniel
> On Tue, 2005-05-24 at 14:50 -0400, Daniel B. Faken wrote:
> > Hello all,
> >
> > I've put up a first version of my Squeak-Smalltalk bindings to the D-Bus
> > IPC system at: http://www.ccv.brown.edu/~faken/squeak/DBus-0.1.1.cs
> >
> > This is an alpha release; it has some documentation but no examples yet.
> >
> > Feedback is welcome..
> >
> > thanks,
> > Daniel Faken
> >
> > P.S. there is kindof an example at
> > http://lists.freedesktop.org/archives/dbus/2005-May/002657.html
> > for the die-hard. :)
> >
>
More information about the dbus
mailing list