Looking for some help wrapping my head around and dialing in my EOS based P2P session logic

Looking for help dialing my P2P connection logic and understanding how to set up the game host as the listen server, get into the correct level, and enable client connections. (specific questions at the bottom)

I’m using the EOS Integration Kit for EOS functionality, so I’m not asking for node instructions but for an understanding of the high-level workflow, steps, and reasons behind transitioning from finding/creating an EOS session to landing in the correct level with all players.

My high-level implementation:

Login

  1. Player logs into Azure PlayFab.

  2. On successful PlayFab login the player is logged into EOS using either HW ID or Epic account.

Create Lobby

  1. Create New PlayFab lobby event called from Create Lobby UI.

  2. Create lobby event is fired in gameinstance creating a new EOS session.

  3. On EOS session created success a new PlayFab lobby is created passing the EOS session name into it as a Search Object.

  4. On successful PlayFab lobby creation this player, as the ‘host’, calls ‘servertravel listen?(LevelName)’.

Join Lobby

  1. Player calls ‘Find PlayFab Lobbies’ in the gameinstance from the Lobby Browser menu.

  2. On PlayFab lobbies found success, the lobby list is populated.

  3. Player selects the lobby they want to join and clicks ‘join’.

  4. PlayFab lobby, and search data objects are deconstructed to get the host’s EOS session name.

  5. Join EOS session is called using provided session name.

  6. Player connects to host, and travels to the level the host is in.

Here’s where I’m stuck:

Initially, I used the actual game level for the lobby host to servertravel to directly, and clients joined on lobby join. It worked perfectly on different machines and networks.

Then, I built a LobbyMap for players to join first, transitioning to the GameMap once enough players readied up and the host started the match. I only cleaned up the UI and had players load into the LobbyMap. After packaging, the logic remained the same with no errors, but on ‘servertravel listen?LobbyMap’ for the host, EOS connects and runs the commands but never moves to the map. The client sees the lobby, joins, gets the EOS session name, connects fine, but never loads and transitions to the level. The host logs show EOS detecting the client connect attempt but with an unknown ID/Socket.

Whether you know what’s going on in my project or not, what I’d like to know, is the correct way to handle connecting and map travel for these scenarios using EOS for P2P multiplayer:

  • Host player creates EOS session already in the level they want other players to join
    • Do you just call create EOS session and you’re good?
    • Or do you need to call create EOS session and then a console cmd to “initialize” this player as the host session and make them joinable?
  • Host player creates EOS session in level A but wants the session and joining players to start in map B
    • Is my approach above correct? Create session → Call ‘servertravel listen?MapB’?

    • Is this even a scenario you should do? What’s the best practice here- is it locally moving the host to the correct level before creating the session?

  • Client player wants to join the host’s EOS session
    • Do you just call ‘EOS join session’ and will the code on the backend handle the joining, figuring out the level the host is in, and transporting the client to the correct map after connecting to the host?

    • Do you need to call ‘open (session join address)’?

I know this was a really long and wordy post so I appreciate your time for reading through it!