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.PLAYER_INIT:
            InitializeConnectionMsg piMsg = JsonUtility.FromJson <InitializeConnectionMsg>(recMsg);

            playerUpdateMsg.player.id = piMsg.yourID;

            HandshakeMsg m = new HandshakeMsg();
            m.player    = playerUpdateMsg.player;
            m.player.id = piMsg.yourID;
            SendToServer(JsonUtility.ToJson(m));

            otherPlayers.Add(m.player.id, yourCharacter);

            Debug.Log("Initialization message received!  Your ID: " + piMsg.yourID);
            break;

        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!");
            break;

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

        case Commands.PLAYER_DROPPED:
            ConnectionDroppedMsg cdMsg = JsonUtility.FromJson <ConnectionDroppedMsg>(recMsg);

            // Destroy
            GameObject character = otherPlayers[cdMsg.droppedId];
            otherPlayers.Remove(cdMsg.droppedId);
            Destroy(character);

            Debug.Log("Player dropped message received! " + cdMsg.droppedId);
            break;

        default:
            Debug.Log("Unrecognized message received!");
            break;
        }
    }
    void OnDisconnect(int i)
    {
        Debug.Log("Client disconnected from server");

        // Create drop message
        ConnectionDroppedMsg cdMsg = new ConnectionDroppedMsg();

        cdMsg.droppedId = m_Connections[i].InternalId.ToString();

        m_Connections[i] = default(NetworkConnection);
        players.RemoveAt(i);

        for (int j = 0; j < m_Connections.Length; j++)
        {
            if (!m_Connections[j].IsCreated)
            {
                continue;
            }

            SendToClient(JsonUtility.ToJson(cdMsg), m_Connections[j]);
        }
    }