Ejemplo n.º 1
0
    public static void ClientDisconnectedEventHandler(UdpClient client)
    {
        NetWerewolfPlayer player = client.GetPlayer();

        player.Status = PlayerStatus.Dead;
        ServerInstance.Send(2, player.PlayerID); // RemoteClientDisconnected(uint)
        ServerInstance.Send(5, 0u, $"{player.Name} has fallen...");

        try
        {
            ConnectedPlayers.Remove(player);
            GameInfo.Players.Remove(player);
        }
        catch { }

        try
        {
            NetWerewolfPlayer nextHost = ConnectedPlayers.First();
            if (nextHost != null && !nextHost.IsHost)
            {
                nextHost.IsHost = true;
                nextHost.PlayerClient.Send(199, true);
                ServerInstance.Send(5, 0, $"{nextHost.Name} is now the game master.");
            }
        }
        catch { } // No players left to be host
    }
Ejemplo n.º 2
0
 public void RemovePlayerFromConnectedPlayers(string _playerID)
 {
     if (ConnectedPlayers.ContainsKey(_playerID))
     {
         ConnectedPlayers.Remove(_playerID);
         NumConnectedPlayers--;
     }
 }
Ejemplo n.º 3
0
    static void VerifyRoleHashesAndSendClientList(UdpClient sender, string playerName, string[] roleHashes)
    {
        // TODO: verify the role hashes

        if (roleHashes.Length < LoadedRoleHashes.Count)
        {
            NetBase.WriteDebug($"Received role hash list from {sender.EndPoint as IPEndPoint} \"{playerName}\" has less roles than the server, impossible to verify roles.");
            ConnectedPlayers.Remove(sender.GetPlayer());
            sender.Disconnect();
            return;
        }

        for (int i = 0; i < LoadedRoleHashes.Count; ++i)
        {
            string hash = LoadedRoleHashes[i];
            if (!roleHashes.Contains(hash))
            {
                NetBase.WriteDebug($"Client {sender.EndPoint as IPEndPoint} \"{playerName}\" missing hash {hash} corresponding to role {LoadedRoleTypes.Values.ElementAt(i).AssemblyQualifiedName}!");
                ConnectedPlayers.Remove(sender.GetPlayer());
                sender.Disconnect();
                return;
            }
            else
            {
                NetBase.WriteDebug($"{sender.EndPoint as IPEndPoint}: {hash} {LoadedRoleTypes.Values.ElementAt(i).AssemblyQualifiedName} success!");
            }
        }

        NetWerewolfPlayer playerRef = sender.GetPlayer();

        playerRef.Name             = playerName;
        playerRef.RoleListVerified = true;

        GameInfo.AddPlayerAndAssignId(playerRef);

        ServerInstance.Send(5, 0u, GenRandomJoinMessage(playerName));

        if (GameInfo.Players.Count == 1)
        {
            playerRef.IsHost = true;
            sender.Send(199, true); //SetHost(UdpClient, bool)
            ServerInstance.Send(5, 0u, $"{playerRef.Name} is now the game master.");
        }

        sender.Send(200, playerRef.PlayerID, ConnectedPlayers.Select(p => p.PlayerID).ToArray(), ConnectedPlayers.Select(p => p.Name).ToArray()); // ReceivePlayerList(uint, uint[], string[]);

        foreach (string hash in ActiveRoleHashes)
        {
            sender.Send(190, hash, false);
        }

        ServerInstance.Send(1, playerRef.PlayerID, playerRef.Name); // UpdateClientInfo(uint, string)
    }
Ejemplo n.º 4
0
            private static void Prefix(ref ZNet __instance, ref ZRpc rpc)
            {
                ZNetPeer peer = __instance.GetPeer(rpc);

                if (peer.m_characterID.IsNone() || !ZNet.instance.IsServer() || !__instance.IsConnected(peer.m_uid))
                {
                    return;
                }
                ConnectedPlayers.Remove(peer.m_uid);

                ValheimEventHandler.OnPlayerDisconnected(GetPlayerInfoFromPeer(peer));
            }
Ejemplo n.º 5
0
        /// <summary>
        /// Disconnects all players from the server
        /// </summary>
        private void DisconnectPlayer(IPlayer connectedUser)
        {
            try
            {
                Thread playerThread = ConnectedPlayers[connectedUser];
                ConnectedPlayers.Remove(connectedUser);

                connectedUser.Disconnect();
                connectedUser = null;
                playerThread.Abort();
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Error when disconnecting players. {0}", ex.Message));
            }
        }
Ejemplo n.º 6
0
    static void RemoteClientDisconnected(UdpClient client, uint pid)
    {
        if (LocalPlayer.PlayerID == pid)
        {
            CloseClientInstance();
        }

        if (ServerInstance == null)
        {
            ConnectedPlayers.Remove(ConnectedPlayers.Find(p => p.PlayerID == pid));
        }

        // TODO: GameInfo removal (Maybe make dead if alive, and then remove once spectator?)

        UpdatePlayerList.Invoke(pid, true);
    }
Ejemplo n.º 7
0
        public void OnClose(IWebSocketConnection socket)
        {
            // Remove disconnected player from manager.
            var player = ConnectedPlayers.Find(x => x.Socket == socket);

            if (player != null)
            {
                ConnectedPlayers.Remove(player);

                Logger.Log(this, "Player {0} disconnected", player.Data.Name);

                NotifyPlayerEvent(player, PlayerAction.Disconnected);

                if (PlayerDisconnected != null)
                {
                    PlayerDisconnected(this, player);
                }
            }
        }
Ejemplo n.º 8
0
        private void OnUserDisconnect(string nick)
        {
            var helpPlayer = ConnectedPlayers.First(player => player.Nick == nick);

            ConnectedPlayers.Remove(helpPlayer);

            AvailablePlayers.Remove(nick);

            if (ChatTabs.Count == 0)
            {
                return;
            }
            var chatTab = ChatTabs.First(item => item.Header == nick);

            if (chatTab != null)
            {
                ChatTabs.Remove(chatTab);
            }
        }
Ejemplo n.º 9
0
        public void Unregister(string nick)
        {
            if (ConnectedPlayers[nick].IsPlaying)
            {
                var game = AllGames.First(pair => pair.Value.MyMatches.ContainsKey(nick)).Value;

                if (game != null)
                {
                    var otherMatch = game.MyMatches.Select(pair => pair.Value).First(match => match.PlayerNick != nick);

                    ConnectedPlayers[otherMatch.PlayerNick].Client.GameCancel();
                    ConnectedPlayers[otherMatch.PlayerNick].IsPlaying = false;
                    SendMessageToAll(new TextMessage {
                        SenderNick = otherMatch.PlayerNick, Type = MessageType.PlayerFinishedMessage
                    });

                    AllGames.Remove(game.Id);
                }
            }

            ConnectedPlayers.Remove(nick);
        }
Ejemplo n.º 10
0
 private void PlayerDisconnectCallback(CSteamID id)
 {
     ConnectedPlayers.Remove(id.m_SteamID);
 }
Ejemplo n.º 11
0
 //Removes players from our list of connections
 private void removeDisconnectedUser(NetConnection conn)
 {
     ConnectedPlayers.Remove(ConnectedPlayers.Where(f => f.Connection.RemoteUniqueIdentifier == conn.RemoteUniqueIdentifier).FirstOrDefault());
 }