]> git.llucax.com Git - software/pymin.git/blobdiff - pymindaemon.py
Make Host iterable so it can be used as a sequence when serializing.
[software/pymin.git] / pymindaemon.py
index 1868ae245305d74b5554478e0baa0833a1d7cd3e..b8369b9d67622467cc7e8b36187459a664d899ac 100644 (file)
@@ -11,7 +11,7 @@ command-line.
 import signal
 import socket
 from dispatcher import Dispatcher
-from eventloop import EventLoop
+from eventloop import EventLoop, LoopInterruptedError
 
 class PyminDaemon(EventLoop):
     r"""PyminDaemon(bind_addr, routes) -> PyminDaemon instance
@@ -47,7 +47,7 @@ class PyminDaemon(EventLoop):
         # Signal handling
         def quit(signum, frame):
             print "Shuting down ..."
-            loop.stop() # tell main event loop to stop
+            self.stop() # tell main event loop to stop
         def reload_config(signum, frame):
             print "Reloading configuration..."
             # TODO iterate handlers list propagating reload action
@@ -58,20 +58,28 @@ class PyminDaemon(EventLoop):
     def handle(self):
         r"handle() -> None :: Handle incoming events using the dispatcher."
         (msg, addr) = self.file.recvfrom(65535)
-        self.dispatcher.dispatch(msg)
-        #try:
-        #    d.dispatch(msg)
-        #except dis.BadRouteError, inst:
-        #    sock.sendto('Bad route from : ' + inst.cmd + '\n', addr)
-        #except dis.CommandNotFoundError, inst:
-        #    sock.sendto('Command not found : ' + inst.cmd + '\n', addr)
+        try:
+            result = self.dispatcher.dispatch(msg)
+            response = 'OK '
+        except Exception, e:
+            result = str(e)
+            response = 'ERROR '
+        if result is None:
+            response += '0'
+        else:
+            response += '%d\n%s' % (len(str(result)), result)
+        self.file.sendto(response, addr)
 
     def run(self):
         r"run() -> None :: Run the event loop (shortcut to loop())"
-        return self.loop()
+        try:
+            return self.loop()
+        except LoopInterruptedError, e:
+            pass
 
 if __name__ == '__main__':
 
+    @handler
     def test_handler(*args):
         print 'test:', args