EOS: Testing Multiplayer

Requirements

  • Unreal Engine 4.25+
  • EOSCore:: 1.8.0+
  • Separate Epic Accounts
    Depending on how many game instances you want to test simultaneously, you must have a unique Epic account for each instance
  • Configured OnlineSubsystem

The best way when testing multiplayer is to use the DevTool that is provided by the EOS SDK.
You can obtain the DevTool from the EOS Developer Portal, “Download SDK

After obtaining your copy of the DevTool, launch the application and create your token.
Remember that for each instance you must use a separate Epic Account, using the same Epic account for multiple instances will not work!

DevTool Credentials

Testing

You can play test using either Standalone or launching from Command line

Authenticating with the DevTool

Logged In

Find and join your session

EOS: Logging In / Authentication

EOSCore version 1.8.0 now has a Login function that is meant to simplify the login process.

Logging in via Device ID

AuthType: Password
CredentialsType: DeviceId Access Token

LoginId is your DisplayName
Token is unused
Data is unused

Logging in via Epic Portal

AuthType: AccountPortal
CredentialsType: Epic

LoginId is unused
Token is unused
Data is unused

Loggin in with Persistent Auth (saved credentials)

AuthType: PersistentAuth
CredentialsType: Epic

LoginId is unused
Token is unused
Data is unused

Logging in via DevTool

AuthType: Developer
CredentialsType: Epic

LoginId is the address, example: localhost:1111
Token is the token you specified in the developer tool, example: hulken
Data is unused

Logging in via Async Nodes

If you are logging in “manually” by using the EOS Async Blueprint Nodes, you have to update the UniqueNetId manually. You can do it by adding this event to your PlayerController

EOS Android Multiplayer

Requirements

  • Unreal Engine 4.25+
  • EOSCore:: 1.8.0+

To enable Multiplayer when using an Android Phone, you must edit your AndroidEngine.ini configuration file, this is the android equivilent to DefaultEngine.ini, just copy-paste your settings from the DefaultEngine.ini to your AndroidEngine.ini, see the example below.

This example will allow you to connect using the EOS NAT P2P Interface and enable cross-platform multiplayer.

Project\Config\Android\AndroidEngine.ini

[OnlineSubsystem]
DefaultPlatformService=EOS

[/Script/OnlineSubsystemEOS.NetDriverEOS]
NetConnectionClassName=OnlineSubsystemEOS.NetConnectionEOS
bIsUsingP2PSockets=true

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemEOS.NetDriverEOS",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

EOS Dedicated Server

Requirements

  • EOSCore:: v1.8.0+
  • Unreal Engine 4.25+
  • A working Unreal Engine Dedicated Server

DefaultEngine.ini

Since Dedicated Servers don’t need to use Relay Servers, we have to disable the EOS NetDriver, simply removing the declarations here will disable using the EOS NetDriver.

[Core.Log]
Online=Verbose
OnlineSession=Verbose
OnlineGame=Verbose
LogEOSCoreSubsystem=Verbose
LogEOSCore=Verbose

[OnlineSubsystem]
DefaultPlatformService=EOS

Launching Dedicated Server

We’ll use Commandline arguments to authenticate and launch our server, the example below will authenticate our server using a local DeviceID, this is the minimum authentication required to communicate with Epic Online Services. The –EOSConfig= is optional, for example if you’re using a different configuration for your Server.

D:\WindowsServer\EOS_DedicatedServer.exe -server -log -AUTH_TYPE=deviceid -AUTH_LOGIN=test -AUTH_TOKEN=test -EOSConfig=ServerConfig

Listing our Server

You can use the default Session nodes to list a Dedicated Server. We’ll use the GameInstance in this example.

This will List your dedicated server as a joinable session.

EOSCore 1.8.0

General

This update is only available for UE4.25+

REMOVE ALL PREVIOUS EOSCORE DEFINITIONS FROM YOUR DefaultEngine.ini FILE WHEN UPGRADING!

  • Updated EOS SDK to version 1.9.0
  • Added “FromUnixTimestamp” function to convert a Unix timestamp to a blueprint string
  • Added UserIndex to GetCurrentProductId
  • Added UserIndex to GetCurrentAccountId
  • All blueprint nodes now require a WorldContextObject
  • All blueprint defined delegates have been removed, use the appropriate “Add Notify” callback functions instead or setup your own delegates when invoking functions
  • Removed ProductName from DefaultEngine.ini (will now use your UE4 Project Name)
  • Removed ProductVersion from DefaultEngine.ini (will now use UE4 Project Version)
  • New supported command line arguments:
    -AUTH_TYPE=devtool
    Login using the DevTool
    -AUTH_TYPE=autologin
    Attempt to autologin using saved credentials from previous session
    -AUTH_TYPE=portal
    Authenticate using the Browser (portal)
    -AUTH_TYPE=deviceid
    Authenticate using a local device id, will attempt to create a device id if not found
    -EOSConfig=configurationName
    Override the EOS configuration specified in the Project Settings
  • You must now configure EOSCore using Project Settings
  • New Function: Login()
    This function is meant to be used in conjunction with the new EOSCore OnlineSubsystem (OSS) and its purpose is to simplify the Login procedure used by EOS.
    More details about this function will be available later
  • Removed CreateSessionResultFromInviteId as this function is no longer needed, it’s been replaced with “ListenForSessionInvites“, see example below.
  • Added EOS_Initialized() function that you can call to see if EOS has initialized or not
FromUnixTimestamp
New Settings
New Login Node
Check if EOS has initialized

Chat

  • General Chat Subsystem optimizations
  • Listening for Chat messages now requires a valid LocalUserId
  • You can now clear all chat listeners by invoking ClearAllChatListeners

OnlineSubsystem (OSS)

  • The OSS has been rewritten to a SocketSubsystem.
  • Removed EOSPlatformModule, all code has been moved to the OnlineSubsystemEOSCore
  • Changed URL layout when connecting to multiplayer games:
    Old: eoscore.remote_id
    New: eos:remote_id:gamesession:port
  • New function: “UpdateUniqueNetIdFromOSS“, this function will manually update your players netid from the OSS. This is useful if you want to manually login using the Async Nodes. You must have a valid UniqueNetId assigned to your player if you want to use the default CreateSession nodes for example.

Android

  • You can now Host / Join sessions using Android

Mods

  • Added Mods Interface Support

EOS SDK 1.9.0 Changelog

New features

  • Mods support exposes interfaces that allow for interaction with the Epic Games Store Mod Marketplace and supports:
    • Enumeration of installed mods.
    • Enumeration of available mods.
    • Mod install, uninstall, and update.

Release Notes

C# SDK

  • Removed reflection dependency from the wrapper.
  • SDK functions and delegates that output strings and byte arrays through parameters have been simplified. If they previously output a StringBuilder, they now output a string, and they no longer require a buffer length to be passed in. See upgrade notes for more details.
  • Bug Fix: The sizeInBytes and alignment parameters of Platform.AllocateMemoryFunc and Platform.ReallocateMemoryFunc are now defined as UIntPtr instead of int to reflect the different size requirements between 32 bit and 64 bit platforms. See upgrade notes for more details.

Connect

  • Bug Fix: Fixed EOS_Connect_QueryProductUserIdMappings returning EOS_UnexpectedError if the queried users had a linked Device ID.

EOS Core

  • Bug Fix: Fixed json serialization and deserialization of doubles when games use the CRT setlocale() function.
  • Bug Fix:
    • Set the default thread affinity of EOS SDK created threads to something more reasonable.
    • EOS_Initialize_Options now contains an OverrrideThreadAffinity option. This EOS_Initialize_ThreadAffinity structure defines thread affinity in several categories It’s important to note that these values will be platform dependent.

Lobbies

  • New: Lobby search now supports a new EOS_CO_CONTAINS operator. Attributes matching a CASE SENSITIVE partial string will be returned.

Mod Marketplace

  • Mods support allows interfaces with the Epic Games Store Mod Marketplace and allows:
    • Enumeration of installed mods.
    • Enumeration of available mods.
    • Mod install, uninstall, and update.

Overlay Tech Platform

  • New: Added new flags for EOS_Platform_Create to opt-in to experimental overlay support on DirectX 9, Direct3D 10, and OpenGL for Windows:
    • EOS_PF_WINDOWS_ENABLE_OVERLAY_D3D9
    • EOS_PF_WINDOWS_ENABLE_OVERLAY_D3D10
    • EOS_PF_WINDOWS_ENABLE_OVERLAY_OPENGL

Samples

  • Added a new sample to demonstrate the mod marketplace
  • Added support for reading / writing settings
    • Developer Authentication Tool credentials will be saved to settings, ready to be loaded with the next sample run.
  • Added support for automatic login via Launcher command line options.
  • Persistent auth token is now deleted after getting invalid auth result when attempting to log in with persistent auth login.
  • Added a popup dialog with a message about invalid params for EOS_Platform_Create.
  • Pressing enter while Auth Dialog text fields are in focus will start login when all relevant text fields are valid.
  • Bug Fix: Fixed a resource leak inside the sample framework

Session Based Matchmaking

  • New: Session search now supports a new EOS_CO_CONTAINS operator. Attributes matching a CASE SENSITIVE partial string will be returned.

Social Overlay

  • Removed erroneous logs when Leaderboards are not currently configured.