예제 #1
0
파일: Servers.cs 프로젝트: ghotm/V2RayGCon
        protected override void Cleanup()
        {
            setting.isServerTrackerOn = false;

            if (setting.ShutdownReason == VgcApis.Models.Datas.Enums.ShutdownReasons.Abort)
            {
                return;
            }

            VgcApis.Libs.Sys.FileLogger.Info("Services.Servers.Cleanup");
            VgcApis.Libs.Sys.FileLogger.Info("Services.StopTracking");

            lazyServerTrackingTimer?.Timeout();
            lazyServerTrackingTimer?.Release();

            VgcApis.Libs.Sys.FileLogger.Info("Services.SaveSettings");
            serverSaver.DoItNow();
            serverSaver.Quit();

            // let it go
            var cores = coreServList;

            VgcApis.Misc.Utils.RunInBackground(() =>
            {
                VgcApis.Libs.Sys.FileLogger.Info("Stop cores quiet begin.");
                foreach (var core in cores)
                {
                    core.GetCoreCtrl().StopCoreQuiet();
                }
                VgcApis.Libs.Sys.FileLogger.Info("Stop cores quiet done.");
            });
        }
예제 #2
0
        public void LazyGuyTest()
        {
            var str = "";

            void task()
            {
                str += ".";
            }

            var adam = new VgcApis.Libs.Tasks.LazyGuy(task, 100);

            adam.DoItNow();
            Assert.AreEqual(".", str);

            str = "";
            adam.DoItLater();
            adam.ForgetIt();
            Assert.AreEqual("", str);

#if DEBUG
            str = "";
            adam.DoItLater();
            adam.DoItLater();
            adam.DoItLater();
            Thread.Sleep(1000);
            Assert.AreEqual(".", str);

            str = "";
            adam.DoItLater();
            Thread.Sleep(300);
            Assert.AreEqual(".", str);
#endif
        }
예제 #3
0
        protected override void Cleanup()
        {
            setting.isServerTrackerOn = false;
            serverSaver.DoItNow();
            serverSaver.Quit();
            lazyServerTrackingTimer?.Release();

            AutoResetEvent sayGoodbye = new AutoResetEvent(false);

            StopAllServersThen(() => sayGoodbye.Set());
            sayGoodbye.WaitOne();
        }
예제 #4
0
        public void Cleanup()
        {
            vgcServers.OnCoreClosing -= OnCoreClosingHandler;
            ReleaseBgStatsDataUpdateTimer();

            // Calling v2ctl.exe at shutdown can cause problems.
            // So losing 5 minutes of statistics data is an acceptable loss.
            if (!IsShutdown())
            {
                VgcApis.Libs.Sys.FileLogger.Info("Statistics: save data");
                UpdateHistoryStatsDataWorker();
                bookKeeper.DoItNow();
            }

            bookKeeper.Quit();
            VgcApis.Libs.Sys.FileLogger.Info("Statistics: done!");
        }
예제 #5
0
        protected override void Cleanup()
        {
            setting.isServerTrackerOn = false;

            if (setting.ShutdownReason == VgcApis.Models.Datas.Enum.ShutdownReasons.Abort)
            {
                return;
            }

            VgcApis.Libs.Sys.FileLogger.Info("Services.Servers.Cleanup()");
            serverSaver.DoItNow();
            serverSaver.Quit();
            lazyServerTrackingTimer?.Release();

            AutoResetEvent sayGoodbye = new AutoResetEvent(false);

            StopAllServersThen(() => sayGoodbye.Set());
            sayGoodbye.WaitOne();
        }
예제 #6
0
 public void Cleanup()
 {
     bookKeeper.DoItNow();
     bookKeeper.Quit();
 }
예제 #7
0
 protected override void Cleanup()
 {
     luaAcm?.Dispose();
     bookKeeper.DoItNow();
     bookKeeper.Quit();
 }
예제 #8
0
 protected override void Cleanup()
 {
     bookKeeper.DoItNow();
     bookKeeper.Quit();
 }