private bool Unban(string[] args)
 {
     if (UserSupplied(args))
     {
         string user = rebuildString(args);
         ZNet   zNet = ZNet.instance;
         print("Unbanning user: "******"m_bannedList").GetValue(zNet);
         bannedPlayers.Remove(user);
         AccessTools.Field(typeof(ZNet), "m_bannedList").SetValue(zNet, bannedPlayers);
         return(true);
     }
     return(false);
 }
 private bool UnPermit(string[] args)
 {
     if (UserSupplied(args))
     {
         string user = rebuildString(args);
         ZNet   zNet = ZNet.instance;
         print("Removing user from permited user list: " + user);
         SyncedList permittedPlayers = (SyncedList)AccessTools.Field(typeof(ZNet), "m_permittedList").GetValue(zNet);
         permittedPlayers.Remove(user);
         AccessTools.Field(typeof(ZNet), "m_permittedList").SetValue(zNet, permittedPlayers);
         return(true);
     }
     return(false);
 }
 private bool RemoveAdmin(string[] args)
 {
     if (UserSupplied(args))
     {
         string   user             = rebuildString(args);
         ZNet     zNet             = ZNet.instance;
         ZNetPeer peerByPlayerName = zNet.GetPeerByPlayerName(user);
         if (peerByPlayerName != null)
         {
             user = peerByPlayerName.m_socket.GetHostName();
         }
         print("Removing player from the admin list: " + user);
         SyncedList adminList = (SyncedList)AccessTools.Field(typeof(ZNet), "m_adminList").GetValue(zNet);
         adminList.Remove(user);
         AccessTools.Field(typeof(ZNet), "m_adminList").SetValue(zNet, adminList);
         return(true);
     }
     return(false);
 }
예제 #4
0
        protected virtual void ServerMainTask()
        {
            if (Listener == null)
            {
                return;
            }
            WebServerLog.Add(ServerLogType.Information, GetType(), "StartUp", "Server successfully started");
            var watch = new Stopwatch();

            while (ServerExecution)
            {
                watch.Restart();
                //request pending connections
                int step = 0;
                while (step < 10)
                {
                    if (!Listener.Pending())
                    {
                        break;
                    }
                    step++;
                    ClientConnected(Listener.AcceptTcpClient());
                }
                //request keep alive connections
                for (int i = 0; i < KeepAliveConnections.Count; ++i)
                {
                    HttpConnection kas;
                    try { kas = KeepAliveConnections[i]; }
                    catch { continue; }
                    if (kas == null)
                    {
                        continue;
                    }

                    if ((kas.NetworkClient != null && !kas.NetworkClient.Connected) ||
                        (kas.LastWorkTime != -1 &&
                         kas.LastWorkTime + Settings.ConnectionTimeout < Environment.TickCount
                        )
                        )
                    {
                        kas.NetworkClient?.Close();
                        kas.NetworkStream?.Dispose();
                        AllConnections.Remove(kas);
                        KeepAliveConnections.Remove(kas);
                        --i;
                        continue;
                    }

                    if (kas.NetworkClient != null && kas.NetworkClient.Available > 0 &&
                        kas.LastWorkTime != -1
                        )
                    {
                        _ = Task.Run(() => SafeClientStartListen(kas));
                    }
                }

                //Warten
                if (Listener.Pending())
                {
                    continue;
                }
                var delay = Settings.ConnectionDelay;
                if (delay > TimeSpan.Zero)
                {
                    var time = delay - watch.Elapsed;
                    if (time <= TimeSpan.Zero)
                    {
                        time = delay;
                    }
                    Thread.Sleep(time);
                }
            }
            watch.Stop();
            Listener.Stop();
            for (int i = 0; i < AllConnections.Count; ++i)
            {
                AllConnections[i].NetworkClient?.Close();
            }
            AllConnections.Clear();
            KeepAliveConnections.Clear();
            WebServerLog.Add(ServerLogType.Information, GetType(), "StartUp", "Server successfully stopped");
        }