Пример #1
0
        static void Main(string[] args)
        {
            int refreshTimeInSeconds = 10;
            var logRefreshString = HttpGet(LogRefreshUrl);

            if (!Int32.TryParse(logRefreshString, out refreshTimeInSeconds))
            {
                Logging.WriteLog("Invalid refresh time. Setting log refresh to 10 seconds. Server response was {0}.", logRefreshString);
            }
            else
            {
                Logging.WriteLog("Current Refresh Time {0}",refreshTimeInSeconds);
            }

            bool shutdown = false;

            double lastTimeStampRead = 0;

            currentPlayers = new Dictionary<string,CodPlayer>();
            rcon = new RCON(rconHost, rconPort, rconPw);

            var messageEvent = new System.Threading.AutoResetEvent(false);

            Thread messageThread = new Thread(new ThreadStart(() =>
            {
                while (!shutdown)
                {
                    Logging.WriteLog("Sending server messages");

                    rcon.Say(Strings.WelcomeMessage);

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 15)) && shutdown)
                    {
                        return;
                    }
                    rcon.Say(Strings.FriendInviteMessage);

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 15)) && shutdown)
                    {
                        return;
                    }
                    rcon.Say(Strings.ServerProtection);

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 15)) && shutdown)
                    {
                        return;
                    }

                    //send the server rules
                    SendRulesToPlayer(null);

                    //rcon.Say(String.Format(Strings.RulesTrigger, CodServerLogLine.RulesTrigger));
                    Logging.WriteLog("finished sending server messages");

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 60)) && shutdown)
                    {
                        return;
                    }
                }
            }));

            var logEvent = new AutoResetEvent(false);

            Thread logParserThread = new Thread(new ThreadStart(() =>
            {
                while (!shutdown)
                {
                    Logging.WriteLog("Getting Log data...");

                    var logSnippet = HttpGet(XDSniperLogUrl,true); //should be 2MB at most. add range header

                    Logging.WriteLog("Log Data collected...");

                    var lines = new List<string>(logSnippet.Split('\n'));

                    Logging.WriteLog("Recieved {0} log lines.", lines.Count);

                    var parsedLines = FindAllValidLogLines(lines, ref lastTimeStampRead);

                    if (parsedLines != null)
                    {
                        //now go through the stack, and take appropriate action...
                        HandleCurrentLogs(parsedLines, ref lastTimeStampRead);
                    }

                    if (logEvent.WaitOne(new TimeSpan(0, 0, refreshTimeInSeconds)) && shutdown)
                    {
                        // if we're shutting down, or already in this loop, just return.
                        return;
                    }
                }
            }));

            logParserThread.Start();
            messageThread.Start();

            System.Threading.AutoResetEvent wait = new System.Threading.AutoResetEvent(false);

            Console.CancelKeyPress += new ConsoleCancelEventHandler((o,e) => {
                Logging.WriteLog("Shutting down");
                shutdown = true;
                messageEvent.Set();
                logEvent.Set();
                var w = new System.Threading.AutoResetEvent(false);

                //wait 15 seconds for things to shutdown
                w.WaitOne(new TimeSpan(0, 0, 5));

                wait.Set();
            });

            wait.WaitOne();

            //meh assyemtric behavior... :(
            ConnectionPool.DrainPool();
        }
Пример #2
0
        static void Main(string[] args)
        {
            int refreshTimeInSeconds = 10;
            var logRefreshString     = HttpGet(LogRefreshUrl);

            if (!Int32.TryParse(logRefreshString, out refreshTimeInSeconds))
            {
                Logging.WriteLog("Invalid refresh time. Setting log refresh to 10 seconds. Server response was {0}.", logRefreshString);
            }
            else
            {
                Logging.WriteLog("Current Refresh Time {0}", refreshTimeInSeconds);
            }

            bool shutdown = false;

            double lastTimeStampRead = 0;

            currentPlayers = new Dictionary <string, CodPlayer>();
            rcon           = new RCON(rconHost, rconPort, rconPw);

            var messageEvent = new System.Threading.AutoResetEvent(false);

            Thread messageThread = new Thread(new ThreadStart(() =>
            {
                while (!shutdown)
                {
                    Logging.WriteLog("Sending server messages");

                    rcon.Say(Strings.WelcomeMessage);

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 15)) && shutdown)
                    {
                        return;
                    }
                    rcon.Say(Strings.FriendInviteMessage);

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 15)) && shutdown)
                    {
                        return;
                    }
                    rcon.Say(Strings.ServerProtection);

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 15)) && shutdown)
                    {
                        return;
                    }

                    //send the server rules
                    SendRulesToPlayer(null);

                    //rcon.Say(String.Format(Strings.RulesTrigger, CodServerLogLine.RulesTrigger));
                    Logging.WriteLog("finished sending server messages");

                    if (messageEvent.WaitOne(new TimeSpan(0, 0, 60)) && shutdown)
                    {
                        return;
                    }
                }
            }));

            var logEvent = new AutoResetEvent(false);

            Thread logParserThread = new Thread(new ThreadStart(() =>
            {
                while (!shutdown)
                {
                    Logging.WriteLog("Getting Log data...");

                    var logSnippet = HttpGet(XDSniperLogUrl, true); //should be 2MB at most. add range header

                    Logging.WriteLog("Log Data collected...");

                    var lines = new List <string>(logSnippet.Split('\n'));

                    Logging.WriteLog("Recieved {0} log lines.", lines.Count);

                    var parsedLines = FindAllValidLogLines(lines, ref lastTimeStampRead);

                    if (parsedLines != null)
                    {
                        //now go through the stack, and take appropriate action...
                        HandleCurrentLogs(parsedLines, ref lastTimeStampRead);
                    }

                    if (logEvent.WaitOne(new TimeSpan(0, 0, refreshTimeInSeconds)) && shutdown)
                    {
                        // if we're shutting down, or already in this loop, just return.
                        return;
                    }
                }
            }));

            logParserThread.Start();
            messageThread.Start();

            System.Threading.AutoResetEvent wait = new System.Threading.AutoResetEvent(false);


            Console.CancelKeyPress += new ConsoleCancelEventHandler((o, e) => {
                Logging.WriteLog("Shutting down");
                shutdown = true;
                messageEvent.Set();
                logEvent.Set();
                var w = new System.Threading.AutoResetEvent(false);

                //wait 15 seconds for things to shutdown
                w.WaitOne(new TimeSpan(0, 0, 5));

                wait.Set();
            });

            wait.WaitOne();

            //meh assyemtric behavior... :(
            ConnectionPool.DrainPool();
        }