示例#1
0
        private void SessionStop()
        {
            if (m_threadSession != null)
            {
                try
                {
                    m_threadSession.SetReset("CANCEL"); // New 2.11.10
                    m_threadSession.RequestStopSync();
                    m_threadSession = null;
                }
                catch (Exception e)
                {
                    Logs.Log(LogType.Fatal, e);
                }

                OnSessionStop();

                WaitMessageClear();

                Logs.Log(LogType.InfoImportant, Messages.SessionStop);
            }
        }
示例#2
0
        private void SessionStart()
        {
            try
            {
                Logs.Log(LogType.Info, Messages.SessionStart);

                Engine.Instance.WaitMessageSet(Messages.CheckingEnvironment, true);

                if (CheckEnvironment() == false)
                {
                    WaitMessageClear();
                }
                else
                {
                    // Check Driver
                    if (Engine.Instance.Storage.GetBool("advanced.skip_tun_detect") == false)
                    {
                        if (Platform.Instance.GetDriverAvailable() == "")
                        {
                            if (Platform.Instance.CanInstallDriver())
                            {
                                Engine.Instance.WaitMessageSet(Messages.OsDriverInstall, false);
                                Logs.Log(LogType.InfoImportant, Messages.OsDriverInstall);

                                Platform.Instance.InstallDriver();

                                if (Platform.Instance.GetDriverAvailable() == "")
                                    throw new Exception(Messages.OsDriverFailed);
                            }
                            else
                                throw new Exception(Messages.OsDriverCannotInstall);
                        }
                    }

                    if (m_threadSession != null)
                        throw new Exception("Daemon already running.");

                    if (ProvidersManager.NeedUpdate(true))
                    {
                        Engine.Instance.WaitMessageSet(Messages.RetrievingManifest, true);
                        Logs.Log(LogType.Info, Messages.RetrievingManifest);

                        string result = Engine.WaitManifestUpdate();

                        if (result != "")
                        {
                            if (ProvidersManager.NeedUpdate(false))
                            {
                                throw new Exception(result);
                            }
                            else
                            {
                                Logs.Log(LogType.Warning, Messages.ManifestFailedContinue);
                            }
                        }
                    }

                    OnSessionStart();

                    if (NextServer == null)
                    {
                        if (Engine.Storage.GetBool("servers.startlast"))
                            NextServer = Engine.PickServer(Engine.Storage.Get("servers.last"));
                    }

                    m_threadSession = new Threads.Session();
                }
            }
            catch (Exception e)
            {
                Logs.Log(LogType.Fatal, e);

                WaitMessageClear();

                if (Engine.Instance.Storage.GetBool("batch"))
                {
                    Engine.Instance.RequestStop();
                }
            }
        }