home · contact · privacy
Re-do IO with websocket capabilities.
[plomrogue2-experiments] / new2 / plomrogue / io_websocket.py
diff --git a/new2/plomrogue/io_websocket.py b/new2/plomrogue/io_websocket.py
new file mode 100644 (file)
index 0000000..49bdb77
--- /dev/null
@@ -0,0 +1,45 @@
+from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
+
+
+
+class PlomWebSocket(WebSocket):
+
+    def handleMessage(self):
+        if self.data == 'QUIT':
+            self.sendMessage('BYE')
+            self.close()
+        else:
+            for connection_id in self.server.clients:
+                if self.server.clients[connection_id] == self:
+                    self.server.queue.put((connection_id, self.data))
+    
+    def handleConnected(self):
+        import uuid
+        print('CONNECTION FROM:', self.address)
+        connection_id = uuid.uuid4()
+        self.server.clients[connection_id] = self
+
+    def handleClose(self):
+        print('CONNECTION CLOSED FROM:', self.address)
+        for connection_ids in self.server.clients:
+            if self.server.clients[connection_id] == self:
+                del self.server.clients[connection_id]
+
+    def put(self, msg):
+        self.sendMessage(msg)
+
+
+
+class PlomWebSocketServer(SimpleWebSocketServer):
+
+    def __init__(self, queue, port, *args, **kwargs):
+        super().__init__('', port, PlomWebSocket)
+        self.queue = queue
+        self.clients = {}
+
+    def serve_forever(self):
+        self.serveforever()
+
+    def server_close(self):
+        self.close()
+