class DebloxSocketServer(threading.Thread): """ This class is a generic websocket server class. """ # setup the logger logger = logging.getLogger("DebloxSocketServer") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) logger.addHandler(ch) def __init__(self, port=8090, **kwargs): threading.Thread.__init__(self) self.setDaemon(True) self.logger.debug("starting init, port: %s" % port) self.port = port self.server = None self.logger.debug("init completed") def serve_forever(self): self.__serving = True while self.__serving: self.logger.debug("Running WS") self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.s.bind(('0.0.0.0', self.port)) self.s.listen(1) self.conn, self.cli_addr = self.s.accept() self.logger.debug("listener setup, starting WS") self.ws = WebsocketServer(self.conn, self.port, self.onopen, self.onmessage, self.onerror, None) self.logger.debug("WS Run complete") def chat(self, id): while self.ws.readyState == 1: msg = sys.stdin.readline() self.ws.send(msg) def onopen(self): thread.start_new_thread(self.chat, ('', self.ws)) def onmessage(self, data): print data def onerror(self): print "error occurred. closing conection" self.ws.readyState = 3 self.conn.close() sys.exit(1) def shutdown(self): self.logger.debug("Shutdown called for %s" % self) self.conn.close() self.s.close() self.ws.close() sys.exit(0)
def serve_forever(self): self.__serving = True while self.__serving: self.logger.debug("Running WS") self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.s.bind(('0.0.0.0', self.port)) self.s.listen(1) self.conn, self.cli_addr = self.s.accept() self.logger.debug("listener setup, starting WS") self.ws = WebsocketServer(self.conn, self.port, self.onopen, self.onmessage, self.onerror, None) self.logger.debug("WS Run complete")