예제 #1
0
파일: Program.cs 프로젝트: Rohansi/RohBot
        static void Main()
        {
            Logger.Info("Process starting");

            /*DebugLog.AddListener((a, b) =>
            {
                Console.WriteLine("{0} {1} {2}", DateTime.Now, a, b);
            });

            DebugLog.Enabled = true;*/

            AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
            {
                Logger.Fatal("Unhandled exception: " + e.ExceptionObject);
                Logger.Info("Process exiting");
            };

            ThreadPool.SetMaxThreads(10, 1);

            LoadSettings();

            if (Settings == null)
            {
                Logger.Fatal("Failed to load settings!");
                return;
            }

            SessionManager = new SessionManager();
            RoomManager = new RoomManager();
            DelayManager = new DelayManager();
            NotificationManager = new NotificationManager();
            Steam = new Steam();

            RoomManager.Update();
            SessionManager.Start();

            _taskScheduler = new TaskScheduler();
            _taskScheduler.Add(TimeSpan.FromSeconds(0.5), () =>
            {
                SessionManager.Update();
                RoomManager.Update();
                DelayManager.Update();
                Steam.Update();
            });

            //_taskScheduler.Add(TimeSpan.FromSeconds(5), () => SessionManager.Ping());

            //_taskScheduler.Add(TimeSpan.FromMinutes(1), GC.Collect);

            _taskScheduler.Add(TimeSpan.FromHours(1), () =>
            {
                var t = Util.GetTimestamp(DateTime.UtcNow - TimeSpan.FromDays(30));
                LoginToken.RemoveOlderThan(t);
            });

            _taskScheduler.Add(TimeSpan.FromSeconds(10), () =>
            {
                if (!NotificationsDirty)
                    return;

                NotificationManager.InvalidateNotificationCache();
                NotificationsDirty = false;
            });

            _taskScheduler.Add(TimeSpan.FromMinutes(2.5), () =>
            {
                if (Steam.Status == Steam.ConnectionStatus.Connected)
                {
                    Steam.Bot.PersonaState = EPersonaState.Online;
                }
            });

            while (true)
            {
                _taskScheduler.Run();
                Thread.Sleep(10);
            }
        }