Add peer-to-peer example
This is a server/client pair that shows how to use peer-to-peer
connections. You can also verify the server with gdbus like:
gdbus call -a unix:path=./socket -o /com/github/guelfey/Demo/PeerServer -m com.github.guelfey.PeerServer.Foo 42
diff --git a/_examples/peer-client.go b/_examples/peer-client.go
new file mode 100644
index 0000000..165b740
--- /dev/null
+++ b/_examples/peer-client.go
@@ -0,0 +1,24 @@
+package main
+
+import (
+ "fmt"
+ "github.com/guelfey/go.dbus"
+)
+
+func main() {
+ conn, err := dbus.Dial("unix:path=./socket")
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println("Connected on unix:path=./socket")
+
+ err = conn.Auth(nil)
+ if err != nil {
+ panic(err)
+ }
+
+ obj := conn.Object("", "/com/github/guelfey/Demo/PeerServer")
+ var r string
+ err = obj.Call("com.github.guelfey.PeerServer.Foo", 0, int32(42)).Store(&r)
+ fmt.Printf("Got reply: %s\n", r)
+}
diff --git a/_examples/peer-server.go b/_examples/peer-server.go
new file mode 100644
index 0000000..4902e4a
--- /dev/null
+++ b/_examples/peer-server.go
@@ -0,0 +1,53 @@
+package main
+
+import (
+ "fmt"
+ "github.com/guelfey/go.dbus"
+ "github.com/guelfey/go.dbus/introspect"
+ "os"
+)
+
+const intro = `
+<node>
+ <interface name="com.github.guelfey.PeerServer">
+ <method name="Foo">
+ <arg direction="in" type="i"/>
+ <arg direction="out" type="s"/>
+ </method>
+ </interface>` + introspect.IntrospectDataString + `</node> `
+
+type foo string
+
+func (f foo) Foo(val int32) (string, *dbus.Error) {
+ s := fmt.Sprintf("%s %d", f, val)
+ fmt.Println(s)
+ return s, nil
+}
+
+type handler struct {
+ f foo
+}
+
+func (h handler) GotConnection(server dbus.Server, conn *dbus.Conn) {
+ conn.Export(h.f, "/com/github/guelfey/Demo/PeerServer", "com.github.guelfey.PeerServer")
+ conn.Export(introspect.Introspectable(intro), "/com/github/guelfey/Demo/PeerServer",
+ "org.freedesktop.DBus.Introspectable")
+ if err := conn.ServerAuth(nil, server.Uuid()); err != nil {
+ panic(err)
+ }
+}
+
+func main() {
+ err := os.Remove("socket")
+ if err != nil && !os.IsNotExist(err) {
+ panic(err)
+ }
+ server, err := dbus.NewServer("unix:path=./socket", "1234567890123456")
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println("Listening on unix:path=./socket")
+
+ h := handler{foo("Bar!")}
+ dbus.Serve(server, h)
+}