#!/usr/bin/python3 ## Global Modules import threading, time, json#, ssl #from simple_websocket_server import WebSocketServer, WebSocket ## Semi-local modules from websock import WebSocketServer, WebSocket #from endpoint import MainEndpoint #### Local Modules from utils import stdout as stdout from consts import * import sql ############################################################### # Configuration f=open("pass.json", "r") p=json.load(f) f.close() PORT=p["PORT"] SECURE=p["SSL"] clients = [] ############################################################### # Main Class class WebSocketConn(WebSocket): def handle(self): global clients """ Called when websocket frame is received. To access the frame data call self.data. i.e. The client sent us a message \o/ If the frame is Text then self.data is a unicode object. If the frame is Binary then self.data is a bytearray object. """ print("Message received from %s - %s" % (self.address[0], self.data)) #stdout(self.address[0] + u' - %s' % (self.data)) self.send_message('ACK') def connected(self): global clients """ Called when a websocket client connects to the server. """ print(self.address, 'connected') #for client in clients: # print(repr(client)) # client.send_message(self.address[0] + u' - connected') stdout(self.address[0] + u' - connected') # TODO: Drop OLD connections when same ID tries to connect if (False): self.close(self, status=1000, reason='Unrecognized') else: clients.append(self) def handle_close(self): global clients """ Called when a websocket server gets a Close frame from a client. """ clients.remove(self) print(self.address, 'closed') #for client in clients: # client.send_message(self.address[0] + u' - disconnected') stdout(self.address[0] + u' - disconnected') ########################## # Useful functions: # send_message() # send_fragment_start() / send_fragment() / send_fragment_end() # ########################## def MainWebsocket(): if SECURE: server = WebSocketServer('', PORT, WebSocketConn, certfile="certificate.pem", keyfile="key.pem") print("Begin Secure Websocket at %d" % PORT) else: server = WebSocketServer('', PORT, WebSocketConn) print("Begin UNENCRYPTED Websocket at %d" % PORT) t = threading.Thread(target=server.serve_forever) t.daemon = True # Main server should not be a daemon? t.start() return #while True: # time.sleep(86400) # Broadcast function def sendmsg(m, t="raw"): global clients # Format message according to type if t == "ping": msg="pong" else: msg=u"%s" % m # Send message for c in clients: c.send_message(msg) return ############################################################### # Begin stuff stdout("Starting...") MainWebsocket() try: print("Running...") while True: time.sleep(15) sendmsg("Hello from SRV") except: stdout("Terminating!") # TODO: Cleanup here print("Server finished.")