Transport: integrate aioquic QUIC datagram server skeleton (QuicWebTransportServer) and QUIC mode in run.py

- New server/quic_transport.py using aioquic to accept QUIC connections and datagrams
- run.py: QUIC mode when QUIC_CERT/QUIC_KEY provided; else in-memory
- requirements.txt: aioquic + cryptography
This commit is contained in:
Vladyslav Doloman
2025-10-07 20:53:24 +03:00
parent 352da0ef54
commit e79c523034
10 changed files with 108 additions and 32 deletions

36
run.py
View File

@@ -1,10 +1,36 @@
from server.server import main
import asyncio
import os
from server.server import GameServer
from server.config import ServerConfig
from server.transport import InMemoryTransport
async def main():
from server.server import GameServer
from server.transport import InMemoryTransport
cfg = ServerConfig()
server = GameServer(transport=InMemoryTransport(lambda d, p: server.on_datagram(d, p)), config=cfg)
await asyncio.gather(server.transport.run(), server.tick_loop())
if __name__ == "__main__":
import asyncio
try:
asyncio.run(main())
# Optional QUIC mode if env vars are provided
cert = os.environ.get("QUIC_CERT")
key = os.environ.get("QUIC_KEY")
host = os.environ.get("QUIC_HOST", "0.0.0.0")
port = int(os.environ.get("QUIC_PORT", "4433"))
if cert and key:
from server.quic_transport import QuicWebTransportServer
from server.server import GameServer
cfg = ServerConfig()
async def start_quic():
server = GameServer(transport=QuicWebTransportServer(host, port, cert, key, lambda d, p: server.on_datagram(d, p)), config=cfg)
await asyncio.gather(server.transport.run(), server.tick_loop())
asyncio.run(start_quic())
else:
asyncio.run(main())
except KeyboardInterrupt:
pass