X-Git-Url: https://git.ucc.asn.au/?p=uccdoor.git;a=blobdiff_plain;f=server.py;h=64752f56b648a5871a399af2b5a43960a58ad20e;hp=25e8ff8edfe6b21199c6bb51f5318f3742b3f833;hb=ef9b24a9235e41cd911148188b8c59c860794b0c;hpb=71000ffa8a503792eeac8b19f86c9ff7dd69baab diff --git a/server.py b/server.py index 25e8ff8..64752f5 100755 --- a/server.py +++ b/server.py @@ -11,6 +11,7 @@ import dbus, dbus.service import gobject from LATClient import LATClient from select import select +from threading import Timer def check_LAT_service(servicename, retries=3): latclient = LATClient(service=servicename.upper()) @@ -56,8 +57,12 @@ class Door(dbus.service.Object): object_path = '/au/asn/ucc/doors/%s' % doorname dbus.service.Object.__init__(self, bus, object_path) - # get initial state - self.poll() + # get initial state in a new thread + self.timeout = Timer(0, self.poll) + # daemon threads will be killed when the mainloop exits + # the timeout threads will inherit this value + self.timeout.setDaemon(True) + self.timeout.start() def poll(self): try: @@ -71,7 +76,8 @@ class Door(dbus.service.Object): self.status_changed(newstatus) # set up timeout again - gobject.timeout_add_seconds(self.interval, self.poll) + self.timeout = Timer(self.interval, self.poll) + self.timeout.start() @dbus.service.signal('au.asn.ucc.DoorInterface', signature='n') def status_changed(self, newstatus): @@ -83,6 +89,7 @@ class Door(dbus.service.Object): return self.status if __name__ == '__main__': + gobject.threads_init() doors = ('uccdoor', 'unisfadoor', 'chdoor', 'mrdoor', 'uccpir') from dbus.mainloop.glib import DBusGMainLoop