11import asyncio
22import datetime
3- import functools
43import logging
54import uuid
6- from urllib .parse import urlparse
75
86from .receptor import Receptor
97from .messages import envelope
10- from .connection import ws , sock , Worker
8+ from .connection .base import Worker
9+ from .connection .manager import Manager
1110
1211logger = logging .getLogger (__name__ )
1312
@@ -17,45 +16,27 @@ class Controller:
1716 def __init__ (self , config , loop = asyncio .get_event_loop (), queue = None ):
1817 self .receptor = Receptor (config )
1918 self .loop = loop
20- self .factory = lambda : Worker (self .receptor , loop )
19+ self .connection_manager = Manager (
20+ lambda : Worker (self .receptor , loop ),
21+ self .receptor .config .get_server_ssl_context (),
22+ loop
23+ )
2124 self .queue = queue
2225 if self .queue is None :
2326 self .queue = asyncio .Queue (loop = loop )
2427 self .receptor .response_queue = self .queue
2528
26- def parse_peer (self , peer ):
27- if "://" not in peer :
28- peer = f"receptor://{ peer } "
29- return urlparse (peer )
30-
3129 def enable_server (self , listen_url ):
32- service = self .parse_peer (listen_url )
33- client_connected_cb = functools .partial (sock .serve , factory = self .factory )
34- listener = asyncio .start_server (
35- client_connected_cb ,
36- host = service .hostname ,
37- port = service .port ,
38- ssl = self .receptor .config .get_server_ssl_context ())
39- logger .info ("Serving on {}:{}" .format (service .hostname , service .port ))
30+ listener = self .connection_manager .get_listener (listen_url )
31+ logger .info ("Serving on %s" , listen_url )
4032 self .loop .create_task (listener )
4133
4234 def enable_websocket_server (self , listen_url ):
43- service = urlparse (listen_url )
44- listener = self .loop .create_server (
45- ws .app (self .factory ).make_handler (),
46- service .hostname , service .port ,
47- ssl = self .receptor .config .get_server_ssl_context ())
48- logger .info ("Serving websockets on {}:{}" .format (service .hostname , service .port ))
49- self .loop .create_task (listener )
35+ self .enable_server (listen_url )
5036
5137 async def add_peer (self , peer ):
52- parsed = self .parse_peer (peer )
53- if parsed .scheme == 'receptor' :
54- logger .info ("Connecting to receptor peer {}" .format (peer ))
55- await self .loop .create_task (sock .connect (parsed .hostname , parsed .port , self .factory , self .loop ))
56- elif parsed .scheme in ('ws' , 'wss' ):
57- logger .info ("Connecting to websocket peer {}" .format (peer ))
58- await self .loop .create_task (ws .connect (peer , self .factory , self .loop ))
38+ logger .info ("Connecting to peer {}" .format (peer ))
39+ await self .loop .create_task (self .connection_manager .get_peer (peer ))
5940
6041 async def recv (self ):
6142 inner = await self .receptor .response_queue .get ()
0 commit comments