Merge pull request #20 from sableangle/main

Migration from Json.Net to Unity's JsonUtility
This commit is contained in:
Cooper H 2021-05-05 21:22:13 -04:00 committed by GitHub
commit f4d3f487c5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 8 deletions

View file

@ -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<T>(string json)
{
if (!IsJsonArray(json))
{
throw new System.FormatException("The input json string is not a Json Array");
}
json = "{\"Items\":" + json + "}";
JsonWrapper<T> wrapper = JsonUtility.FromJson<JsonWrapper<T>>(json);
return wrapper.Items;
}
public static string ToJson<T>(T[] array)
{
JsonWrapper<T> wrapper = new JsonWrapper<T>();
wrapper.Items = array;
return JsonUtility.ToJson(wrapper);
}
public static string ToJson<T>(T[] array, bool prettyPrint)
{
JsonWrapper<T> wrapper = new JsonWrapper<T>();
wrapper.Items = array;
return JsonUtility.ToJson(wrapper, prettyPrint);
}
[Serializable]
private class JsonWrapper<T>
{
public T[] Items;
}
}
} }

View file

@ -1,7 +1,7 @@
using Mirror; using Mirror;
using Newtonsoft.Json;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.Networking; using UnityEngine.Networking;
@ -41,9 +41,8 @@ namespace LightReflectiveMirror
case UnityWebRequest.Result.ProtocolError: case UnityWebRequest.Result.ProtocolError:
Debug.LogWarning("LRM | Network Error while getting a relay to join from Load Balancer."); Debug.LogWarning("LRM | Network Error while getting a relay to join from Load Balancer.");
break; break;
case UnityWebRequest.Result.Success: case UnityWebRequest.Result.Success:
var parsedAddress = JsonConvert.DeserializeObject<RelayAddress>(result); var parsedAddress = JsonUtility.FromJson<RelayAddress>(result.Decompress());
Connect(parsedAddress.Address, parsedAddress.Port); Connect(parsedAddress.Address, parsedAddress.Port);
endpointServerPort = parsedAddress.EndpointPort; endpointServerPort = parsedAddress.EndpointPort;
break; break;
@ -56,7 +55,7 @@ namespace LightReflectiveMirror
else else
{ {
// join here // join here
var parsedAddress = JsonConvert.DeserializeObject<RelayAddress>(result); var parsedAddress = JsonUtility.FromJson<RelayAddress>(result.Decompress());
Connect(parsedAddress.Address, parsedAddress.Port); Connect(parsedAddress.Address, parsedAddress.Port);
endpointServerPort = parsedAddress.EndpointPort; endpointServerPort = parsedAddress.EndpointPort;
} }
@ -148,7 +147,7 @@ namespace LightReflectiveMirror
case UnityWebRequest.Result.Success: case UnityWebRequest.Result.Success:
relayServerList?.Clear(); relayServerList?.Clear();
relayServerList = JsonConvert.DeserializeObject<List<Room>>(result.Decompress()); relayServerList = JsonUtilityHelper.FromJson<Room>(result.Decompress()).ToList();
serverListUpdated?.Invoke(); serverListUpdated?.Invoke();
break; break;
} }
@ -160,7 +159,7 @@ namespace LightReflectiveMirror
else else
{ {
relayServerList?.Clear(); relayServerList?.Clear();
relayServerList = JsonConvert.DeserializeObject<List<Room>>(result.Decompress()); relayServerList = JsonUtilityHelper.FromJson<Room>(result.Decompress()).ToList();
serverListUpdated?.Invoke(); serverListUpdated?.Invoke();
} }
#endif #endif
@ -201,7 +200,7 @@ namespace LightReflectiveMirror
case UnityWebRequest.Result.Success: case UnityWebRequest.Result.Success:
relayServerList?.Clear(); relayServerList?.Clear();
relayServerList = JsonConvert.DeserializeObject<List<Room>>(result); relayServerList = JsonUtilityHelper.FromJson<Room>(result.Decompress()).ToList();
serverListUpdated?.Invoke(); serverListUpdated?.Invoke();
_serverListUpdated = true; _serverListUpdated = true;
break; break;
@ -214,7 +213,7 @@ namespace LightReflectiveMirror
else else
{ {
relayServerList?.Clear(); relayServerList?.Clear();
relayServerList = JsonConvert.DeserializeObject<List<Room>>(result); relayServerList = JsonUtilityHelper.FromJson<Room>(result.Decompress()).ToList();
serverListUpdated?.Invoke(); serverListUpdated?.Invoke();
_serverListUpdated = true; _serverListUpdated = true;
} }