Crossplay Integration Kit
Multiplayer

Joining Sessions

Join cross-platform sessions and lobbies with automatic travel

Joining Sessions

The Join Crossplay Session node handles joining sessions found via Find Sessions. It manages the connection handshake and optionally auto-travels your player to the server.

Basic Usage

Quick Setup

SessionToJoin = [From Find Sessions result]
bAutoTravel = true

Pass the FUCIK_SessionInfo from your search results and enable auto-travel for seamless joining.

Parameters

ParameterTypeDescription
SessionToJoinFUCIK_SessionInfoThe session info from Find Crossplay Sessions.
bAutoTravelBooleanAutomatically ClientTravel to the server after joining.

Output

Delegates

DelegateParametersDescription
OnSuccessConnectString, SessionIdSuccessfully joined. Ready to travel.
OnFailureErrorMessageJoin failed.

Success Output

FieldTypeDescription
ConnectStringStringServer address for travel (e.g., "192.168.1.100:7777").
SessionIdStringThe EOS session ID you joined.

Auto Travel

When bAutoTravel = true:

  1. Session join completes
  2. UCIK calls ClientTravel(ConnectString) automatically
  3. Player loads into the server's map

When bAutoTravel = false:

  1. Session join completes
  2. OnSuccess fires with ConnectString
  3. You handle travel manually

Manual Travel Example

JoinCrossplaySession
  bAutoTravel = false

On Success (ConnectString):
  // Show loading screen
  ShowLoadingWidget()

  // Travel manually
  ClientTravel(ConnectString, Absolute)

Join Flow

1. Validate SessionInfo has native search result
2. Detect backend (OSSv2 or OSSv1)
3. Call platform JoinSession
4. On success:
   - Get resolved connect string
   - Handle dedicated server port (if applicable)
   - Auto-travel (if enabled)
   - Fire OnSuccess
5. On failure:
   - Fire OnFailure with reason

Error Handling

Common Errors

ErrorDescriptionSolution
Session is fullMax players reachedShow user the session is full
Session does not existSession ended/closedRefresh session list
Could not retrieve addressConnection info missingCheck host is listening
Already in a sessionPlayer has active sessionLeave current session first
Invalid sessionBad SessionInfoEnsure SessionInfo came from Find

Handling Failures

On Failure (ErrorMessage):
  Switch on ErrorMessage:
    "Session is full":
      ShowNotification("This game is full!")
    "Session does not exist":
      ShowNotification("Game no longer available")
      RefreshSessionList()
    Default:
      ShowNotification("Failed to join: " + ErrorMessage)

Dedicated Server Handling

For dedicated servers, UCIK automatically:

  1. Detects if the session is a dedicated server
  2. Extracts the correct port from session settings
  3. Formats the connect string appropriately

The PortInfo custom attribute is used if present, allowing dedicated servers to specify their game port separately from the matchmaking port.

Platform-Specific Behavior

EOS Sessions (All Platforms)

Join flows through EOS, works cross-platform. A Steam player can join an Epic-hosted game.

Steam Shadow Lobbies

When joining a session found via Steam lobby search:

  1. UCIK extracts EosJoinAddr from Steam lobby data
  2. Joins the EOS session using that address
  3. Player enters the cross-platform game

The shadow lobby is just for discovery - actual gameplay is through EOS.

Usage Patterns

Server Browser Flow

// In your server browser widget:

Find Crossplay Sessions
  |
  v
Display results in ListView
  |
  v
On Double-Click:
  JoinCrossplaySession(SelectedSession, bAutoTravel=true)
    |
    v
  On Success: Player loads into game
  On Failure: Show error message

Quick Join Friend

// From friends list:

Get Friends
  |
  v
Find friend with bInSession = true
  |
  v
Find Crossplay Sessions (bOnlyFriendsOnPlatform)
  |
  v
JoinCrossplaySession(FriendsSession)

Join via Invite

// When receiving game invite:

On Invite Accepted (SessionInfo):
  JoinCrossplaySession(SessionInfo, bAutoTravel=true)

Before Joining

Leave Existing Session

If the player is already in a session, leave it first:

// Check if already in session
If CurrentSessionId is valid:
  LeaveCrossplaySession
    On Complete:
      JoinCrossplaySession(NewSession)

Session Validation

The node validates that SessionInfo contains a native search result. Sessions must come from Find Crossplay Sessions - you cannot construct them manually.

Connect String Format

The connect string format depends on the session type:

TypeFormatExample
Listen ServerIP:Port192.168.1.100:7777
Dedicated ServerIP:GamePort203.0.113.50:7777
EOS P2PEOS Address(handled internally)

You don't need to parse this - just pass it to ClientTravel or let auto-travel handle it.

Backend Support

UCIK uses the same backend as Find Sessions:

  • OSSv2: Uses Online Services (UE 5.7+)
  • OSSv1: Uses Online Subsystem (all UE versions)

The join behavior is identical regardless of backend.

Troubleshooting

"Invalid session" Error

The SessionInfo doesn't have valid search data. Ensure:

  • SessionInfo came from Find Crossplay Sessions
  • You haven't modified the struct
  • The search completed successfully

Connect String is Empty

The server may not be listening yet. Check:

  • Host called SetSessionReady(true) or has bAutoDetectSessionReady enabled
  • Host completed server travel
  • Session hasn't ended

Stuck on Loading

If travel starts but never completes:

  • Check firewall allows the game port
  • Verify server is reachable (ping test)
  • Check server logs for connection issues

Next: Find Sessions | Lobbies | Sessions

On this page