2024-07-08 16:21:14 +03:00
|
|
|
import asyncio
|
|
|
|
|
import proto
|
|
|
|
|
|
|
|
|
|
class Transport:
|
|
|
|
|
def __init__(self, conn_id, reader, writer, handler):
|
|
|
|
|
self.conn_id = conn_id
|
|
|
|
|
self.reader = reader
|
|
|
|
|
self.writer = writer
|
|
|
|
|
self.handler = handler
|
|
|
|
|
|
|
|
|
|
async def read_and_process(self):
|
|
|
|
|
try:
|
|
|
|
|
while True:
|
2024-07-16 16:04:59 +03:00
|
|
|
message = await proto.parse_from_reader(self.reader)
|
2024-07-11 14:03:13 +03:00
|
|
|
await self.handler(self.conn_id, self.writer, message)
|
2024-07-08 16:21:14 +03:00
|
|
|
except asyncio.IncompleteReadError:
|
|
|
|
|
print("Transport: Connection closed by the peer.")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Transport: An error occurred: {e}")
|
|
|
|
|
finally:
|
|
|
|
|
self.writer.close()
|
|
|
|
|
await self.writer.wait_closed()
|
|
|
|
|
|
2024-07-11 14:03:13 +03:00
|
|
|
async def write(self, message):
|
|
|
|
|
self.writer.write(message)
|
2024-07-08 16:21:14 +03:00
|
|
|
await self.writer.drain()
|