/// <summary> /// Triggers when the server sends a messasge. The message is obtained through e.data which is an IndexedDictionary<string, object>. /// For this example, data["command"] specifies the type of the command. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnData(object sender, MessageEventArgs e) { print("message recieved"); IndexedDictionary <string, object> data = (IndexedDictionary <string, object>)e.data; data.ToList().ForEach(x => print(x.Key + " -> " + x.Value)); if (data.ContainsKey("command")) { switch (data["command"].ToString()) { // For this example project, player data is sent when the server is ready to start the game case "playerData": { // Server always send primitives as strings so variables should be parsed float x = float.Parse(data["x"].ToString()); float y = float.Parse(data["y"].ToString()); int color = int.Parse(data["color"].ToString()); string name = data["name"].ToString(); PlayerController playerController = Instantiate(playerPrefab , new Vector3(x, y, 0f) , Quaternion.identity , playerParentTransform) .GetComponent <PlayerController>(); playerController.netHand = this; playerController.SetColor(color); playerController.SetName(name); if (data["id"].ToString() != client.id) { localPlayer = playerController; } else { remotePlayer = playerController; remotePlayer.interactable = false; } textHelper.text = ""; messageHand.Ready(); } break; case "message": { string message = data["message"].ToString(); GetPlayerByID(data["id"].ToString()).AddMessage(message); } break; case "oppLeft": { OnApplicationQuit(); SceneManager.LoadScene("ExampleScene"); } break; // For this example, server sends the private game ID to the client who created the private game for other people // to connect the game case "privateGameID": { textHelper.text = "Private Game ID is " + data["privateGameID"] + " and it is copied to clipboard"; TextEditor textEditor = new TextEditor { text = data["privateGameID"].ToString() }; textEditor.SelectAll(); textEditor.Copy(); } break; } } }