Example #1
0
        private Task OnPlayerDisconnected(PlayerDisconnectedMessage message)
        {
            var plr = _playerManager[message.AccountId];

            plr?.Disconnect();
            return(Task.CompletedTask);
        }
Example #2
0
    private Message readServerMessage(BitBuffer bf)
    {
        MessageType messageType   = bf.GetEnum <MessageType> ((int)MessageType.TOTAL);
        Message     serverMessage = null;

        switch (messageType)
        {
        case MessageType.PLAYER_CONNECTED:
            serverMessage = PlayerConnectedMessage.CreatePlayerConnectedMessageToReceive();
            break;

        case MessageType.PLAYER_DISCONNECTED:
            serverMessage = PlayerDisconnectedMessage.CreatePlayerDisconnectedMessageToReceive();
            break;

        case MessageType.SNAPSHOT:
            serverMessage = new SnapshotMessage();
            break;

        case MessageType.ACK_RELIABLE_MAX_WAIT_TIME:
            serverMessage = AckReliableMessage.CreateAckReliableMessageMessageToReceive();
            break;

        case MessageType.ACK_RELIABLE_SEND_EVERY_PACKET:
            serverMessage = AckReliableSendEveryFrameMessage.CreateAckReliableSendEveryFrameMessageMessageToReceive();
            break;

        default:
            Debug.LogError("Got a Server message that cannot be understood");
            return(null);
        }
        serverMessage.Load(bf);
        return(serverMessage);
    }
Example #3
0
    // ======================================
    // Server message reception
    // ======================================


    private static Message ReceiveServerMessage(BitBuffer bitBuffer)
    {
        var messageType = bitBuffer.GetEnum <MessageType>((int)MessageType.TOTAL);

        Message message;

        switch (messageType)
        {
        case MessageType.PLAYER_CONNECTED:
            message = PlayerConnectedMessage.CreatePlayerConnectedMessageToReceive();
            break;

        case MessageType.PLAYER_DISCONNECTED:
            message = PlayerDisconnectedMessage.CreatePlayerDisconnectedMessageToReceive();
            break;

        case MessageType.SNAPSHOT:
            message = new SnapshotMessage();
            break;

        case MessageType.ACK_RELIABLE_MAX_WAIT_TIME:
            message = AckReliableMessage.CreateAckReliableMessageMessageToReceive();
            break;

        case MessageType.ACK_RELIABLE_SEND_EVERY_PACKET:
            message = AckReliableSendEveryFrameMessage.CreateAckReliableSendEveryFrameMessageMessageToReceive();
            break;

        default:
            return(null);    // Return null if the message is not a "from server" type
        }
        message.Load(bitBuffer);
        return(message);
    }
Example #4
0
    Message ReadServerMessage(BitBuffer bitBuffer)
    {
        MessageType messageType   = bitBuffer.GetEnum <MessageType>((int)MessageType.TOTAL);
        Message     serverMessage = null;

        switch (messageType)
        {
        case MessageType.PLAYER_CONNECTED:
            serverMessage = PlayerConnectedMessage.CreatePCMToReceive(); break;

        case MessageType.PLAYER_DISCONNECTED:
            serverMessage = PlayerDisconnectedMessage.CreatePDMToReceive(); break;

        case MessageType.SNAPSHOT:
            serverMessage = new SnapshotMessage(); break;

        case MessageType.ACK_RELIABLE_MAX_WAIT_TIME:
            serverMessage = AckReliableMessage.CreateAckReliableMessageToReceive(); break;

        case MessageType.ACK_RELIABLE_SEND_EVERY_PACKET:
            serverMessage = AckReliableSendEveryFrameMessage.CreateAckReliableSEFMToReceive(); break;

        default:
            Debug.LogError("Unknown server message received.");
            return(null);
        }

        serverMessage.Load(bitBuffer);
        return(serverMessage);
    }
Example #5
0
    private void ProcessPlayerDisconnectedMessage(PlayerDisconnectedMessage message)
    {
        PlayerNetworkView player;

        if (_players.TryGetValue(message.PlayerId, out player))
        {
            DisconnectPlayer(player);
        }
    }
    public static Message decipherMessage(byte[] msgBytes)
    {
        if (BitConverter.IsLittleEndian)
        {
            //Array.Reverse(msgBytes);
        }
        Message msg;

        byte[] eventTypeBytes = new byte[2];
        Buffer.BlockCopy(msgBytes, 0, eventTypeBytes, 0, 2);

        ushort       sho       = BitConverter.ToUInt16(eventTypeBytes, 0);
        NetworkEvent eventType = (NetworkEvent)sho;

        switch (eventType)
        {
        case NetworkEvent.StartGame:
            msg = new GameStartMessage(msgBytes);
            break;

        case NetworkEvent.PlayerUpdateInfo:
            msg = new PlayerUpdateMessage(msgBytes);
            break;

        case NetworkEvent.PlayerConnected:
            msg = new PlayerConnectedMessage(msgBytes);
            break;

        case NetworkEvent.PlayerDisconnected:
            msg = new PlayerDisconnectedMessage(msgBytes);
            break;

        case NetworkEvent.ObstacleGenerated:
            msg = new ObstacleGeneratedMessage(msgBytes);
            break;

        case NetworkEvent.PlayerFellBehind:
            msg = new PlayerFellBehindMessage(msgBytes);
            break;

        case NetworkEvent.ObstacleModified:
            msg = new ObstacleModifiedMessage(msgBytes);
            break;

        case NetworkEvent.PlayerWonRace:
            msg = new PlayerWonMessage(msgBytes);
            break;

        case NetworkEvent.PlayerAttackPlayer:
            msg = new PlayerAttackedPlayerMessage(msgBytes);
            break;

        default:
            throw new Exception("oops " + eventType);
        }
        return(msg);
    }
Example #7
0
    public void ProcessPlayerDisconnected(PlayerDisconnectedMessage message)
    {
        PlayerNetworkView player = GetPlayerWithId(message.PlayerId);

        if (player != null)
        {
            DisconnectPlayer(player);
        }
    }
Example #8
0
    public void PlayerDisconnected(uint connection, string playerID)
    {
        PlayerDisconnectedMessage dMsg = new PlayerDisconnectedMessage(playerID);

        SendMessageToAllPlayers(dMsg, SendType.Reliable);
        GameManager.Instance.RemovePlayer(playerID);
        m_Connections.Remove(connection);
        m_Server.CloseConnection(connection);

        RealignPlayersAndSend();
    }
Example #9
0
    public void ProcessPlayerDisconnected(PlayerDisconnectedMessage playerDisconnectedMessage)
    {
        int playerId             = playerDisconnectedMessage.PlayerId;
        PlayerNetworkView player = GetPlayerWithId(playerId);

        if (player != null)
        {
            players.Remove(player);
            Destroy(player);
        }
    }
        protected override void OnWebSocketClose(CloseEventArgs e)
        {
            this._warsimUser.GameHostWebSocketId = string.Empty;
            this._warsimUser.ActiveGameId        = Guid.Empty;

            // Owner has manually ended the game, the game is already erased from memory
            if (e.Code == 2008)
            {
                return;
            }

            // If the user is a spectator
            if (this._gameHost.Spectators.ContainsKey(this._warsimUser.UserId))
            {
                this._gameHost.Spectators.TryRemove(this._warsimUser.UserId, out this._warsimUser);
            }

            // If the user is a player
            var oldGameOwnerId  = this._gameHost.OwnerId;
            var gameStillActive = this._gameHost.Leave(this._warsimUser);

            if (gameStillActive)
            {
                this._gameHost.Map.ResetStartArrow(this._warsimUser.UserId);
                this._gameHost.Map.DeselectUserObjects(this._warsimUser.UserId);

                if (this._gameHost.Mode == GameMode.Simulation)
                {
                    this._gameHost.Map.RemoveUserRobot(this._warsimUser.UserId);
                }

                var disconnectedMsg = new PlayerDisconnectedMessage
                {
                    UserId   = this._warsimUser.UserId,
                    Username = this._warsimUser.Username
                };

                this.BroadcastToCurrentGame(EventBuilder.Build(disconnectedMsg).Serialize());

                // This means the owner of the game has changed
                if (oldGameOwnerId == this._warsimUser.UserId)
                {
                    var newOwnerMsg = new NewGameOwnerMessage();
                    var newOwner    = this._gameManager.GetUser(this._gameHost.OwnerId);

                    // Send a message to tell the new game owner
                    this.Sessions.SendTo(EventBuilder.Build(newOwnerMsg).Serialize(), newOwner.GameHostWebSocketId);
                }
            }
            else
            {
                this._gameManager.EndGame(this._gameHost);
            }
        }
Example #11
0
 public override void HandleNetworkMessage(Message msg)
 {
     base.HandleNetworkMessage(msg);
     if (msg is GameStartMessage)
     {
         GameStartMessage nMsg  = msg as GameStartMessage;
         ConnectionStatus cStat = new ConnectionStatus();
         m_Server.GetQuickConnectionStatus(m_Connection, cStat);
         uniformTimeOffset = ((nMsg.uniformTime.Ticks / TimeSpan.TicksPerSecond) + (((float)cStat.ping) * 0.01f)) - (DateTime.UtcNow.Ticks / TimeSpan.TicksPerSecond);
         GameManager.Instance.StartGameInSeconds(nMsg.timeAfterToSpawn + uniformTimeOffset);
     }
     if (msg is PlayerConnectedMessage)
     {
         PlayerConnectedMessage nMsg = msg as PlayerConnectedMessage;
         NetworkedPlayer        p    = GameManager.Instance.AddPlayer(nMsg.playerID);
         p.playerID = nMsg.playerID;
     }
     else if (msg is PlayerDisconnectedMessage)
     {
         PlayerDisconnectedMessage nMsg = msg as PlayerDisconnectedMessage;
         GameManager.Instance.RemovePlayer(nMsg.playerID);
     }
     else if (msg is PlayerUpdateMessage)
     {
         PlayerUpdateMessage nMsg = msg as PlayerUpdateMessage;
         GameManager.Instance.UpdatePlayerInformation(ref nMsg.info, nMsg.playerID);
     }
     else if (msg is ObstacleGeneratedMessage)
     {
         ObstacleGeneratedMessage nMsg = msg as ObstacleGeneratedMessage;
         TileManager.Instance.SpawnObstacle(nMsg.itemID, nMsg.itemPos, nMsg.itemType);
     }
     else if (msg is ObstacleModifiedMessage)
     {
         ObstacleModifiedMessage nMsg = msg as ObstacleModifiedMessage;
         (GameManager.Instance.m_AllObstacles[(int)nMsg.obstacleID] as IObstacle).InteractedWith(GameManager.Instance.GetPlayer(nMsg.playerID));
     }
     else if (msg is PlayerFellBehindMessage)
     {
         PlayerFellBehindMessage nMsg = msg as PlayerFellBehindMessage;
         GameManager.Instance.PlayerFellBehind(nMsg.playerID);
     }
     else if (msg is PlayerWonMessage)
     {
         PlayerWonMessage nMsg = msg as PlayerWonMessage;
         GameManager.Instance.PlayerHasWonGame(GameManager.Instance.GetPlayer(nMsg.playerID));
     }
     else if (msg is PlayerAttackedPlayerMessage)
     {
         PlayerAttackedPlayerMessage nMsg = msg as PlayerAttackedPlayerMessage;
         GameManager.Instance.PlayerAttacked(nMsg.attackedPlayerID);
     }
 }
Example #12
0
    void OnServerLostClient(NetworkMessage netMsg)
    {
        dWin.Text("Server Disconnected from client " + netMsg.conn.connectionId);

        players.Remove(netMsg.conn.connectionId);

        dWin.Text(GetPlayerStats());

        var playerDisconnectedMessage = new PlayerDisconnectedMessage();

        playerDisconnectedMessage.id = netMsg.conn.connectionId;
        NetworkServer.SendToAll(NetworkMessages.PlayerDisconnected, playerDisconnectedMessage);
    }
Example #13
0
        private Task OnPlayerDisconnected(PlayerDisconnectedMessage message)
        {
            var plr = _playerManager[message.AccountId];

            if (plr == null)
            {
                _logger.Warning("<OnPlayerDisconnected> Cant find player={Id}", message.AccountId);
                return(Task.CompletedTask);
            }

            plr.Disconnect();
            return(Task.CompletedTask);
        }
Example #14
0
        private void HandlePlayerDisconnectedMessage(NetIncomingMessage im)
        {
            var message = new PlayerDisconnectedMessage(im);

            if (TileGrid.GameState == GameStates.Lobby)
            {
                bannerManager.RemoveLobbyBanner(message.Pos);
                if (this.IsHost)
                {
                    OnPlayerDisconnect(message.Name, message.Color, message.Pos);
                }
            }
        }
Example #15
0
    void ProcessDisconnectPlayer(DisconnectPlayerMessage disconnectPlayerMessage)
    {
        Player player = GetPlayerWithEndPoint(disconnectPlayerMessage.From);

        if (player != null)
        {
            DisconnectPlayer(player);
            for (int i = 0; i < players.Count; i++)
            {
                Player playerToSendTo = players [i];
                PlayerDisconnectedMessage playerDisconnectedMessage = PlayerDisconnectedMessage.CreatePlayerDisconnectedMessageToSend(playerToSendTo, player.Id);
                playerToSendTo.CommunicationManager.SendMessage(playerDisconnectedMessage);
            }
        }
    }
Example #16
0
        public static void HandlePlayerDisconnectedMessage(BaseClient client, PlayerDisconnectedMessage message)
        {
            if (client.TeknoServer == null)
            {
                return;
            }

            var player = client.TeknoServer.Players.FirstOrDefault(x => x.EntRef == message.entRef);

            if (player != null)
            {
                logger.Info("Player disconnected: " + player.Name);
                client.TeknoServer.RemovePlayer(message.entRef);
            }
        }
Example #17
0
        public void RemoveClientOrAgent(ulong clientId)
        {
            var client = JoiningAgents.Where(q => q.ID == clientId).FirstOrDefault();

            if (client != null)
            {
                JoiningAgents.Remove(client);
            }
            var agent = Agents.Where(q => q.Client.ID == clientId).FirstOrDefault();

            if (agent != null)
            {
                Agents.Remove(agent);
                var message = new PlayerDisconnectedMessage(agent.PlayerId);
                SendMessageToGameMaster(message.Serialize());
            }
        }
Example #18
0
    void LostClient(NetworkMessage netMsg)
    {
        Debug.Log("Lost client...");

        if (players[netMsg.conn.connectionId].GetObject() != null)
        {
            Destroy(players[netMsg.conn.connectionId].GetObject());
        }

        players.Remove(netMsg.conn.connectionId);

        if (lobbyGui != null)
        {
            lobbyGui.UpdateUI(players);
        }

        // broadcast
        var playerDisconnectedMessage = new PlayerDisconnectedMessage();

        playerDisconnectedMessage.id = netMsg.conn.connectionId;
        NetworkServer.SendToAll(CustomNetMsg.PlayerDisconnected, playerDisconnectedMessage);
    }
 public void HandlePlayerDisconnectedRequest(PlayerDisconnectedMessage playerDisconnected)
 {
     ConsoleWriter.Show("Player disconnected...");
     UnregisterPlayer(playerDisconnected.PlayerID);
 }
Example #20
0
    Message ReadServerMessage(BitBuffer bitBuffer)
    {
        MessageType messageType   = bitBuffer.GetEnum <MessageType> ((int)MessageType.TOTAL);
        Message     serverMessage = null;

        switch (messageType)
        {
        case MessageType.PLAYER_CONNECTED:
            serverMessage = PlayerConnectedMessage.CreatePlayerConnectedMessageToReceive();
            break;

        case MessageType.PLAYER_DISCONNECTED:
            serverMessage = PlayerDisconnectedMessage.CreatePlayerDisconnectedMessageToReceive();
            break;

        case MessageType.SNAPSHOT:
            serverMessage = new SnapshotMessage();
            break;

        case MessageType.ACK_RELIABLE_MAX_WAIT_TIME:
            Debug.Log("Client::got ack reliable wait time ");
            serverMessage = AckReliableMessage.CreateAckReliableMessageMessageToReceive();
            break;

        case MessageType.ACK_RELIABLE_SEND_EVERY_PACKET:
            serverMessage = AckReliableSendEveryFrameMessage.CreateAckReliableSendEveryFrameMessageMessageToReceive();
            break;

        default:
            Debug.LogError("Got a server message that cannot be understood");
            return(null);
        }
        serverMessage.Load(bitBuffer);

        if (serverMessage.Reliability == ReliabilityType.RELIABLE_MAX_WAIT_TIME)
        {
            if (serverMessage.ReliabilityId == (LastReceivedReliableMessageId + 1))
            {
                //accept it... valid message since its +1 since the last received
                //send to the sender that its reliable message has been received
                outMessages.Add(AckReliableMessage.CreateAckReliableMessageMessageToSend(serverMessage.ReliabilityId));
                LastReceivedReliableMessageId = serverMessage.ReliabilityId;
            }
            else
            {
                //we need to discard it... either its been already processed or out of order
                return(null);
            }
        }
        else if (serverMessage.Reliability == ReliabilityType.RELIABLE_SEND_EVERY_PACKET)
        {
            if (serverMessage.ReliabilityId > LastReceivedSendInEveryFramePacketMessageId)
            {
                //set the last "reliable send in every packet" message id.. it will get sent to the server on the next packet
                LastReceivedSendInEveryFramePacketMessageId = serverMessage.ReliabilityId;
                Debug.Log("Client::lastReceivedSendInEveryFramePacketMessageId = " + lastReceivedSendInEveryFramePacketMessageId);
            }
            else
            {
                //discard
                return(null);
            }
        }

        return(serverMessage);
    }