Revision 7eba70e1
Added by David Sorber almost 8 years ago
| software/dbus_test/client.py | ||
|---|---|---|
|
|
||
|
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()
|
||
| software/dbus_test/service.py | ||
|---|---|---|
|
#!/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)
|
||
| ... | ... | |
|
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):
|
||
Add quasi async behavior example which I what I really need.