void CheckHeartBeats() //done { List <string> theDead = new List <string>(); // Check all clients Heartbeat foreach (var heart in clientLookUpTable) { if (Time.time - heart.Value.heartBeat >= 1.0f) { theDead.Add(heart.Key); } } // Check if dead exists if (theDead.Count > 0) { // Clear Look Up Table of Dead clients for (int i = 0; i < theDead.Count; i++) { clientLookUpTable.Remove(theDead[i]); } DroppedPlayersList dropList = new DroppedPlayersList(); dropList.droppedPlayers = theDead; // Send drop list to all clients except dropped ones for (int i = 0; i < m_Connections.Length; i++) { if (!theDead.Contains(m_Connections[i].InternalId.ToString())) { Assert.IsTrue(m_Connections.IsCreated); SendToClient(JsonUtility.ToJson(dropList), m_Connections[i]); } } } }
// Destroy Dropped players void DestroyDroppedPlayers(DroppedPlayersList dropList) //done { foreach (var playerID in dropList.droppedPlayers) { if (playerLookUpTable.ContainsKey(playerID)) { Destroy(playerLookUpTable[playerID]); playerLookUpTable.Remove(playerID); } } }
void OnData(DataStreamReader stream)//done { 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 Set clients ID"); SetupClient(hsMsg); break; case Commands.PLAYER_UPDATE: PlayerUpdateMsg puMsg = JsonUtility.FromJson <PlayerUpdateMsg>(recMsg); Debug.Log("Player update message received!"); break; case Commands.SERVER_UPDATE: ServerUpdateMsg suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg); UpdateAllPlayers(suMsg); Debug.Log("Server update message received!"); break; case Commands.SPAWNED_PLAYERS: SpawnedPlayersList spawnedPlayers = JsonUtility.FromJson <SpawnedPlayersList>(recMsg); SpawnPlayers(spawnedPlayers); Debug.Log("Spawned all Players from Server"); break; case Commands.NEW_PLAYER: NewPlayerMsg newPlayer = JsonUtility.FromJson <NewPlayerMsg>(recMsg); SpawnNewPlayer(newPlayer); Debug.Log("Spawned new Player from Server"); break; case Commands.DROPPED_PLAYER: DroppedPlayersList droppedPlayers = JsonUtility.FromJson <DroppedPlayersList>(recMsg); DestroyDroppedPlayers(droppedPlayers); Debug.Log("Dropped dead players from the Server"); break; default: Debug.Log("Unrecognized message received!"); break; } }