8
8
9
9
import websockets
10
10
11
- from . import settings
11
+ from . import config
12
12
from ._asyncio import gather
13
13
14
- from . import exception
14
+ from . import exception , util
15
+ from .util import get_logging_handler
15
16
from .exception import *
16
17
17
18
__author__ = 'Lennart Grahl <[email protected] >'
18
19
__status__ = 'Development'
19
20
__version__ = '0.0.1'
20
21
__all__ = (
21
-
22
+ 'serve' ,
23
+ 'logging_handler' ,
22
24
) + exception .__all__
23
25
26
+ # Create default logger and handler
27
+ logging_handler = util .get_logging_handler ()
28
+ log = util .get_logger ()
24
29
25
30
# Globals
26
31
paths = {}
@@ -151,17 +156,17 @@ def register(self, ws):
151
156
raise MessageFlowError ('Sent invalid JSON object while registering' ) from exc
152
157
153
158
# Check type
154
- type_ = data .get (settings .field_type )
155
- if type_ == settings .type_hello_server :
159
+ type_ = data .get (config .field_type )
160
+ if type_ == config .type_hello_server :
156
161
# Check for key
157
- key = data .get (settings .type_key )
162
+ key = data .get (config .type_key )
158
163
if key is not None :
159
164
# Register connection and set key
160
165
role = Role .server
161
166
self .set (ws , role , key = key )
162
167
else :
163
168
raise MessageFlowError ('Registered as server but key is missing' )
164
- elif type_ == settings .type_hello_client :
169
+ elif type_ == config .type_hello_client :
165
170
# Register connection
166
171
role = Role .client
167
172
self .set (ws , role )
@@ -185,8 +190,8 @@ def send_key(self, ws):
185
190
186
191
# Create key message
187
192
message = {
188
- settings .field_type : settings .type_key ,
189
- settings .field_data : self .key
193
+ config .field_type : config .type_key ,
194
+ config .field_data : self .key
190
195
}
191
196
192
197
# Send key message
@@ -248,8 +253,8 @@ def handle(self, ws, role, message):
248
253
raise MessageFlowError (error ) from exc
249
254
250
255
# Check type
251
- type_ = data .get (settings .field_type )
252
- if type_ == settings .type_reset :
256
+ type_ = data .get (config .field_type )
257
+ if type_ == config .type_reset :
253
258
# Dispatch silently
254
259
yield from self .send_reset (ws , role , message )
255
260
else :
@@ -260,7 +265,7 @@ def handle(self, ws, role, message):
260
265
@asyncio .coroutine
261
266
def send_error (self , ws , role ):
262
267
# Create error message
263
- message = {settings .field_type : settings .type_send_error }
268
+ message = {config .field_type : config .type_send_error }
264
269
265
270
# Send error message
266
271
self .logger .info ('Sending send error notification to {}' , role )
@@ -306,14 +311,14 @@ def keep_alive(logger, ws, role):
306
311
logger .debug ('Ping to {}' , role )
307
312
try :
308
313
# Send ping
309
- yield from asyncio .wait_for (ws .ping (), settings .ping_timeout )
314
+ yield from asyncio .wait_for (ws .ping (), config .ping_timeout )
310
315
except asyncio .TimeoutError :
311
316
raise PingTimeoutError (role )
312
317
else :
313
318
logger .debug ('Pong from {}' , role )
314
319
315
320
# Wait
316
- yield from asyncio .sleep (settings .ping_interval )
321
+ yield from asyncio .sleep (config .ping_interval )
317
322
except asyncio .CancelledError :
318
323
logger .debug ('Ping cancelled {}' , role )
319
324
@@ -325,7 +330,7 @@ def signaling(ws, path):
325
330
326
331
try :
327
332
# Validate path
328
- if len (path ) != settings .path_length :
333
+ if len (path ) != config .path_length :
329
334
raise PathError (len (path ))
330
335
except PathError as exc :
331
336
logging .getLogger ('signaling' ).error (exc )
@@ -365,35 +370,18 @@ def signaling(ws, path):
365
370
path .logger .warning ('Unreachable section' )
366
371
367
372
368
- def start_server ():
369
- server = websockets .serve (signaling , port = 8765 )
370
- loop = asyncio .get_event_loop ()
371
- loop .run_until_complete (server )
372
- loop .run_forever ()
373
-
374
-
375
- def setup_logging ():
376
- # Setup formatter and handler
377
- formatter = logging .Formatter (
378
- fmt = settings .logging_formatter ,
379
- datefmt = settings .logging_date_formatter ,
380
- style = settings .logging_style
381
- )
382
- # handler = logging.color.ColorStreamHandler()
383
- handler = logging .StreamHandler ()
384
- handler .setFormatter (formatter )
385
-
386
- # Setup websockets logger
387
- ws_logger = logging .getLogger ('websockets' )
388
- ws_logger .setLevel (settings .logging_level )
389
- ws_logger .addHandler (handler )
390
-
391
- # Setup signaling logger
392
- logger = logging .getLogger ('signaling' )
393
- logger .set_level (settings .logging_level )
394
- logger .add_handler (handler )
395
-
396
-
397
- if __name__ == '__main__' :
398
- setup_logging ()
399
- start_server ()
373
+ @asyncio .coroutine
374
+ def serve (port = 8765 , loop = None ):
375
+ """
376
+ TODO: Describe.
377
+ """
378
+ # Get loop
379
+ loop = loop if loop is not None else asyncio .get_event_loop ()
380
+
381
+ # Start server
382
+ log .debug ('Starting server' )
383
+ server = yield from websockets .serve (signaling , port = port )
384
+
385
+ # Return server
386
+ log .notice ('Listening' )
387
+ return server
0 commit comments