예제 #1
0
 public static void EditClient(Client editedClient, int index)
 {
     ClientsList.RemoveAt(index);
     ClientsList.Insert(index, editedClient);
     SaveClients();
 }
예제 #2
0
 public static void DeleteClient(int index)
 {
     ClientsList.RemoveAt(index);
     SaveClients();
     SetNumberOfClients();
 }
예제 #3
0
        /// <summary>
        /// Removes a client from the server
        /// </summary>
        /// <param name="client"></param>
        /// <param name="type"></param>
        public void RemoveClient(TCPServerClient client, TCPDisconnectType type = TCPDisconnectType.Disconnect)
        {
            if (Logging)
            {
                Logger.Write("REGION", "Method [RemoveClient]");
            }

            if (type == TCPDisconnectType.NoHandshake)
            {
                if (Logging)
                {
                    Logger.Write("INFO", "Client no handshake: " + client.UID);
                }
                OnNoHandshake?.Invoke(client);
            }
            else if (type == TCPDisconnectType.Disconnect)
            {
                if (Logging)
                {
                    Logger.Write("INFO", "Client disconnect: " + client.UID);
                }
                OnDisconnected?.Invoke(client);
            }
            else if (type == TCPDisconnectType.Timeout)
            {
                if (Logging)
                {
                    Logger.Write("INFO", "Client timeout: " + client.UID);
                }
                OnTimeout?.Invoke(client);
            }
            else if (type == TCPDisconnectType.Kick)
            {
                if (Logging)
                {
                    Logger.Write("INFO", "Client kick: " + client.UID);
                }
                OnKick?.Invoke(client);
            }

            lock (ClientsDict) ClientsDict.Remove(client.UID);
            lock (ClientsList) {
                for (int e = ClientsList.Count - 1; e >= 0; e--)
                {
                    if (ClientsList[e].UID == client.UID)
                    {
                        if (Logging)
                        {
                            Logger.Write("INFO", "Client found in ClientsList: " + client.UID);
                        }
                        ClientsList.RemoveAt(e);
                        break;
                    }
                }
            }

            try {
                client.Socket.Shutdown(SocketShutdown.Both);
                client.Socket.Close();
            } catch (Exception e) {
                if (Logging)
                {
                    Logger.Write("FAILED", "Socket shutdown/close", e);
                }
            }
        }