Ejemplo n.º 1
0
        public static bool AddProcess(BaseServer server, int listen)
        {
            if (ServerProcessMap.ContainsKey(server.GetId()))
            {
                return(true);
            }

            if (server is Shadowsocks shadowsocks)
            {
                if (ProcSS.Execute(shadowsocks, listen) is Process process)
                {
                    shadowsocks.ListenPort = listen;
                    ServerProcessMap.Add(shadowsocks.GetId(), process);
                    return(true);
                }
            }
            else if (server is V2RayVMess v2rayVMess)
            {
                if (ProcV2Ray.Start(v2rayVMess, listen))
                {
                    v2rayVMess.ListenPort = listen;
                    ServerProcessMap.Add(v2rayVMess.GetId(), null);
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 2
0
        private void Application_Exit(object sender, ExitEventArgs e)
        {
            // save settings and fix autorun status. reduce startup time
            SettingManager.WriteFile(FileConfigXml, FilePreferenceXml);
            if (SettingManager.Configuration.IsAutorun)
            {
                SystemUtil.CheckOrCreateUserStartupShortcut();
            }
            else
            {
                SystemUtil.DeleteUserStartupShortcuts();
            }

            // shutdown service
            TransmitCtrl.StopServer();
            TransmitCtrl.EnableTransmit(false);

            InterfaceCtrl.Dispose();
            ServerManager.Dispose();
            Model.IPAddress.IPInformation.Dispose();

            // not important
            ProcPrivoxy.KillRunning();
            ProcSS.KillRunning();
            ProcV2Ray.KillRunning();
        }
Ejemplo n.º 3
0
        public static void RemoveProcess(BaseServer server)
        {
            // server is null at the first time running
            if (server == null || !ServerProcessMap.ContainsKey(server.GetId()))
            {
                return;
            }

            if (server is Shadowsocks shadowsocks)
            {
                Process process = ServerProcessMap[shadowsocks.GetId()];
                ProcSS.Exit(process);

                shadowsocks.ListenPort = -1;
                ServerProcessMap.Remove(shadowsocks.GetId());
            }
            else if (server is V2RayVMess v2rayVMess)
            {
                ProcV2Ray.Stop();
                v2rayVMess.ListenPort = -1;
                ServerProcessMap.Remove(v2rayVMess.GetId());
            }
        }
Ejemplo n.º 4
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            string dirData = "data";
            string dirBin  = "binary";

            // to avoid loading WindowHome on startup fails
            StartupUri = new System.Uri("View/WindowShutdown.xaml", System.UriKind.Relative);

            // single instance
            if (SystemUtil.IsProcessExist("XTransmit"))
            {
                Shutdown();
                return;
            }

            // init directory
            Name = (string)Current.FindResource("app_name");

            //FileApplication = System.Reflection.Assembly.GetEntryAssembly().Location;
            FileApplication      = System.Reflection.Assembly.GetExecutingAssembly().Location;
            DirectoryApplication = Path.GetDirectoryName(FileApplication);

            try
            {
                Directory.CreateDirectory($@"{DirectoryApplication}\{dirBin}");
                Directory.CreateDirectory($@"{DirectoryApplication}\{dirData}");
            }
            catch
            {
                string message = (string)FindResource("app_init_fail");
                new View.DialogPrompt(Name, message).ShowDialog();

                Shutdown();
                return;
            }

            DirectoryPrivoxy     = $@"{DirectoryApplication}\{dirBin}\privoxy";
            DirectoryShadowsocks = $@"{DirectoryApplication}\{dirBin}\shadowsocks";
            DirectoryV2Ray       = $@"{DirectoryApplication}\{dirBin}\v2ray";

            FilePreferenceXml = $@"{DirectoryApplication}\{dirData}\Preference.xml";
            FileConfigXml     = $@"{DirectoryApplication}\{dirData}\Config.xml";
            FileIPAddressXml  = $@"{DirectoryApplication}\{dirData}\IPAddress.xml"; //china ip optimized
            FileUserAgentXml  = $@"{DirectoryApplication}\{dirData}\UserAgent.xml";

            FileShadowsocksXml = $@"{DirectoryApplication}\{dirData}\ServerShadowsocks.xml";
            FileV2RayXml       = $@"{DirectoryApplication}\{dirData}\ServerV2Ray.xml";

            // initialize binaries
            ProcPrivoxy.KillRunning();
            ProcSS.KillRunning();
            ProcV2Ray.KillRunning();
            if (!ProcPrivoxy.Prepare() || !ProcSS.Prepare() || !ProcV2Ray.Prepare())
            {
                string message = (string)FindResource("app_init_fail");
                new View.DialogPrompt(Name, message).ShowDialog();

                Shutdown();
                return;
            }

            // load data
            ServerManager.Initialize(FileShadowsocksXml, FileV2RayXml);
            SettingManager.LoadFileOrDefault(FileConfigXml, FilePreferenceXml);

            // initialize interface and theme
            InterfaceCtrl.Initialize();

            // initialize transmit
            if (!TransmitCtrl.StartServer())
            {
                string message = (string)FindResource("app_service_fail");
                new View.DialogPrompt(Name, message).ShowDialog();

                Shutdown();
                return;
            }
            TransmitCtrl.EnableTransmit(SettingManager.Configuration.IsTransmitEnabled);

            // done
            StartupUri = new System.Uri("View/WindowHome.xaml", System.UriKind.Relative);
            Exit      += Application_Exit;
        }