generated from mononoki/pyproj
[+] mvp1
basic working mvp
This commit is contained in:
1
src/transport/__init__.py
Normal file
1
src/transport/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .tcp import TCP
|
||||
19
src/transport/tcp/__init__.py
Normal file
19
src/transport/tcp/__init__.py
Normal file
@@ -0,0 +1,19 @@
|
||||
import asyncio
|
||||
from .handler import handle
|
||||
|
||||
|
||||
class TCP:
|
||||
def __init__(self, addr, port, session):
|
||||
self.addr = addr
|
||||
self.port = port
|
||||
self.session = session
|
||||
|
||||
async def run(self):
|
||||
server = await asyncio.start_server(
|
||||
lambda r, w: handle(r, w, self.session),
|
||||
self.addr,
|
||||
self.port,
|
||||
)
|
||||
|
||||
async with server:
|
||||
await server.serve_forever()
|
||||
15
src/transport/tcp/connection.py
Normal file
15
src/transport/tcp/connection.py
Normal file
@@ -0,0 +1,15 @@
|
||||
import json
|
||||
|
||||
class Connection:
|
||||
def __init__(self, reader, writer):
|
||||
self.reader = reader
|
||||
self.writer = writer
|
||||
|
||||
async def send(self, packet):
|
||||
data = (json.dumps(packet) + "\n").encode()
|
||||
self.writer.write(data)
|
||||
await self.writer.drain()
|
||||
|
||||
async def close(self):
|
||||
self.writer.close()
|
||||
await self.writer.wait_closed()
|
||||
19
src/transport/tcp/handler.py
Normal file
19
src/transport/tcp/handler.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from .connection import Connection
|
||||
import json
|
||||
|
||||
async def handle(reader, writer, session):
|
||||
connection = Connection(reader, writer)
|
||||
|
||||
uid = await session.new(connection)
|
||||
|
||||
try:
|
||||
while True:
|
||||
raw = await reader.readline()
|
||||
if not raw : break
|
||||
|
||||
packet = json.loads(raw)
|
||||
await session.feed(uid, packet)
|
||||
|
||||
finally:
|
||||
await session.close(uid)
|
||||
|
||||
Reference in New Issue
Block a user