public void RequestServerList(LRMRegions searchRegion = LRMRegions.Any) { if (_isAuthenticated && _connectedToRelay) { StartCoroutine(GetServerList(searchRegion)); } else { Debug.Log("You must be connected to Relay to request server list!"); } }
IEnumerator GetServerList(LRMRegions region) { if (!useLoadBalancer) { string uri = $"http://{serverIP}:{endpointServerPort}/api/compressed/servers"; using (UnityWebRequest webRequest = UnityWebRequest.Get(uri)) { webRequest.SetRequestHeader("Access-Control-Allow-Credentials", "true"); webRequest.SetRequestHeader("Access-Control-Allow-Headers", "Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time"); webRequest.SetRequestHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); webRequest.SetRequestHeader("Access-Control-Allow-Origin", "*"); // Request and wait for the desired page. yield return(webRequest.SendWebRequest()); var result = webRequest.downloadHandler.text; #if UNITY_2020_1_OR_NEWER switch (webRequest.result) { case UnityWebRequest.Result.ConnectionError: case UnityWebRequest.Result.DataProcessingError: case UnityWebRequest.Result.ProtocolError: Debug.LogWarning("LRM | Network Error while retreiving the server list!"); break; case UnityWebRequest.Result.Success: relayServerList?.Clear(); relayServerList = JsonUtilityHelper.FromJson <Room>(result.Decompress()).ToList(); serverListUpdated?.Invoke(); break; } #else if (webRequest.isNetworkError || webRequest.isHttpError) { Debug.LogWarning("LRM | Network Error while retreiving the server list!"); } else { relayServerList?.Clear(); relayServerList = JsonUtilityHelper.FromJson <Room>(result.Decompress()).ToList(); serverListUpdated?.Invoke(); } #endif } } else // get master list from load balancer { yield return(StartCoroutine(RetrieveMasterServerListFromLoadBalancer(region))); } }
/// <summary> /// Gets master list from the LB. /// This can be optimized but for now it is it's /// own separate method, so i can understand wtf is going on :D /// </summary> /// <returns></returns> IEnumerator RetrieveMasterServerListFromLoadBalancer(LRMRegions region) { string uri = $"http://{loadBalancerAddress}:{loadBalancerPort}/api/masterlist/"; using (UnityWebRequest webRequest = UnityWebRequest.Get(uri)) { webRequest.SetRequestHeader("x-Region", ((int)region).ToString()); // Request and wait for the desired page. yield return(webRequest.SendWebRequest()); var result = webRequest.downloadHandler.text; #if UNITY_2020_1_OR_NEWER switch (webRequest.result) { case UnityWebRequest.Result.ConnectionError: case UnityWebRequest.Result.DataProcessingError: case UnityWebRequest.Result.ProtocolError: Debug.LogWarning("LRM | Network Error while retreiving the server list!"); break; case UnityWebRequest.Result.Success: relayServerList?.Clear(); relayServerList = JsonUtilityHelper.FromJson <Room>(result).ToList(); serverListUpdated?.Invoke(); _serverListUpdated = true; break; } #else if (webRequest.isNetworkError || webRequest.isHttpError) { Debug.LogWarning("LRM | Network Error while retreiving the server list!"); } else { relayServerList?.Clear(); relayServerList = JsonUtilityHelper.FromJson <Room>(result).ToList(); serverListUpdated?.Invoke(); _serverListUpdated = true; } #endif } }