Seeking Advice: Orchestrating "Hub-to-Match" transitions (Dedicated Hub -> Private Sessions)
Hello everyone,
Hello everyone,
I am currently developing a Tower Defense project and I'm looking for the best architectural approach to transition groups of players from a Permanent Dedicated Hub to Private Match Sessions.
The Goal
Players gather in a central Hub (Dedicated Server). When a group enters a portal, a countdown starts, a "Leader" is elected, and the group is migrated to a private match instance (Combat Scene).
Current Architecture
Hub (Dedicated): Runninglobby.scene.
Transition Scene: Clients load amenu-main.sceneto drop the Hub connection before joining the match.
Match Instance: Either a secondary Dedicated Server or a P2P Lobby.
Relay Daemon: A Node.js service used to relayLobbyIdsor launch processes.
Implementation Attempts & Roadblocks
Attempt 1: Secondary Dedicated Servers (The Port Binding Issue)
Following the July 2025 update notes, I attempted to launch multiple
sbox-server.exe instances using the new manual port configuration.
Command used:sbox-server.exe -allowlocalhttp +port 27020 +queryport 27031 +game "..." +net_game_server_token <GSLT>.
Result: The engine seems to ignore the+portargument and remains locked on the default ports.
Log Error:CreateBoundSocket: ::bind couldn't find an open port between 27016 and 27016.
Question: Is there a specific way to force the engine to respect the+portConVar for multiple instances on a single machine?
Attempt 2: P2P Migration via SDR (The Sandbox Restriction)
To bypass port issues, I tried migrating players to a P2P session where the Leader creates a lobby via Steam Datagram Relay (SDR).
Process: The Hub sends aRoomIDto players. The Leader creates the lobby and posts theLobbyIDto my Node.js daemon.
The Issue: The s&box sandbox restricts HTTP calls. Whilelocalhost:8080works, using the machine's public IP triggers a security block.
Log Error:Failed to contact daemon: Access to 'http://<Public_IP>:8080/lobby' is not allowed.
Question: How do you handle a relay service for player handoff within the sandbox constraints if players are not on the same local network?
My Main Question
What is the "Facepunch-approved" way to handle this transition? Should we rely on an external orchestrator launching Dedicated Servers with unique GSLT tokens and connecting via Steam ID (Fake IP) even if local port binding fails? Or is there a more native way to "group" players and move them between networked scenes without managing external daemons?
I've already implemented a
RoomManager and MatchmakingRouter system, but the networking "handshake" between different server instances remains the primary hurdle.Any insights or examples of similar orchestration would be greatly appreciated!
Knight-HD