On Tuesday, November 19, 2019 at 11:21:17 AM UTC-5, Ken Bassford wrote: > > Hi Folks, > > I have been trying to implement godbus's Export function to no avail. > Looking at server.go (under the examples folder) is not very helpful as an > inspection of export.go contains what appear to be cheater functions that > enable the example to work. Rename "Foo" to "Ping and it fails. > > With that out of the way, I have not been able to find any current > projects that utilize godbus server functions as a good example (I'm > readily open to suggestions). Snippets of what I currently have are as > follows ... > > First I created a structure to server as a basis for follow-on functions > (since you can't expand *dbus.Conn as it is predefined in another package) > ... > ``` > type dbusobj struct { > Conn *dbus.Conn > Iface string > Path dbus.ObjectPath > } > ``` > .. a function to populate the structure ... > ``` > func newDbusObject(conn *dbus.Conn, iface string, path dbus.ObjectPath) > dbusobj { > pdbo := new(dbusobj) > pdbo.Conn = conn > pdbo.Iface = iface > pdbo.Path = path > return *pdbo > } > ``` > ... and a simple function to export a named method interface ... > ``` > func (co dbusobj) addResponseMethod(methodname string) error { > var methodxml = ` > <node> > <interface name="` + co.Iface + `"> > <method name="` + methodname + `"> > <arg direction="out" type="s"/> > </method> > </interface>` + introspect.IntrospectDataString + > `</node>` > return co.Conn.Export(introspect.Introspectable(methodxml), co.Path, > co.Iface) > } > ``` > Implementation of the above looks like this ... > ``` > // Create our private dbus connection structure > dbc := newDbusObject(conn, dbusiface, dbuspath) > err = dbc.addResponseMethod("Ping") > if err != nil { > fmt.Println("Failed to export method to system bus:", err) > } > ``` > The function does not throw any error, but an introspection of the dbus > shows ... > ``` > DBUS_SYSTEM_BUS_ADDRESS="unix:path=/var/run/dbusalt/system_bus_socket" > dbus-send --system --print-reply --type=method_call > --dest='org.openxt.ndvm.wifi' '/org/openxt/ndvm/wifi' > org.freedesktop.DBus.Introspectable.Introspect > method return time=1574178759.805460 sender=:1.0 -> destination=:1.1 > serial=4 reply_serial=2 > string " > <node> > <interface name="org.openxt.ndvm.wifi"> > <method name="Foo"> > <arg direction="out" type="s"/> > </method> > </interface> > <interface name="org.freedesktop.DBus.Introspectable"> > <method name="Introspect"> > <arg name="out" direction="out" type="s"/> > </method> > </interface> > </node>" > > ``` > Calls to the unaltered "Foo" work, "Ping" does not (of course). > > What am I doing wrong? > Are there some good (current) examples in a project where they have not > abstracted the interface so much as to be useless for learning? > Is there a mailing list more suitable for these questions? (I could not > find one and I hate to open issues just to ask questions.) > > It would be nice if someone updated the examples used under godbus to > reflect what an actual user would have to go through to implement a full, > usable method. >
(Note: Also tried ...) ``` func (dbo dbusobj) addSimpleMethod(method interface{}) error { err := dbo.Conn.Export(method, dbo.Path, dbo.Iface) if err != nil { return err } node := &introspect.Node{} node.Name = dbo.Iface iface := &introspect.Interface{} iface.Name = dbo.Iface mts := introspect.Methods(method) iface.Methods = mts node.Interfaces = append(node.Interfaces, *iface) dbusXMLStr := introspect.NewIntrospectable(node) err = dbo.Conn.Export(dbusXMLStr, dbo.Path, "org.freedesktop.DBus.Introspectable") if err != nil { return err } return nil } ``` Implemented as ... ``` p := ping("Ping called!") err = dbc.addSimpleMethod(p) ``` Same result. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/da11ce7a-a10b-48dd-a21c-2474da49d542%40googlegroups.com.