public override void OnReceiveData(NetworkFrame frame, IPEndPoint point, byte[] bytes)
    {
        base.OnReceiveData(frame, point, bytes);
        NetworkPlayer player = NetworkManager.Instance.GetPlayer(frame.m_SenderId);

        if (!IsUserAuthorized(frame.m_SenderId) && frame.m_Type != NetworkFrame.NetworkFrameType.Authentication)
        {
            return;
        }

        switch (frame.m_Type)
        {
        case NetworkFrame.NetworkFrameType.Handshake:
        {
            NetworkHandshakeFrame handshake = NetworkFrame.Parse <NetworkHandshakeFrame>(bytes);
            player = NetworkManager.Instance.AddPlayer(handshake.m_SenderId, new NetworkPlayer()
                {
                    m_Id   = handshake.m_SenderId,
                    m_Name = handshake.m_DisplayName
                });

            NetworkSpawnRPC spawnRpc = new NetworkSpawnRPC(-1, true);
            OnRPCCommand(player, spawnRpc.ToString());
            UpdatePlayer(player);
        } break;

        case NetworkFrame.NetworkFrameType.Authentication:     // TODO: Clean this? Its terrible lol
        {
            NetworkAuthenticationFrame authenticationFrame = NetworkFrame.Parse <NetworkAuthenticationFrame>(bytes);

            if (m_Password != "" && m_Password != null && authenticationFrame.m_Password != m_Password)
            {
                Debug.Log(m_Password);
                authenticationFrame.m_Response = NetworkAuthenticationFrame.NetworkAuthenticationResponse.IncorrectPassword;
            }
            else if (NetworkManager.Instance.GetPlayerCount() == NetworkManager.Instance.m_Settings.m_MaxPlayers && NetworkManager.Instance.m_Settings.m_MaxPlayers > 0)
            {
                authenticationFrame.m_Response = NetworkAuthenticationFrame.NetworkAuthenticationResponse.LobbyFull;
            }
            else
            {
                Debug.Log("bop");
                m_AuthorizedUsers.Add(frame.m_SenderId);
                authenticationFrame.m_Response = NetworkAuthenticationFrame.NetworkAuthenticationResponse.Connected;
            }
            authenticationFrame.m_TargetId = authenticationFrame.m_SenderId;
            authenticationFrame.m_SenderId = "server";
            QueueFrame(authenticationFrame);
        } break;

        case NetworkFrame.NetworkFrameType.Ping:
        {
            NetworkFrame pingFrame = new NetworkFrame(NetworkFrame.NetworkFrameType.Ping, "server", frame.m_SenderId);
            QueueFrame(pingFrame);
        } break;

        case NetworkFrame.NetworkFrameType.RPC:
        {
            NetworkRPCFrame rpcFrame = NetworkFrame.Parse <NetworkRPCFrame>(bytes);
            OnRPCCommand(player, rpcFrame.m_RPC);
        } break;

        case NetworkFrame.NetworkFrameType.Heartbeat:
        {
            if (m_Heartbeats.ContainsKey(frame.m_SenderId))
            {
                m_Heartbeats[frame.m_SenderId] = 0;
            }
            else
            {
                m_Heartbeats.Add(frame.m_SenderId, 0);
            }
        } break;
        }
    }
Esempio n. 2
0
    /// <summary>
    /// Used to send the initial handshake to the server
    /// </summary>
    private void SendHandshake()
    {
        NetworkHandshakeFrame handshake = new NetworkHandshakeFrame(m_DefaultName);

        QueueFrame(handshake);
    }