dbus-python を利用したサーバとクライアントの実装例です。
ここでは、SetCount()
と GetCount()
だけを行える Counter
オブジェクトを提供するサービスと、クライアントを作成してみます。
インタフェース名などは以下のようにします。
Bus name: com.example.CounterService
Object path: /com/example/CounterObject
Interface: com.example.Counter
D-Bus server 側では、export するオブジェクトを dbus.service.Object
を継承して作成します。
公開するメソッドには @dbus.service.method
アノテーションを付けて、以下の設定を行います。
class CounterObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature="i", out_signature="")
def SetCount(self, count):
self.count = count
print('SetCount called: ' + str(count))
@dbus.service.method(INTERFACE, in_signature="", out_signature="i")
def GetCount(self):
print('GetCount called')
return self.count
上記のように作成したオブジェクトは、以下のような手順で export します。
session_bus = dbus.SessionBus()
bus_name = dbus.service.BusName(BUS_NAME, session_bus)
counter_object = CounterObject(session_bus, OBJECT_PATH)
D-Bus クライアント側は、以下のような手順でリモートオブジェクト、インタフェースを取得します。
session_bus = dbus.SessionBus()
counter_object = session_bus.get_object(BUS_NAME, OBJECT_PATH)
counter_iface = dbus.Interface(counter_object, INTERFACE)
インタフェースを取得したら、後はローカルのオブジェクトのようにメソッドを呼び出せます。
counter_iface.SetCount(100)
val = counter_iface.GetCount()