]> ToastFreeware Gitweb - gregoa/zavai.git/blobdiff - zavai/registry.py
Notes about remotising devices
[gregoa/zavai.git] / zavai / registry.py
index ec0a4a2c4f3b29c9bc497de4c6b1bedecc63bf77..4fc210143ecb8568f3ad692328dbea2665db80d1 100644 (file)
@@ -161,17 +161,19 @@ class Resource(object):
 
 class Service(Resource):
     "Service that is activated only when someone is listening"
-    def __init__(self):
+    def __init__(self, types = []):
         """
         Initialise a service that can emit signals for the given event types
         """
-        super(Service, self).__init__(types = [])
+        super(Service, self).__init__()
         self.callbacks = dict()
         for t in types:
             self.callbacks[t] = set()
+        self.started = False
 
     def shutdown(self):
-        self.stop()
+        if self.started:
+            self.stop()
 
     def start(self):
         "Activate the service"
@@ -197,10 +199,12 @@ class Service(Resource):
         self.callbacks[type].add(callback)
         if do_start:
             self.start()
+            self.started = True
 
     def disconnect(self, type, callback):
         "Disconnect a callback to this resource, activating it if needed"
         if not self.has_callbacks(): return
-        self.callbacks.discard(callback)
+        self.callbacks[type].discard(callback)
         if not self.has_callbacks():
             self.stop()
+            self.started = False