diff --git a/NetworkDiscovery.cs b/NetworkDiscovery.cs index 6a8e00c..a9c335b 100644 --- a/NetworkDiscovery.cs +++ b/NetworkDiscovery.cs @@ -6,6 +6,7 @@ using System.Net.NetworkInformation; using UnityEngine.Profiling; using UnityEngine.SceneManagement; +using System.Globalization; namespace NetworkDiscoveryUnity { @@ -27,14 +28,22 @@ public DiscoveryInfo (IPEndPoint endPoint, Dictionary keyValuePa m_timeWhenReceived = Time.realtimeSinceStartup; } - public ushort GetGameServerPort() => ushort.Parse(this.KeyValuePairs[kPortKey]); - } + public ushort GetGameServerPort() => ushort.Parse(this.KeyValuePairs[kPortKey], CultureInfo.InvariantCulture); + + public bool TryGetGameServerPort(out ushort port) + { + port = 0; + return this.KeyValuePairs.TryGetValue(kPortKey, out string portString) + && ushort.TryParse(portString, NumberStyles.None, CultureInfo.InvariantCulture, out port); + } + } public UnityEngine.Events.UnityEvent onReceivedServerResponse = new UnityEngine.Events.UnityEvent(); // server sends this data as a response to broadcast - readonly Dictionary m_responseData = new Dictionary (); + readonly Dictionary m_responseData = + new Dictionary (System.StringComparer.InvariantCulture); public static NetworkDiscovery Instance { get ; private set ; } @@ -60,7 +69,7 @@ void Awake () Instance = this; RegisterResponseData(kSignatureKey, GetCachedSignature()); - RegisterResponseData(kPortKey, this.gameServerPortNumber.ToString()); + RegisterResponseData(kPortKey, this.gameServerPortNumber.ToString(CultureInfo.InvariantCulture)); RegisterResponseData(kMapNameKey, SceneManager.GetActiveScene().name); } @@ -208,7 +217,7 @@ void UpdateClient() public static byte[] GetDiscoveryRequestData() { Profiler.BeginSample("ConvertDictionaryToByteArray"); - var dict = new Dictionary() {{kSignatureKey, GetCachedSignature()}}; + var dict = new Dictionary(System.StringComparer.InvariantCulture) {{kSignatureKey, GetCachedSignature()}}; byte[] buffer = ConvertDictionaryToByteArray (dict); Profiler.EndSample(); @@ -458,7 +467,7 @@ public static string ConvertDictionaryToString( Dictionary dict public static Dictionary ConvertStringToDictionary( string str ) { - var dict = new Dictionary(); + var dict = new Dictionary(System.StringComparer.InvariantCulture); string[] lines = str.Split("\n".ToCharArray(), System.StringSplitOptions.RemoveEmptyEntries); foreach(string line in lines) {