diff --git a/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTools.cs b/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTools.cs index 76c759b..321a42a 100644 --- a/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTools.cs +++ b/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTools.cs @@ -156,4 +156,43 @@ namespace LightReflectiveMirror } } } + + internal static class JsonUtilityHelper + { + public static bool IsJsonArray(string json) + { + return json.StartsWith("[") && json.EndsWith("]"); + } + + public static T[] FromJson(string json) + { + if (!IsJsonArray(json)) + { + throw new System.FormatException("The input json string is not a Json Array"); + } + json = "{\"Items\":" + json + "}"; + JsonWrapper wrapper = JsonUtility.FromJson>(json); + return wrapper.Items; + } + + public static string ToJson(T[] array) + { + JsonWrapper wrapper = new JsonWrapper(); + wrapper.Items = array; + return JsonUtility.ToJson(wrapper); + } + + public static string ToJson(T[] array, bool prettyPrint) + { + JsonWrapper wrapper = new JsonWrapper(); + wrapper.Items = array; + return JsonUtility.ToJson(wrapper, prettyPrint); + } + + [Serializable] + private class JsonWrapper + { + public T[] Items; + } + } } \ No newline at end of file diff --git a/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTransport/LRMTransportRequests.cs b/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTransport/LRMTransportRequests.cs index 2203529..96c8130 100644 --- a/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTransport/LRMTransportRequests.cs +++ b/UnityProject/Assets/Mirror/Runtime/Transport/LRM/LRMTransport/LRMTransportRequests.cs @@ -1,7 +1,7 @@ using Mirror; -using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; using UnityEngine.Networking; @@ -41,9 +41,8 @@ namespace LightReflectiveMirror case UnityWebRequest.Result.ProtocolError: Debug.LogWarning("LRM | Network Error while getting a relay to join from Load Balancer."); break; - case UnityWebRequest.Result.Success: - var parsedAddress = JsonConvert.DeserializeObject(result); + var parsedAddress = JsonUtility.FromJson(result.Decompress()); Connect(parsedAddress.Address, parsedAddress.Port); endpointServerPort = parsedAddress.EndpointPort; break; @@ -56,7 +55,7 @@ namespace LightReflectiveMirror else { // join here - var parsedAddress = JsonConvert.DeserializeObject(result); + var parsedAddress = JsonUtility.FromJson(result.Decompress()); Connect(parsedAddress.Address, parsedAddress.Port); endpointServerPort = parsedAddress.EndpointPort; } @@ -148,7 +147,7 @@ namespace LightReflectiveMirror case UnityWebRequest.Result.Success: relayServerList?.Clear(); - relayServerList = JsonConvert.DeserializeObject>(result.Decompress()); + relayServerList = JsonUtilityHelper.FromJson(result.Decompress()).ToList(); serverListUpdated?.Invoke(); break; } @@ -160,7 +159,7 @@ namespace LightReflectiveMirror else { relayServerList?.Clear(); - relayServerList = JsonConvert.DeserializeObject>(result.Decompress()); + relayServerList = JsonUtilityHelper.FromJson(result.Decompress()).ToList(); serverListUpdated?.Invoke(); } #endif @@ -201,7 +200,7 @@ namespace LightReflectiveMirror case UnityWebRequest.Result.Success: relayServerList?.Clear(); - relayServerList = JsonConvert.DeserializeObject>(result); + relayServerList = JsonUtilityHelper.FromJson(result.Decompress()).ToList(); serverListUpdated?.Invoke(); _serverListUpdated = true; break; @@ -214,7 +213,7 @@ namespace LightReflectiveMirror else { relayServerList?.Clear(); - relayServerList = JsonConvert.DeserializeObject>(result); + relayServerList = JsonUtilityHelper.FromJson(result.Decompress()).ToList(); serverListUpdated?.Invoke(); _serverListUpdated = true; }