commit 7eba70e125b4237fd444fbe9242ab6baaa847a77
Author: David Sorber <david.sorber@gmail.com>
Date:   Sun Jul 29 13:33:56 2018 -0400

    Add quasi async behavior example which I what I really need.

diff --git a/software/dbus_test/client.py b/software/dbus_test/client.py
index 8340bfb..3bd260c 100755
--- a/software/dbus_test/client.py
+++ b/software/dbus_test/client.py
@@ -2,16 +2,31 @@
 
 import dbus
 
+def error_func():
+    print('I got called ERROR')
+    
+def reply_func():
+    print('I got called REPLY')
+    
+
+
 class Client():
     def __init__(self):
         bus = dbus.SystemBus()
         service = bus.get_object('com.example.service', "/com/example/service")
         self._message = service.get_dbus_method('get_message', 'com.example.service.Message')
+        self._poke = service.get_dbus_method('poke', 'com.example.service.Poke')
         self._quit = service.get_dbus_method('quit', 'com.example.service.Quit')
 
     def run(self):
         print("Mesage from service:", self._message())
-        self._quit()
+        self._poke() #reply_handler=reply_func, error_handler=error_func)
+        print('post poke')
+        self._poke() #reply_handler=reply_func, error_handler=error_func)
+        print('post poke')
+        self._poke() #reply_handler=reply_func, error_handler=error_func)
+        print('post poke')
+        # ~ self._quit()
 
 if __name__ == "__main__":
     Client().run()
diff --git a/software/dbus_test/service.py b/software/dbus_test/service.py
index 2674201..b9a23ab 100755
--- a/software/dbus_test/service.py
+++ b/software/dbus_test/service.py
@@ -1,14 +1,17 @@
 #!/usr/bin/env python3
+import time
 
 import dbus
 import dbus.service
 import dbus.mainloop.glib
 
 from gi.repository import GObject as gobject
+from gi.repository import GLib
 
 class Service(dbus.service.Object):
     def __init__(self, message):
         self._message = message
+        self.poke_ctr = 0
 
     def run(self):
         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -24,6 +27,19 @@ class Service(dbus.service.Object):
     def get_message(self):
         print("  sending message")
         return self._message
+        
+    @dbus.service.method("com.example.service.Poke", in_signature='', out_signature='')
+    def poke(self):
+        print('Got a poke!')
+        GLib.timeout_add(10, self.poke_runner)
+        print('Post idle add')
+    
+    def poke_runner(self):
+        self.poke_ctr += 1
+        print('    Poke: {:d}'.format(self.poke_ctr))
+        time.sleep(3)
+        print('    Poke done')
+        return False
 
     @dbus.service.method("com.example.service.Quit", in_signature='', out_signature='')
     def quit(self):
