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]);
                }
            }
        }
    }
Esempio n. 2
0
 // Destroy Dropped players
 void DestroyDroppedPlayers(DroppedPlayersList dropList) //done
 {
     foreach (var playerID in dropList.droppedPlayers)
     {
         if (playerLookUpTable.ContainsKey(playerID))
         {
             Destroy(playerLookUpTable[playerID]);
             playerLookUpTable.Remove(playerID);
         }
     }
 }
Esempio n. 3
0
    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;
        }
    }