Skip to content

Commit e094911

Browse files
feat: Added command line option support for overriding the port (#2708)
* Added command line option support for overriding the port * Formatting fixes * Updated port command line argument to use DedicatedServer.Arguments when available --------- Co-authored-by: Noel Stephens <[email protected]>
1 parent b309cc3 commit e094911

File tree

4 files changed

+84
-2
lines changed

4 files changed

+84
-2
lines changed

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,19 @@ public NetworkPrefabHandler PrefabHandler
412412
internal NetworkConnectionManager ConnectionManager = new NetworkConnectionManager();
413413
internal NetworkMessageManager MessageManager = null;
414414

415+
internal struct Override<T>
416+
{
417+
private T m_Value;
418+
public bool Overidden { get; private set; }
419+
internal T Value
420+
{
421+
get { return Overidden ? m_Value : default(T); }
422+
set { Overidden = true; m_Value = value; }
423+
}
424+
};
425+
426+
internal Override<ushort> PortOverride;
427+
415428
#if UNITY_EDITOR
416429
internal static INetworkManagerHelper NetworkManagerHelper;
417430

@@ -658,6 +671,8 @@ internal void Initialize(bool server)
658671
return;
659672
}
660673

674+
ParseCommandLineOptions();
675+
661676
if (NetworkConfig.NetworkTransport == null)
662677
{
663678
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
@@ -1100,5 +1115,39 @@ private void OnDestroy()
11001115
Singleton = null;
11011116
}
11021117
}
1118+
1119+
// Command line options
1120+
private const string k_OverridePortArg = "-port";
1121+
1122+
private string GetArg(string[] commandLineArgs, string arg)
1123+
{
1124+
var argIndex = Array.IndexOf(commandLineArgs, arg);
1125+
if (argIndex >= 0 && argIndex < commandLineArgs.Length - 1)
1126+
{
1127+
return commandLineArgs[argIndex + 1];
1128+
}
1129+
1130+
return null;
1131+
}
1132+
1133+
private void ParseArg<T>(string arg, ref Override<T> value)
1134+
{
1135+
if (GetArg(Environment.GetCommandLineArgs(), arg) is string argValue)
1136+
{
1137+
value.Value = (T)Convert.ChangeType(argValue, typeof(T));
1138+
}
1139+
}
1140+
1141+
private void ParseCommandLineOptions()
1142+
{
1143+
#if UNITY_SERVER && UNITY_DEDICATED_SERVER_ARGUMENTS_PRESENT
1144+
if ( UnityEngine.DedicatedServer.Arguments.Port != null)
1145+
{
1146+
PortOverride.Value = (ushort)UnityEngine.DedicatedServer.Arguments.Port;
1147+
}
1148+
#else
1149+
ParseArg(k_OverridePortArg, ref PortOverride);
1150+
#endif
1151+
}
11031152
}
11041153
}

com.unity.netcode.gameobjects/Runtime/Transports/UNET/UNetTransport.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,15 +199,15 @@ public override NetworkEvent PollEvent(out ulong clientId, out ArraySegment<byte
199199
public override bool StartClient()
200200
{
201201
m_ServerHostId = UnityEngine.Networking.NetworkTransport.AddHost(new HostTopology(GetConfig(), 1), 0, null);
202-
m_ServerConnectionId = UnityEngine.Networking.NetworkTransport.Connect(m_ServerHostId, ConnectAddress, ConnectPort, 0, out byte error);
202+
m_ServerConnectionId = UnityEngine.Networking.NetworkTransport.Connect(m_ServerHostId, ConnectAddress, GetConnectPort(), 0, out byte error);
203203
return (NetworkError)error == NetworkError.Ok;
204204
}
205205

206206
public override bool StartServer()
207207
{
208208
var topology = new HostTopology(GetConfig(), MaxConnections);
209209
// Undocumented, but AddHost returns -1 in case of any type of failure. See UNET::NetLibraryManager::AddHost
210-
return -1 != UnityEngine.Networking.NetworkTransport.AddHost(topology, ServerListenPort, null);
210+
return -1 != UnityEngine.Networking.NetworkTransport.AddHost(topology, GetServerListenPort(), null);
211211
}
212212

213213
public override void DisconnectRemoteClient(ulong clientId)
@@ -281,6 +281,26 @@ private ConnectionConfig GetConfig()
281281

282282
return connectionConfig;
283283
}
284+
285+
public int GetConnectPort()
286+
{
287+
if (NetworkManager && NetworkManager.PortOverride.Overidden)
288+
{
289+
return NetworkManager.PortOverride.Value;
290+
}
291+
292+
return ConnectPort;
293+
}
294+
295+
public int GetServerListenPort()
296+
{
297+
if (NetworkManager && NetworkManager.PortOverride.Overidden)
298+
{
299+
return NetworkManager.PortOverride.Value;
300+
}
301+
302+
return ServerListenPort;
303+
}
284304
}
285305
}
286306
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member

com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ public struct SimulatorParameters
402402
/// - packet jitter (variances in latency, see: https://en.wikipedia.org/wiki/Jitter)
403403
/// - packet drop rate (packet loss)
404404
/// </summary>
405+
405406
#if UTP_TRANSPORT_2_0_ABOVE
406407
[Obsolete("DebugSimulator is no longer supported and has no effect. Use Network Simulator from the Multiplayer Tools package.", false)]
407408
#endif
@@ -685,9 +686,11 @@ public void SetConnectionData(NetworkEndpoint endPoint, NetworkEndpoint listenEn
685686
/// <param name="packetDelay">Packet delay in milliseconds.</param>
686687
/// <param name="packetJitter">Packet jitter in milliseconds.</param>
687688
/// <param name="dropRate">Packet drop percentage.</param>
689+
688690
#if UTP_TRANSPORT_2_0_ABOVE
689691
[Obsolete("SetDebugSimulatorParameters is no longer supported and has no effect. Use Network Simulator from the Multiplayer Tools package.", false)]
690692
#endif
693+
691694
public void SetDebugSimulatorParameters(int packetDelay, int packetJitter, int dropRate)
692695
{
693696
if (m_Driver.IsCreated)
@@ -1209,6 +1212,11 @@ public override void Initialize(NetworkManager networkManager = null)
12091212

12101213
NetworkManager = networkManager;
12111214

1215+
if (NetworkManager && NetworkManager.PortOverride.Overidden)
1216+
{
1217+
ConnectionData.Port = NetworkManager.PortOverride.Value;
1218+
}
1219+
12121220
m_RealTimeProvider = NetworkManager ? NetworkManager.RealTimeProvider : new RealTimeProvider();
12131221

12141222
m_NetworkSettings = new NetworkSettings(Allocator.Persistent);

com.unity.netcode.gameobjects/Runtime/com.unity.netcode.runtime.asmdef

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
"name": "com.unity.transport",
4242
"expression": "2.1.0",
4343
"define": "UTP_TRANSPORT_2_1_ABOVE"
44+
},
45+
{
46+
"name": "Unity",
47+
"expression": "2023",
48+
"define": "UNITY_DEDICATED_SERVER_ARGUMENTS_PRESENT"
4449
}
4550
]
4651
}

0 commit comments

Comments
 (0)