Exemplo n.º 1
0
        /// <summary>
        /// Event Handler for Application Event UpdatePlayer
        /// </summary>
        /// <param name="netMsg"></param>
        void OnUpdatePlayer(NetworkMessage netMsg)
        {
            // make sure they've actually connected correctly first
            if (HostConnections.ContainsKey(netMsg.conn.connectionId))
            {
                bool result = false;
                var  msg    = netMsg.ReadMessage <MessageTypes.UpdatePlayerMessage>();

                result = ConnectedHosts.UpdatePlayer(msg.playerKey, msg.playerValue, msg.flags);
                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnUpdatePlayer result: " + result);
                }

                var response = new MessageTypes.UpdatePlayerResponseMessage();
                response.playerKey = msg.playerKey;
                response.result    = result;
                netMsg.conn.Send(MessageTypes.UpdatePlayerResponse, response);

                UpdateUI();
            }
            else
            {
                Debug.LogError("<MasterServer> ConnectionID:" + netMsg.conn.connectionId + " attempting to UpdatePlayer with MasterServer without Connecting");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Event Handler for Application Event RemovePlayer
        /// Unlike AddPlayer, RemovePlayer does not require a HostPassword
        /// It is assumed that by now you're trusted and you can remove the player
        /// Also, this allows us to CYA by removing a player from ALL hosts if necessary
        /// </summary>
        /// <param name="netMsg"></param>
        void OnRemovePlayer(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                var  msg    = netMsg.ReadMessage <MessageTypes.RemovePlayerMessage>();
                bool result = false;

                if (!string.IsNullOrEmpty(msg.playerKey))
                {
                    result = (ConnectedHosts.RemovePlayer(msg.playerKey) != null);
                }

                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnRemovePlayer result: " + result);
                }

                var response = new MessageTypes.RemovePlayerResponseMessage();
                response.result    = result;
                response.playerKey = msg.playerKey;
                netMsg.conn.Send(MessageTypes.RemovePlayerResponse, response);

                UpdateUI();
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Event Handler for Application Event UnregisterHost
        /// </summary>
        /// <param name="netMsg"></param>
        void OnUnregisterHost(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                MessageTypes.CustomEventType result = MessageTypes.CustomEventType.UnknownError;
                var msg = netMsg.ReadMessage <MessageTypes.UnregisterHostMessage>();

                // find the instance
                if (ConnectedHosts.RemoveHost(msg.hostName, msg.hostPassword))
                {
                    result = MessageTypes.CustomEventType.NoError;
                }
                else
                {
                    Debug.LogError("<MasterServer> OnHostUnregister Host not found: " + msg.hostName);
                }

                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnHostUnregister result: " + result);
                }

                // tell other hosts?

                var response = new MessageTypes.UnregisterHostResponseMessage();
                response.resultCode = (int)result;
                netMsg.conn.Send(MessageTypes.UnregisterHostResponse, response);

                UpdateUI();
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Event Handler for Application Event RegisterHost
        /// </summary>
        /// <param name="netMsg"></param>
        void OnRegisterHost(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                MessageTypes.CustomEventType result;
                var msg = netMsg.ReadMessage <MessageTypes.RegisterHostMessage>();

                if (string.IsNullOrEmpty(msg.hostName))
                {
                    result = MessageTypes.CustomEventType.KeyEmpty;
                }
                else if (ConnectedHosts.AddHost(msg.hostName, msg.comment, msg.hostPassword, netMsg.conn.address, msg.playerLimit, netMsg.conn.connectionId))
                {
                    result = MessageTypes.CustomEventType.NoError;
                }
                else
                {
                    result = MessageTypes.CustomEventType.DuplicateDetected;
                }

                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnHostRegister result: " + result);
                }

                var response = new MessageTypes.RegisterHostResponseMessage();
                response.resultCode = (int)result;
                netMsg.conn.Send(MessageTypes.RegisterHostResponse, response);

                UpdateUI();
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Event Handler for Application Event AddPlayer
        /// If a HostPassword is set on the HostInstance, it is required to add a new player to that host
        /// </summary>
        /// <param name="netMsg"></param>
        void OnAddPlayer(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                MessageTypes.CustomEventType result = MessageTypes.CustomEventType.UnknownError;
                var msg = netMsg.ReadMessage <MessageTypes.AddPlayerMessage>();

                if (string.IsNullOrEmpty(msg.playerKey))
                {
                    result = MessageTypes.CustomEventType.KeyEmpty;
                }
                else if (!Players.IsPlayerCountValid(MaxPlayerLimitForAllHosts))
                {
                    result = MessageTypes.CustomEventType.MaxPlayersExceeded;
                }
                else if (!string.IsNullOrEmpty(msg.hostName) && ConnectedHosts.Connected.ContainsKey(msg.hostName))
                {
                    // check given host first for quick check, then check all hosts
                    if (ConnectedHosts.FindPlayer(msg.hostName, msg.playerKey) != null)
                    {
                        result = MessageTypes.CustomEventType.DuplicateDetected;
                    }
                    else if (ConnectedHosts.FindPlayer(msg.playerKey) != null)
                    {
                        result = MessageTypes.CustomEventType.DuplicateDetected;
                    }
                    else if (!ConnectedHosts.Connected[msg.hostName].VerifyPassword(msg.hostPassword))
                    {
                        result = MessageTypes.CustomEventType.HostPasswordFail;
                    }
                    else
                    {
                        result = MessageTypes.CustomEventType.NoError;
                        ConnectedHosts.AddPlayer(msg.hostName, msg.playerKey, msg.playerValue, msg.flags);
                    }
                }
                else
                {
                    result = MessageTypes.CustomEventType.HostUnknown;
                }

                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnAddPlayer result: " + result);
                }

                var response = new MessageTypes.AddPlayerResponseMessage();
                response.resultCode = (int)result;
                response.playerKey  = msg.playerKey;
                netMsg.conn.Send(MessageTypes.AddPlayerResponse, response);

                UpdateUI();
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Event Handler for Application Event PlayerChangeHost
        /// </summary>
        /// <param name="netMsg"></param>
        void OnUpdatePlayerHost(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                var msg = netMsg.ReadMessage <MessageTypes.UpdatePlayerHostMessage>();
                MessageTypes.CustomEventType result = MessageTypes.CustomEventType.UnknownError;

                if (string.IsNullOrEmpty(msg.playerKey))
                {
                    result = MessageTypes.CustomEventType.KeyEmpty;
                }
                else if (!string.IsNullOrEmpty(msg.hostName) && ConnectedHosts.Connected.ContainsKey(msg.hostName))
                {
                    PlayerInstance player = null;
                    // check given host first for quick check, then check all hosts
                    if (!ConnectedHosts.Connected[msg.hostName].VerifyPassword(msg.hostPassword))
                    {
                        result = MessageTypes.CustomEventType.HostPasswordFail;
                    }
                    else if ((player = ConnectedHosts.RemovePlayer(msg.playerKey)) != null)
                    {
                        // successful removal, now add to new Host
                        player.HostLocation  = ConnectedHosts.Connected[msg.hostName];
                        player.HostLoginTime = System.DateTime.UtcNow;
                        ConnectedHosts.AddPlayer(msg.hostName, player);
                        result = MessageTypes.CustomEventType.NoError;
                    }
                    else
                    {
                        result = MessageTypes.CustomEventType.DuplicateDetected;
                    }
                }
                else
                {
                    result = MessageTypes.CustomEventType.HostUnknown;
                }

                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnUpdatePlayerHost result: " + result);
                }
                var response = new MessageTypes.UpdatePlayerHostResponseMessage();
                response.resultCode = (int)result;
                response.playerKey  = msg.playerKey;
                netMsg.conn.Send((short)MessageTypes.UpdatePlayerHostResponse, response);

                UpdateUI();
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Event Handler for Application Event IsPlayerConnected
        /// </summary>
        /// <param name="netMsg"></param>
        void OnIsPlayerConnected(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                var  msg    = netMsg.ReadMessage <MessageTypes.IsPlayerConnectedMessage>();
                bool result = (ConnectedHosts.FindPlayer(msg.playerKey) != null);

                if (MasterServer.ViewDebugMessages)
                {
                    Debug.Log("<MasterServer> OnIsPlayerConnected result: " + result);
                }
                var response = new MessageTypes.IsPlayerConnectedResponseMessage();
                response.result    = result;
                response.playerKey = msg.playerKey;
                netMsg.conn.Send((short)MessageTypes.IsPlayerConnectedResponse, response);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Event Handler for Application Event ListAllPlayers
        /// </summary>
        /// <param name="netMsg"></param>
        void OnListAllPlayers(NetworkMessage netMsg)
        {
            if (IsConnectionVerified(netMsg.conn))
            {
                var msg = netMsg.ReadMessage <MessageTypes.ListAllPlayersMessage>();

                // no hostname provided, get all players from all hosts
                if (string.IsNullOrEmpty(msg.hostName))
                {
                    if (MasterServer.ViewDebugMessages)
                    {
                        Debug.Log("<MasterServer> OnListAllPlayers empty hostName, getting all players from all hosts");
                    }
                    var response = new MessageTypes.ListAllPlayersResponseMessage();
                    response.result  = true;
                    response.players = ConnectedHosts.GetPlayerStubs().ToArray();
                    netMsg.conn.Send(MessageTypes.ListAllPlayersResponse, response);
                }
                // specifc hostname check
                else if (ConnectedHosts.Connected.ContainsKey(msg.hostName))
                {
                    if (MasterServer.ViewDebugMessages)
                    {
                        Debug.Log("<MasterServer> OnListAllPlayers getting all players from specific host: " + msg.hostName);
                    }
                    var response = new MessageTypes.ListAllPlayersResponseMessage();
                    response.result  = true;
                    response.players = ConnectedHosts.GetPlayerStubs(msg.hostName).ToArray();
                    netMsg.conn.Send(MessageTypes.ListAllPlayersResponse, response);
                }
                // error
                else
                {
                    if (MasterServer.ViewDebugMessages)
                    {
                        Debug.Log("<MasterServer> OnListAllPlayers invalid hostName");
                    }
                    var response = new MessageTypes.ListAllPlayersResponseMessage();
                    response.result = false;
                    netMsg.conn.Send(MessageTypes.ListAllPlayersResponse, response);
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Event Handler for System Event Disconnect
        /// </summary>
        /// <param name="netMsg"></param>
        void OnHostDisconnect(NetworkMessage netMsg)
        {
            Debug.Log("<MasterServer> Host Disconnected: " + netMsg.conn.connectionId);
            RemoveConnection(netMsg.conn);

            // remove the associated host
            foreach (var host in ConnectedHosts.Connected.Values)
            {
                // a network message does not have a custom identifier, so we have to check for matching connectionID
                if (host.ConnectionId == netMsg.conn.connectionId)
                {
                    // tell other players?

                    // remove room
                    ConnectedHosts.RemoveHost(host.HostName, "", true);

                    Debug.Log("<MasterServer> Host Instance [" + host.HostName + "] disconnected");
                    break;
                }
            }
            UpdateUI();
        }