void OnDisconnect(int i) { Debug.Log("Client disconnected from server"); foreach (var player in connectedPlayers) { if (player.id == m_Connections[i].InternalId.ToString()) { droppedPlayer = player; } } connectedPlayers.Remove(droppedPlayer); m_Connections[i] = default(NetworkConnection); //let all of the remaining clients know who dropped DroppedUpdateMsg d = new DroppedUpdateMsg(); d.player = droppedPlayer; foreach (NetworkConnection connection in m_Connections) { if (connection.IsCreated) { SendToClient(JsonUtility.ToJson(d), connection); } } droppedPlayer = null; }
//IEnumerator SendRepeatedHandshake() //{ // while (true) // { // yield return new WaitForSeconds(2); // Debug.Log("Sending Handshake"); // HandshakeMsg m = new HandshakeMsg(); // m.player.id = m_Connection.InternalId.ToString(); // SendToServer(JsonUtility.ToJson(m)); // } //} void OnData(DataStreamReader stream) { NativeArray <byte> bytes = new NativeArray <byte>(stream.Length, Allocator.Temp); stream.ReadBytes(bytes); string recMsg = Encoding.ASCII.GetString(bytes.ToArray()); NetworkHeader header = JsonUtility.FromJson <NetworkHeader>(recMsg); switch (header.cmd) { case Commands.HANDSHAKE: HandshakeMsg hsMsg = JsonUtility.FromJson <HandshakeMsg>(recMsg); Debug.Log("Handshake message received!"); //add our own id so we know who we are if (myId == "") { myId = hsMsg.player.id; Debug.Log("My id is:" + myId); } connectedPlayers.Add(hsMsg.player); Debug.Log("PLayer spawned status: " + hsMsg.player.spawned); break; case Commands.PLAYER_UPDATE: //not really receiveing player update messages as this is this client and not the server PlayerUpdateMsg puMsg = JsonUtility.FromJson <PlayerUpdateMsg>(recMsg); Debug.Log("Player update message received!"); break; case Commands.SERVER_UPDATE: ServerUpdateMsg suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg); Debug.Log("Server update message received!"); for (int i = 0; i < suMsg.players.Count; i++) { foreach (NetworkObjects.NetworkPlayer player in connectedPlayers) { if (player.id == suMsg.players[i].id) //get the matching player from the server and out player list { //update current player list positoins player.cubPos = suMsg.players[i].cubPos; } } } break; case Commands.NEWPLAYER_UPDATE: NewPlayerUpdateMsg npMsg = JsonUtility.FromJson <NewPlayerUpdateMsg>(recMsg); for (int i = 0; i < npMsg.players.Count; i++) { //check if there are any new players that were added bool playerFound = false; foreach (NetworkObjects.NetworkPlayer player in connectedPlayers) { if (npMsg.players[i].id == player.id) { playerFound = true; Debug.Log("already have the player"); } } if (!playerFound) // the player in the latest game state is new and we need to add them { connectedPlayers.Add(npMsg.players[i]); Debug.Log("Added other player to conencted players"); } } break; case Commands.DROPPED_UPDATE: DroppedUpdateMsg dpMsg = JsonUtility.FromJson <DroppedUpdateMsg>(recMsg); foreach (NetworkObjects.NetworkPlayer player in connectedPlayers) { if (player.id == dpMsg.player.id) { Debug.Log("found dropped player"); droppedPlayers.Add(player); } } break; default: Debug.Log("Unrecognized message received!"); break; } }