aboutsummaryrefslogtreecommitdiff
path: root/host/matelight/listeners.py
diff options
context:
space:
mode:
authorjaseg <jaseg@jaseg.net>2013-12-18 18:22:00 +0100
committerjaseg <jaseg@jaseg.net>2013-12-18 18:22:00 +0100
commit93592ee43978005a86e0d83486c7b866e2c1b61f (patch)
tree90d0e090eb62418635081370eb3b83c132ad56ba /host/matelight/listeners.py
parent037b3fc1d453e60a3cca0cf0775f6397bd7337cb (diff)
downloadmatelight-93592ee43978005a86e0d83486c7b866e2c1b61f.tar.gz
matelight-93592ee43978005a86e0d83486c7b866e2c1b61f.tar.bz2
matelight-93592ee43978005a86e0d83486c7b866e2c1b61f.zip
Moving on with the host program
Diffstat (limited to 'host/matelight/listeners.py')
-rw-r--r--host/matelight/listeners.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/host/matelight/listeners.py b/host/matelight/listeners.py
new file mode 100644
index 0000000..bb0ce72
--- /dev/null
+++ b/host/matelight/listeners.py
@@ -0,0 +1,19 @@
+from socketserver import *
+import zlib
+import struct
+
+class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
+class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
+
+class MateLightUDPHandler(BaseRequestHandler):
+ def handle(self):
+ data = self.request[0].strip()
+ if len(data) != FRAME_SIZE+4:
+ raise ValueError('Invalid frame size: Expected {}, got {}'.format(FRAME_SIZE+4, len(frame)))
+ frame = data[:-4]
+ crc1, = struct.unpack('!I', data[-4:])
+ crc2 = zlib.crc32(frame),
+ if crc1 != crc2:
+ raise ValueError('Invalid frame CRC checksum: Expected {}, got {}'.format(crc2, crc1))
+ socket.sendto(b'ACK', self.client_address)
+