diff --git a/server/multi_transport.py b/server/multi_transport.py new file mode 100644 index 0000000..d4d3aed --- /dev/null +++ b/server/multi_transport.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +import asyncio +from .transport import DatagramServerTransport, TransportPeer + + +class MultiTransport(DatagramServerTransport): + """Run both WebTransport and QUIC transports and route sends. + + Inbound datagrams share the same on_datagram callback from GameServer, + so GameServer sees a unified source of datagrams. + """ + + def __init__(self, wt_transport: DatagramServerTransport, quic_transport: DatagramServerTransport): + self._wt = wt_transport + self._quic = quic_transport + + async def send(self, data: bytes, peer: TransportPeer) -> None: + # WebTransport peers are tuples (proto, flow_id); QUIC uses protocol instance + if isinstance(peer.addr, tuple) and len(peer.addr) == 2: + await self._wt.send(data, peer) + else: + await self._quic.send(data, peer) + + async def run(self) -> None: + await asyncio.gather(self._wt.run(), self._quic.run())