]> defiant.homedns.org Git - pyshared.git/blob - json_server.py
Bootloader: Allow to set i2c addr
[pyshared.git] / json_server.py
1 #!/usr/bin/env python
2 # -*- coding: iso-8859-15 -*-
3
4 import SocketServer
5 import json
6 import threading
7 import logging
8 import control
9 import threading
10
11 SocketServer.TCPServer.allow_reuse_address = True
12
13 logger = logging.getLogger(__name__)
14
15 class TCPServer(threading.Thread):
16         def __init__(self):
17                 threading.Thread.__init__(self)
18                 self.setDaemon(True)
19                 self.server = SocketServer.ThreadingTCPServer(('0.0.0.0', 10002), TCPHandler)
20                 self.server.allow_reuse_address = True
21                 self.server.daemon_threads = True
22                 self.start()
23
24         def run(self):
25                 self.server.serve_forever()
26
27         def stop(self):
28                 self.server.shutdown()
29                 self.server.socket.close()
30
31
32 class TCPHandler(SocketServer.BaseRequestHandler):
33         def __init__(self, request, client_address, server):
34                 self.__lock_send = threading.Lock()
35                 SocketServer.BaseRequestHandler.__init__(self, request, client_address, server)
36
37         def finish(self):
38                 return SocketServer.BaseRequestHandler.finish(self)
39
40         def send_log(self, s):
41                 self.send({"log": s})
42
43         def send(self, d):
44                 with self.__lock_send:
45                         self.request.sendall(json.dumps(d))
46
47         def handle(self):
48                 try:
49                         while True:
50                                 s = self.request.recv(4096)
51                                 if not s:
52                                         return
53
54                                 data = json.loads(s)
55                                 if data.has_key("command"):
56                                         cmd = data["command"]
57                                         ret = control.handle(cmd)
58                                         self.send({"return": ret, "command_was": cmd})
59
60                 except Exception, e:
61                         logger.debug("Exception wile receiving message: \n%s", e)
62
63
64 if __name__ == "__main__":
65         from time import sleep
66
67         logger.setLevel(logging.DEBUG)
68         logger.addHandler(logging.StreamHandler())
69
70         pServer = TCPServer()
71         while True:
72                 sleep(1)