/// <summary> /// Create a match making request /// </summary> /// <param name="method">The type of request we're making (join, create, etc)</param> /// <param name="roomName">The name of the room we're trying to match</param> /// <param name="options">Dictionary of options to use in the match making process</param> /// <param name="headers">Dictionary of headers to pass to the server</param> /// <typeparam name="T">Type of <see cref="ColyseusRoom{T}" /> we want to match with</typeparam> /// <returns><see cref="ColyseusRoom{T}" /> we have matched with via async task</returns> /// <exception cref="Exception">Thrown if there is a network related error</exception> /// <exception cref="CSAMatchMakeException">Thrown if there is an error in the match making process on the server side</exception> protected async Task <ColyseusRoom <T> > CreateMatchMakeRequest <T>(string method, string roomName, Dictionary <string, object> options, Dictionary <string, string> headers) { if (options == null) { options = new Dictionary <string, object>(); } if (headers == null) { headers = new Dictionary <string, string>(); } string json = await ColyseusRequest.Request("POST", $"matchmake/{method}/{roomName}", options, headers); LSLog.Log($"Server Response: {json}"); ColyseusMatchMakeResponse response = JsonUtility.FromJson <ColyseusMatchMakeResponse>(json /*req.downloadHandler.text*/); if (response == null) { throw new Exception($"Error with request: {json}"); } if (!string.IsNullOrEmpty(response.error)) { throw new CSAMatchMakeException(response.code, response.error); } return(await ConsumeSeatReservation <T>(response, headers)); }
/// <summary> /// Initializes the Colyseus manager singleton. /// </summary> private void InitializeInstance() { if (Instance != null) { Destroy(gameObject); return; } Instance = GetComponent <T>(); // Initialize the requests object with settings _requests = new ColyseusRequest(_colyseusSettings); }
/// <summary> /// Get all available rooms of type <typeparamref name="T" /> /// </summary> /// <param name="roomName">Name of the room</param> /// <param name="headers">Dictionary of headers to pass to the server</param> /// <returns><see cref="CSACSARoomAvailableCollection{T}" /> array via async task</returns> public async Task <T[]> GetAvailableRooms <T>(string roomName = "", Dictionary <string, string> headers = null) { if (headers == null) { headers = new Dictionary <string, string>(); } string json = await ColyseusRequest.Request("GET", $"matchmake/{roomName}", null, headers); //req.downloadHandler.text; if (json.StartsWith("[", StringComparison.CurrentCulture)) { json = "{\"rooms\":" + json + "}"; } CSARoomAvailableCollection <T> response = JsonUtility.FromJson <CSARoomAvailableCollection <T> >(json); return(response.rooms); }