@@ -35,15 +35,6 @@ def try_decode_UTF8(data):
3535 except Exception as e :
3636 raise (e )
3737
38- ROUTING_TABLE = {}
39-
40- # Decorator for routing websocket handlers a la Flask
41- def route (path ):
42- def decorate (fn ):
43- ROUTING_TABLE [path ] = fn
44- return fn
45- return decorate
46-
4738# +-+-+-+-+-------+-+-------------+-------------------------------+
4839# |0| | | | | | 1 | 2 3 |
4940# |0|1|2|3|4 5 6 7|8|9 0 1 2 3 4 5|6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1|
@@ -270,11 +261,23 @@ def calculate_response_key(cls, key):
270261 response_key = b64encode (hash .digest ()).strip ()
271262 return response_key .decode ('ASCII' )
272263
273- def run_websocket_server ():
274- TCPServer .allow_reuse_address = True
275- server = TCPServer (('127.0.0.1' , 5001 ), WebSocketHandler )
276- server .daemon_threads = True
277- server .serve_forever ()
278-
279- def start_websocket_server ():
280- threading .Thread (target = run_websocket_server , daemon = True ).start ()
264+ class WebSocketServer (ThreadingMixIn , TCPServer ):
265+ allow_reuse_address = True
266+ daemon_threads = True
267+
268+ def __init__ (self , host , port ):
269+ address = (host , port )
270+ # Have to init in both superclasses? Weird...
271+ super (TCPServer , self ).__init__ (address , WebSocketHandler )
272+ super (ThreadingMixIn , self ).__init__ (address , WebSocketHandler )
273+ self .routing_table = {}
274+
275+ # Decorator for routing websocket handlers a la Flask
276+ def route (self , path ):
277+ def decorate (fn ):
278+ self .routing_table [path ] = fn
279+ return fn
280+ return decorate
281+
282+ def start (self ):
283+ threading .Thread (target = self .serve_forever , daemon = True ).start ()
0 commit comments