2024-07-16 10:42:54 +03:00

31 lines
1.0 KiB
Python

import asyncio
import struct
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:
header = await self.reader.readexactly(9) # Assuming the header is 9 bytes long
msg_type, msg_id, data_length = proto.unpack_header(header)
data = await self.reader.readexactly(data_length)
await self.handler(self.conn_id, self.writer, (msg_type, msg_id, data))
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()
async def write(self, data):
self.writer.write(data)
await self.writer.drain()