From fcbf66a821dd8f3ffc8dc3dce7c2e48e22e35fa5 Mon Sep 17 00:00:00 2001 From: Nomads_Reach <144523850+NomadsReach@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:43:45 -0400 Subject: [PATCH] Add transport-aware authoritative server --- server/transport_server.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 server/transport_server.py diff --git a/server/transport_server.py b/server/transport_server.py new file mode 100644 index 0000000..5bb268d --- /dev/null +++ b/server/transport_server.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +from typing import Any + +from client_session import ClientSession +from packet_codec import PacketCodecError, encode_packet +from server_core import MAX_PACKET_CHARS, FalloutTogetherServer + + +class TransportAwareFalloutTogetherServer(FalloutTogetherServer): + """Authoritative server with serialization separated from transport framing. + + All gameplay validation and relay behavior stays in ``FalloutTogetherServer``. + Only the final outbound serialization boundary is replaced: TCP sessions add + line framing in ``ClientSession.send_packet`` while message transports receive + the raw encoded packet and delivery policy. + """ + + def _send_packet(self, client: ClientSession, packet: dict[str, Any], *, broadcast: bool = False) -> None: + try: + encoded = encode_packet(packet) + except PacketCodecError as error: + raise ValueError(str(error)) from error + + uses_message_transport = callable(getattr(client.connection, "send_encoded", None)) + if not uses_message_transport and len(encoded.payload) + 1 > MAX_PACKET_CHARS: + raise ValueError("Outbound TCP packet exceeds maximum line size") + + client.send_packet(encoded) + client.record_sent(broadcast=broadcast) + with self._lock: + self._stats["packetsSent"] += 1 + if broadcast: + self._stats["packetsBroadcast"] += 1