44import uuid
55from urllib .parse import urlparse
66
7- from .ws import WSServer
7+ from .ws import WSServer , WSClient
88from .protocol import BasicProtocol , create_peer
99from .receptor import Receptor
1010from .messages import envelope
@@ -22,29 +22,37 @@ def __init__(self, config, loop=asyncio.get_event_loop(), queue=None):
2222 self .queue = asyncio .Queue (loop = loop )
2323 self .receptor .response_queue = self .queue
2424
25- def enable_server (self , listen_address , listen_port ):
25+ def parse_peer (self , peer ):
26+ if "://" not in peer :
27+ peer = f"receptor://{ peer } "
28+ return urlparse (peer )
29+
30+ def enable_server (self , listen_url ):
31+ service = self .parse_peer (listen_url )
2632 listener = self .loop .create_server (
2733 lambda : BasicProtocol (self .receptor , self .loop ),
28- listen_address , listen_port ,
34+ service . hostname , service . port ,
2935 ssl = self .receptor .config .get_server_ssl_context ())
30- logger .info ("Serving on {}:{}" .format (listen_address , listen_port ))
31- # TODO: Enable stats?
36+ logger .info ("Serving on {}:{}" .format (service .hostname , service .port ))
3237 self .loop .create_task (listener )
3338
34- def enable_websocket_server (self , listen_address , listen_port ):
39+ def enable_websocket_server (self , listen_url ):
40+ service = urlparse (listen_url )
3541 listener = self .loop .create_server (
3642 WSServer (self .receptor , self .loop ).app ().make_handler (),
37- listen_address , listen_port ,
43+ service . hostname , service . port ,
3844 ssl = self .receptor .config .get_server_ssl_context ())
39- logger .info ("Server ws on {}:{}" .format (listen_address , listen_port ))
45+ logger .info ("Serving websockets on {}:{}" .format (service . hostname , service . port ))
4046 self .loop .create_task (listener )
4147
4248 async def add_peer (self , peer ):
43- if "://" not in peer :
44- peer = f"receptor://{ peer } "
45- peer = urlparse (peer )
46- logger .info ("Connecting to peer {}" .format (peer ))
47- await self .loop .create_task (create_peer (self .receptor , self .loop , peer .hostname , peer .port ))
49+ parsed = self .parse_peer (peer )
50+ if parsed .scheme == 'receptor' :
51+ logger .info ("Connecting to receptor peer {}" .format (peer ))
52+ await self .loop .create_task (create_peer (self .receptor , self .loop , parsed .hostname , parsed .port ))
53+ elif parsed .scheme in ('ws' , 'wss' ):
54+ logger .info ("Connecting to websocket peer {}" .format (peer ))
55+ await self .loop .create_task (WSClient (self .receptor , self .loop ).connect (peer ))
4856
4957 async def recv (self ):
5058 inner = await self .receptor .response_queue .get ()
0 commit comments