NetDriverDefinitions
NetDriverDefinitions
#Overview
name: NetDriverDefinitions
The value of this variable can be defined or overridden in .ini config files. 22
.ini config files referencing this setting variable.
It is referenced in 8
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of NetDriverDefinitions is to provide a list of named UNetDriver definitions for the Unreal Engine’s networking system. This variable is crucial for managing different types of network drivers used in the game engine.
NetDriverDefinitions is primarily used by the Engine subsystem, specifically within the networking components. It’s also utilized by plugins such as NetcodeUnitTest and nDisplay, indicating its importance in both core engine functionality and extended features.
The value of this variable is typically set in the engine configuration files. It can be modified programmatically, as seen in the DisplayClusterEditorSettings class where new definitions are added or removed based on cluster replication settings.
This variable interacts closely with other networking-related variables and classes, such as UNetDriver, FNetDriverDefinition, and IpNetDriver. It’s used to define and locate specific network driver configurations.
Developers must be aware that:
- Modifying NetDriverDefinitions can have significant impacts on the game’s networking behavior.
- Each entry in NetDriverDefinitions represents a specific network driver configuration, including fallback options.
- The variable is used in creating and initializing network drivers, so changes here can affect how the game connects and communicates over the network.
Best practices when using this variable include:
- Carefully consider the implications before adding or modifying entries.
- Ensure that any custom network drivers added to the definitions are properly implemented and compatible with the engine’s networking system.
- Use the appropriate methods to modify the definitions, such as through engine configuration files or editor settings, rather than directly manipulating the array in code.
- When creating custom network drivers, follow the naming conventions and structure seen in existing definitions.
- Be mindful of performance implications when adding multiple network driver definitions, as the engine iterates through this list when creating network drivers.
#Setting Variables
#References In INI files
<Workspace>/Engine/Config/BaseEngine.ini:306, section: [/Script/Engine.Engine]
<Workspace>/Engine/Config/BaseEngine.ini:307, section: [/Script/Engine.Engine]
<Workspace>/Engine/Plugins/Experimental/WebSocketNetworking/Config/BaseWebSocketNetDriver.ini:2, section: [/Script/Engine.GameEngine]
<Workspace>/Engine/Plugins/Experimental/WebSocketNetworking/Config/BaseWebSocketNetDriver.ini:3, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/EOS/DefaultEngine.ini:54, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/EOS/DefaultEngine.ini:55, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/EOS/DefaultEngine.ini:56, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/EOS/DefaultEngine.ini:59, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/EOS/DefaultEngine.ini:60, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/EOS/DefaultEngine.ini:61, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/Steam/DefaultEngine.ini:16, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/Steam/DefaultEngine.ini:17, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/Steam/DefaultEngine.ini:18, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/Steam/DefaultEngine.ini:21, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/Steam/DefaultEngine.ini:22, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/Steam/DefaultEngine.ini:23, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/SteamEOS/DefaultEngine.ini:59, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/SteamEOS/DefaultEngine.ini:60, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/SteamEOS/DefaultEngine.ini:61, section: [/Script/Engine.Engine]
<Workspace>/Projects/Lyra/Config/Custom/SteamEOS/DefaultEngine.ini:64, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/SteamEOS/DefaultEngine.ini:65, section: [/Script/Engine.GameEngine]
<Workspace>/Projects/Lyra/Config/Custom/SteamEOS/DefaultEngine.ini:66, section: [/Script/Engine.GameEngine]
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/NetcodeUnitTest/NetcodeUnitTest/Source/NetcodeUnitTest/Private/MinimalClient.cpp:757
Scope (from outer to inner):
file
function void UMinimalClient::CreateNetDriver
Source code excerpt:
FName UnitDefName = *(FString(TEXT("UnitTestNetDriver_")) + DriverClassName.Mid(ClassLoc+1));
for (int32 i=0; i<GameEngine->NetDriverDefinitions.Num(); i++)
{
if (GameEngine->NetDriverDefinitions[i].DefName == UnitDefName)
{
bFoundDef = true;
break;
}
}
#Loc: <Workspace>/Engine/Plugins/NetcodeUnitTest/NetcodeUnitTest/Source/NetcodeUnitTest/Private/MinimalClient.cpp:777
Scope (from outer to inner):
file
function void UMinimalClient::CreateNetDriver
Source code excerpt:
NewDriverEntry.DriverClassNameFallback = NewDriverEntry.DriverClassName;
GameEngine->NetDriverDefinitions.Add(NewDriverEntry);
}
FName NewDriverName = *FString::Printf(TEXT("UnitTestNetDriver_%i"), UnitTestNetDriverCount++);
// Now create a reference to the driver
#Loc: <Workspace>/Engine/Plugins/Runtime/nDisplay/Source/DisplayClusterEditor/Private/Settings/DisplayClusterEditorSettings.cpp:93
Scope (from outer to inner):
file
function void UDisplayClusterEditorSettings::PostEditChangeProperty
Source code excerpt:
if (bClusterReplicationEnabled)
{
FJsonSerializableArray NetDriverDefinitions;
NetDriverDefinitions.Add(TEXT("(DefName=GameNetDriver,DriverClassName=/Script/DisplayClusterReplication.DisplayClusterNetDriver,DriverClassNameFallback=/Script/OnlineSubsystemUtils.IpNetDriver)"));
NetDriverDefinitions.Add(TEXT("(DefName=DemoNetDriver,DriverClassName=/Script/Engine.DemoNetDriver,DriverClassNameFallback=/Script/Engine.DemoNetDriver)"));
GConfig->SetArray(TEXT("/Script/Engine.GameEngine"), TEXT("+NetDriverDefinitions"), NetDriverDefinitions, DefaultEnginePath);
GConfig->SetString(TEXT("/Script/DisplayClusterReplication.DisplayClusterNetDriver"), TEXT("NetConnectionClassName"), TEXT("DisplayClusterReplication.DisplayClusterNetConnection"), DefaultEnginePath);
}
else
{
GConfig->RemoveKey(TEXT("/Script/Engine.GameEngine"), TEXT("!NetDriverDefinitions"), DefaultEnginePath);
GConfig->RemoveKey(TEXT("/Script/Engine.GameEngine"), TEXT("+NetDriverDefinitions"), DefaultEnginePath);
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Engine/Engine.h:3094
Scope (from outer to inner):
file
class class UEngine : public UObject , public FExec
Source code excerpt:
/** A list of named UNetDriver definitions */
UPROPERTY(Config, transient)
TArray<FNetDriverDefinition> NetDriverDefinitions;
/** A list of Iris NetDriverConfigs */
UPROPERTY(Config, transient)
TArray<FIrisNetDriverConfig> IrisNetDriverConfigs;
/** A configurable list of actors that are automatically spawned upon server startup (just prior to InitGame) */
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/NetDriver.cpp:446
Scope (from outer to inner):
file
namespace UE::Net
Source code excerpt:
if (GEngine != nullptr)
{
for (const FNetDriverDefinition& CurDef : GEngine->NetDriverDefinitions)
{
if (CurDef.DefName != NAME_DemoNetDriver)
{
GRequiredEncryptionNetDriverDefNames.Add(CurDef.DefName);
}
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/NetDriver.cpp:6063
Scope (from outer to inner):
file
function void UNetDriver::SetNetDriverDefinition
Source code excerpt:
NetDriverDefinition = NewNetDriverDefinition;
if (const FNetDriverDefinition* DriverDef = GEngine->NetDriverDefinitions.FindByPredicate([this](const FNetDriverDefinition& Def) { return (Def.DefName == NetDriverDefinition); }))
{
MaxChannelsOverride = DriverDef->MaxChannelsOverride;
}
InitPacketSimulationSettings();
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp:13877
Scope (from outer to inner):
file
namespace UE::Private
function UNetDriver* CreateNetDriver_Local
Source code excerpt:
OverrideFallback = CurEntryParms[2];
}
else if (FNetDriverDefinition* FallbackDef = Engine->NetDriverDefinitions.FindByPredicate(FindTargetDefPred))
{
OverrideFallback = FallbackDef->DriverClassNameFallback.ToString();
}
else
{
OverrideFallback = TEXT("/Script/OnlineSubsystemUtils.IpNetDriver");
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp:13919
Scope (from outer to inner):
file
namespace UE::Private
function UNetDriver* CreateNetDriver_Local
Source code excerpt:
#endif
{
Definition = Engine->NetDriverDefinitions.FindByPredicate(FindNetDriverDefPred);
}
if (Definition != nullptr)
{
UClass* NetDriverClass = StaticLoadClass(UNetDriver::StaticClass(), nullptr, *Definition->DriverClassName.ToString(), nullptr,
LOAD_Quiet);