#!/usr/bin/env python

import gobject

import dbus
import dbus.service
import dbus.mainloop.glib
from dbus.lowlevel import SignalMessage

usage = """Usage:
python test-emitter.py &
python test-receiver.py
"""

DSTPATH="/com/example/TestService/object"
DSTIFACE="com.example.TestService"

class TestObject(dbus.service.Object):
    def __init__(self, conn, object_path=DSTPATH):
        self.__conn = conn # is it needed?
        dbus.service.Object.__init__(self, conn, object_path)

    @dbus.service.method(DSTIFACE, sender_keyword="sender")
    def emitHelloSignal(self, sender):
    
        print "Send a broadcast signal"
        print " Expected result: MATCH"
        m = SignalMessage(DSTPATH, DSTIFACE, "HelloSignal")
        m.append ("s", "hello broadcasted");
        self.__conn.send_message(m)

        print "Send a unicast signal to 'not-the-caller'"
        print " Expected result: not MATCH"
        m = SignalMessage(DSTPATH, DSTIFACE, "HelloSignal")
        m.append ("s", "hello for %s (unicast)" % DSTIFACE);
        m.set_destination (DSTIFACE)
        self.__conn.send_message(m)

        print "Send a unicasted signal to the caller"
        print " Expected result: MATCH"
        m = SignalMessage(DSTPATH, DSTIFACE, "HelloSignal")
        m.append ("s", "hello for %s (unicast)" % sender);
        m.set_destination (sender)
        self.__conn.send_message(m)


        return 'Signal emitted'

    @dbus.service.method(DSTIFACE,
                         in_signature='', out_signature='')
    def Exit(self):
        loop.quit()

if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    session_bus = dbus.SessionBus()
    name = dbus.service.BusName(DSTIFACE, session_bus)
    srv = TestObject(session_bus)

    loop = gobject.MainLoop()

    loop.run()
