import asyncio import os from server.server import GameServer from server.config import ServerConfig async def run_in_memory(): 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()) async def run_quic(): from server.quic_transport import QuicWebTransportServer cfg = ServerConfig() host = os.environ.get("QUIC_HOST", "0.0.0.0") port = int(os.environ.get("QUIC_PORT", "4433")) cert = os.environ["QUIC_CERT"] key = os.environ["QUIC_KEY"] 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()) async def run_webtransport(): from server.webtransport_server import WebTransportServer cfg = ServerConfig() host = os.environ.get("WT_HOST", os.environ.get("QUIC_HOST", "0.0.0.0")) port = int(os.environ.get("WT_PORT", os.environ.get("QUIC_PORT", "4433"))) cert = os.environ.get("WT_CERT") or os.environ["QUIC_CERT"] key = os.environ.get("WT_KEY") or os.environ["QUIC_KEY"] server = GameServer(transport=WebTransportServer(host, port, cert, key, lambda d, p: server.on_datagram(d, p)), config=cfg) await asyncio.gather(server.transport.run(), server.tick_loop()) if __name__ == "__main__": try: mode = os.environ.get("MODE", "mem").lower() if mode == "wt": asyncio.run(run_webtransport()) elif mode == "quic": asyncio.run(run_quic()) else: asyncio.run(run_in_memory()) except KeyboardInterrupt: pass