|
@@ -0,0 +1,51 @@
|
|
|
+import socket
|
|
|
+import _thread
|
|
|
+
|
|
|
+
|
|
|
+class TCPServer(socket.socket):
|
|
|
+ clients = []
|
|
|
+
|
|
|
+ def __init__(self):
|
|
|
+ socket.socket.__init__(self)
|
|
|
+ self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
+ self.bind(('0.0.0.0', 8765))
|
|
|
+ self.listen(5)
|
|
|
+
|
|
|
+ def run(self):
|
|
|
+ print("Starting TCP Server")
|
|
|
+ try:
|
|
|
+ self.accept_clients()
|
|
|
+ except Exception as ex:
|
|
|
+ print(ex)
|
|
|
+ finally:
|
|
|
+ print("Server shutdown")
|
|
|
+ for client in self.clients:
|
|
|
+ client.close()
|
|
|
+ self.close()
|
|
|
+
|
|
|
+ def accept_clients(self):
|
|
|
+ while True:
|
|
|
+ (client_socket, address) = self.accept()
|
|
|
+ self.clients.append(client_socket)
|
|
|
+ self.on_open(client_socket)
|
|
|
+ _thread.start_new_thread(self.receive, (client_socket,))
|
|
|
+
|
|
|
+ def receive(self, client):
|
|
|
+ while True:
|
|
|
+ data = client.recv(1024)
|
|
|
+ if data == '':
|
|
|
+ break
|
|
|
+ self.on_message(client, data)
|
|
|
+ self.clients.remove(client)
|
|
|
+ self.on_close(client)
|
|
|
+ client.close()
|
|
|
+ _thread.exit()
|
|
|
+
|
|
|
+ def on_open(self, client):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def on_message(self, client, message):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def on_close(self, client):
|
|
|
+ pass
|