-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathchat_server.py
More file actions
32 lines (22 loc) · 1008 Bytes
/
chat_server.py
File metadata and controls
32 lines (22 loc) · 1008 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import asyncio
import logging
from rsocket.frame_helpers import ensure_bytes
from rsocket.helpers import create_future, utf8_decode
from rsocket.local_typing import Awaitable
from rsocket.payload import Payload
from rsocket.request_handler import BaseRequestHandler
from rsocket.rsocket_server import RSocketServer
from rsocket.transports.tcp import TransportTCP
class Handler(BaseRequestHandler):
async def request_response(self, payload: Payload) -> Awaitable[Payload]:
username = utf8_decode(payload.data)
logging.info(f'New user: {username}')
return create_future(Payload(ensure_bytes(f'Welcome to chat, {username}')))
async def run_server():
def session(*connection):
RSocketServer(TransportTCP(*connection), handler_factory=Handler)
async with await asyncio.start_server(session, 'localhost', 6565) as server:
await server.serve_forever()
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
asyncio.run(run_server())