void OnData(DataStreamReader stream, int i)
    {
        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!");
            break;

        case Commands.PLAYER_UPDATE:
            PlayerUpdateMsg puMsg = JsonUtility.FromJson <PlayerUpdateMsg>(recMsg);
            Debug.Log("Player update message received!");

            Debug.Log("Player List: " + serverPlayerList);
            foreach (NetworkObjects.NetworkPlayer player in serverPlayerList)
            {
                if (player.id == puMsg.player.id)
                {
                    player.cubeColor = puMsg.player.cubeColor;
                    player.cubPos    = puMsg.player.cubPos;
                    player.cubRot    = puMsg.player.cubRot;
                }
            }
            break;

        case Commands.PLAYER_BULLET:
            PlayerBulletMsg pbMsg = JsonUtility.FromJson <PlayerBulletMsg>(recMsg);
            Debug.Log("Player Bullet Fired!");
            FireBulletForPlayers(pbMsg, m_Connections[i]);
            break;

        case Commands.PLAYER_JOINED:
            PlayerJoinMessage pjMsg = JsonUtility.FromJson <PlayerJoinMessage>(recMsg);
            Debug.Log("Player join message received!");
            CreatePlayer(pjMsg, m_Connections[i]);
            break;

        case Commands.SERVER_UPDATE:
            ServerUpdateMsg suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg);
            Debug.Log("Server update message received!");
            break;

        case Commands.PLAYER_LEFT:
            PlayerLeaveMsg plMsg = JsonUtility.FromJson <PlayerLeaveMsg>(recMsg);
            Debug.Log("Player leave message recieved!");
            OnDisconnect(int.Parse(plMsg.player.id));
            break;

        default:
            Debug.Log("SERVER ERROR: Unrecognized message received!");
            break;
        }
    }
 void FireBulletForPlayers(PlayerBulletMsg pbMsg, NetworkConnection c)
 {
     for (int i = 0; i < m_Connections.Length; i++)
     {
         if (m_Connections[i] != c)
         {
             SendToClient(JsonUtility.ToJson(pbMsg), m_Connections[i]);
         }
     }
 }
    IEnumerator SendPlayerInformation()
    {
        yield return(new WaitForSeconds(0.2f));

        Debug.Log("Creating Player");
        PlayerJoinMessage pm = new PlayerJoinMessage();

        pm.player.cubeColor = UnityEngine.Random.ColorHSV(0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
        pm.player.cubPos    = new Vector3(UnityEngine.Random.Range(-50.0f, 50.0f), 0.0f, UnityEngine.Random.Range(-50.0f, 50.0f));
        pm.player.cubRot    = new Quaternion();

        pm.player.Username    = PlayerPrefs.GetString("Player_Username");
        pm.player.playerClass = (Classes)int.Parse(PlayerPrefs.GetString("Player_Class"));
        pm.player.level       = int.Parse(PlayerPrefs.GetString("Player_Level"));
        pm.player.health      = int.Parse(PlayerPrefs.GetString("Player_Health"));
        pm.player.score       = int.Parse(PlayerPrefs.GetString("Player_Score"));

        SendToServer(JsonUtility.ToJson(pm));

        while (true)
        {
            PlayerUpdateMsg pum = new PlayerUpdateMsg();

            PlayerBulletMsg pbMsg = new PlayerBulletMsg();

            foreach (NetworkObjects.NetworkPlayer player in playerList)
            {
                if (player.id == clientID)
                {
                    pum.player.id        = clientID;
                    pum.player.cube      = player.cube;
                    pum.player.cubeColor = player.cubeColor;
                    pum.player.cubPos    = player.cubPos;
                    pum.player.cubRot    = player.cubRot;

                    if (pum.player.cube.GetComponent <Character>().bulletFired)
                    {
                        pbMsg.player          = player;
                        pbMsg.clickedLocation = player.cube.GetComponent <Character>().clickPosition;

                        Debug.Log("Sending Bullet Message Over to Server");
                        SendToServer(JsonUtility.ToJson(pbMsg));

                        pbMsg.player.cube.GetComponent <Character>().bulletFired = false;
                    }

                    SendToServer(JsonUtility.ToJson(pum));
                }
            }

            yield return(new WaitForSeconds(updateTime));
        }
    }
    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);

        Debug.Log("Got this: " + header.cmd);

        switch (header.cmd)
        {
        case Commands.HANDSHAKE:
            HandshakeMsg hsMsg = JsonUtility.FromJson <HandshakeMsg>(recMsg);
            Debug.Log("Handshake message received!");
            clientID = hsMsg.player.id;
            Debug.Log("Id: " + clientID);
            break;

        case Commands.PLAYER_UPDATE:
            PlayerUpdateMsg puMsg = JsonUtility.FromJson <PlayerUpdateMsg>(recMsg);
            Debug.Log("Player update message received!");
            break;

        case Commands.PLAYER_BULLET:
            PlayerBulletMsg pbMsg = JsonUtility.FromJson <PlayerBulletMsg>(recMsg);
            Debug.Log("Player Bullet Fired Message Recieved!");
            GameObject.Instantiate(bulletRef, (pbMsg.player.cubPos + (pbMsg.clickedLocation - pbMsg.player.cubPos).normalized), Quaternion.LookRotation((pbMsg.clickedLocation - pbMsg.player.cubPos).normalized));
            break;

        case Commands.PLAYER_JOINED:
            PlayerJoinMessage pjMsg = JsonUtility.FromJson <PlayerJoinMessage>(recMsg);
            Debug.Log("Player join message received!");
            pjMsg.player.cube = Instantiate(cubeRef);
            pjMsg.player.cube.GetComponent <Renderer>().material.SetColor("_Color", pjMsg.player.cubeColor);

            if (pjMsg.player.id == clientID)
            {
                pjMsg.player.cube.GetComponent <Character>().networkManRef = this;
                pjMsg.player.cube.GetComponent <Character>().playerRef     = pjMsg.player;
            }
            else
            {
                pjMsg.player.cube.GetComponent <Character>().setStats();
            }

            playerList.Add(pjMsg.player);

            break;

        case Commands.SERVER_UPDATE:
            suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg);
            Debug.Log("Server update message received!");
            foreach (NetworkObjects.NetworkPlayer clientPlayer in playerList)
            {
                if (clientPlayer.id == clientID)
                {
                }
                else
                {
                    foreach (NetworkObjects.NetworkPlayer serverPlayer in suMsg.players)
                    {
                        if (serverPlayer.id == clientPlayer.id)
                        {
                            clientPlayer.cube.transform.position = serverPlayer.cubPos;
                        }
                        else
                        {
                        }
                    }
                }
            }
            break;

        case Commands.PLAYER_LEFT:
            PlayerLeaveMsg plMsg = JsonUtility.FromJson <PlayerLeaveMsg>(recMsg);
            Debug.Log("Player Leave message received!");
            KillClientPlayer(plMsg.player);
            OnDisconnect();

            break;

        default:
            Debug.Log("Unrecognized message received!");
            break;
        }
    }