-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.py
34 lines (27 loc) · 1.19 KB
/
server.py
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
33
34
import asyncio
class Server:
def __init__(self, host: str,
port: int, loop: asyncio.AbstractEventLoop) -> None:
self.connections = list()
loop.create_task(asyncio.start_server(
self.accept_connection, host, port, loop=loop)
)
async def accept_connection(self, reader: asyncio.StreamReader,
writer: asyncio.StreamWriter) -> None:
self.connections.append((reader, writer))
writer.write("Welcome to chat server.\n".encode('utf-8'))
await self.manage_connection(reader, writer)
async def manage_connection(self, reader: asyncio.StreamReader,
writer: asyncio.StreamWriter) -> None:
while True:
received_message = (await reader.read(4096)).decode('utf-8')
print("Received data: " + received_message)
for (client_reader, client_writer) in self.connections:
client_writer.write(received_message.encode('utf-8'))
if __name__ == "__main__":
event_loop = asyncio.get_event_loop()
server = Server('', 8888, event_loop)
try:
event_loop.run_forever()
finally:
event_loop.close()