private static void Start(string[] args) { Logger.Title = "DNSAgent - Starting ..."; var version = Assembly.GetExecutingAssembly().GetName().Version; var buildTime = Utils.RetrieveLinkerTimestamp(Assembly.GetExecutingAssembly().Location); var programName = $"DNSAgent {version.Major}.{version.Minor}.{version.Build}"; Logger.Info("{0} (build at {1})\n", programName, buildTime.ToString(CultureInfo.CurrentCulture)); Logger.Info("Starting..."); var options = ReadOptions(); var rules = ReadRules(); var listenEndpoints = options.ListenOn.Split(','); var startedEvent = new CountdownEvent(listenEndpoints.Length); lock (DnsAgents) { foreach (var listenOn in listenEndpoints) { var agent = new DnsAgent(options, rules, listenOn.Trim(), AgentCommonCache); agent.Started += () => startedEvent.Signal(); DnsAgents.Add(agent); } } if (Environment.UserInteractive) { lock (DnsAgents) { if (DnsAgents.Any(agent => !agent.Start())) { PressAnyKeyToContinue(); return; } } startedEvent.Wait(); Logger.Title = "DNSAgent - Listening ..."; Logger.Info("DNSAgent has been started."); Logger.Info("Press Ctrl-R to reload configurations, Ctrl-Q to stop and quit."); Task.Run(() => { var exit = false; while (!exit) { var keyInfo = Console.ReadKey(true); if (keyInfo.Modifiers != ConsoleModifiers.Control) continue; switch (keyInfo.Key) { case ConsoleKey.R: // Reload options.cfg and rules.cfg Reload(); break; case ConsoleKey.Q: exit = true; Stop(); break; } } }); var hideMenuItem = new MenuItem(options.HideOnStart ? "Show" : "Hide"); if (options.HideOnStart) ShowWindow(GetConsoleWindow(), SwHide); hideMenuItem.Click += (sender, eventArgs) => { if (hideMenuItem.Text == "Hide") { ShowWindow(GetConsoleWindow(), SwHide); hideMenuItem.Text = "Show"; } else { ShowWindow(GetConsoleWindow(), SwShow); hideMenuItem.Text = "Hide"; } }; _contextMenu = new ContextMenu(new[] { hideMenuItem, new MenuItem("Reload", (sender, eventArgs) => Reload()), new MenuItem("Exit", (sender, eventArgs) => Stop(false)) }); _notifyIcon = new NotifyIcon { Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location), ContextMenu = _contextMenu, Text = programName, Visible = true }; _notifyIcon.MouseClick += (sender, eventArgs) => { if (eventArgs.Button == MouseButtons.Left) hideMenuItem.PerformClick(); }; Application.Run(); } else { lock (DnsAgents) { foreach (var agent in DnsAgents) { agent.Start(); } } Logger.Info("DNSAgent has been started."); } }
private void Start(string[] args) { var version = Assembly.GetExecutingAssembly().GetName().Version; var buildTime = Utils.RetrieveLinkerTimestamp(Assembly.GetExecutingAssembly().Location); var programName = $"DNSAgent {version.Major}.{version.Minor}.{version.Build}"; logger.Info($"{programName} (built on {buildTime.ToString(CultureInfo.CurrentCulture)})"); logger.Info("Starting DNSAgent..."); var rules = LoadRules(); var listenEndpoints = AppConf.ListenOn.Split(','); var startedEvent = new CountdownEvent(listenEndpoints.Length); lock (DnsAgents) { foreach (var listenOn in listenEndpoints) { var agent = new DnsAgent(AppConf, rules, listenOn.Trim(), AgentCommonCache); agent.Started += () => startedEvent.Signal(); DnsAgents.Add(agent); } } if (Environment.UserInteractive) { lock (DnsAgents) { if (DnsAgents.Any(agent => !agent.Start())) { PressAnyKeyToContinue(); return; } } startedEvent.Wait(); logger.Info("DNSAgent has been started."); Console.WriteLine("Press Ctrl-R to reload rules and clear global cache, Ctrl-Q to stop and quit."); Task.Run(() => { var exit = false; while (!exit) { var keyInfo = Console.ReadKey(true); if (keyInfo.Modifiers != ConsoleModifiers.Control) { continue; } switch (keyInfo.Key) { case ConsoleKey.R: // Reload options.cfg and rules.cfg Reload(); break; case ConsoleKey.Q: exit = true; Stop(); break; } } }); var hideMenuItem = new MenuItem(AppConf.HideOnStart ? "Show" : "Hide"); if (AppConf.HideOnStart) { ShowWindow(GetConsoleWindow(), SwHide); } hideMenuItem.Click += (sender, eventArgs) => { if (hideMenuItem.Text == "Hide") { ShowWindow(GetConsoleWindow(), SwHide); hideMenuItem.Text = "Show"; } else { ShowWindow(GetConsoleWindow(), SwShow); hideMenuItem.Text = "Hide"; } }; _contextMenu = new ContextMenu(new[] { hideMenuItem, new MenuItem("Reload", (sender, eventArgs) => Reload()), new MenuItem("Exit", (sender, eventArgs) => Stop(false)) }); _notifyIcon = new NotifyIcon { Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location), ContextMenu = _contextMenu, Text = programName, Visible = true }; _notifyIcon.MouseClick += (sender, eventArgs) => { if (eventArgs.Button == MouseButtons.Left) { hideMenuItem.PerformClick(); } }; Application.ApplicationExit += new EventHandler((sender, eventArgs) => CleanIcon()); SetConsoleCtrlHandler(new ConsoleEventDelegate((eventType) => { if (eventType == CtrlTypes.CTRL_CLOSE_EVENT) { CleanIcon(); } return(false); }), true); Application.Run(); } else { lock (DnsAgents) { foreach (var agent in DnsAgents) { agent.Start(); } } logger.Info("DNSAgent has been started."); } }
private static void Start(string[] args) { Logger.Title = "DNSAgent - Starting ..."; var version = Assembly.GetExecutingAssembly().GetName().Version; var buildTime = Utils.RetrieveLinkerTimestamp(Assembly.GetExecutingAssembly().Location); var programName = $"DNSAgent {version.Major}.{version.Minor}.{version.Build}"; Logger.Info("{0} (build at {1})\n", programName, buildTime.ToString(CultureInfo.CurrentCulture)); Logger.Info("Starting..."); var options = ReadOptions(); var rules = ReadRules(); var listenEndpoints = options.ListenOn.Split(','); var startedEvent = new CountdownEvent(listenEndpoints.Length); lock (DnsAgents) { foreach (var listenOn in listenEndpoints) { var agent = new DnsAgent(options, rules, listenOn.Trim(), AgentCommonCache); agent.Started += () => startedEvent.Signal(); DnsAgents.Add(agent); } } if (Environment.UserInteractive) { lock (DnsAgents) { if (DnsAgents.Any(agent => !agent.Start())) { PressAnyKeyToContinue(); return; } } startedEvent.Wait(); Logger.Title = "DNSAgent - Listening ..."; Logger.Info("DNSAgent has been started."); Logger.Info("Press Ctrl-R to reload configurations, Ctrl-Q to stop and quit."); Task.Run(() => { var exit = false; while (!exit) { var keyInfo = Console.ReadKey(true); if (keyInfo.Modifiers != ConsoleModifiers.Control) { continue; } switch (keyInfo.Key) { case ConsoleKey.R: // Reload options.cfg and rules.cfg Reload(); break; case ConsoleKey.Q: exit = true; Stop(); break; } } }); var hideMenuItem = new MenuItem(options.HideOnStart ? "Show" : "Hide"); if (options.HideOnStart) { ShowWindow(GetConsoleWindow(), SwHide); } hideMenuItem.Click += (sender, eventArgs) => { if (hideMenuItem.Text == "Hide") { ShowWindow(GetConsoleWindow(), SwHide); hideMenuItem.Text = "Show"; } else { ShowWindow(GetConsoleWindow(), SwShow); hideMenuItem.Text = "Hide"; } }; _contextMenu = new ContextMenu(new[] { hideMenuItem, new MenuItem("Reload", (sender, eventArgs) => Reload()), new MenuItem("Exit", (sender, eventArgs) => Stop(false)) }); _notifyIcon = new NotifyIcon { Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location), ContextMenu = _contextMenu, Text = programName, Visible = true }; _notifyIcon.MouseClick += (sender, eventArgs) => { if (eventArgs.Button == MouseButtons.Left) { hideMenuItem.PerformClick(); } }; Application.Run(); } else { lock (DnsAgents) { foreach (var agent in DnsAgents) { agent.Start(); } } Logger.Info("DNSAgent has been started."); } }
private static void Start(string[] args) { Logger.Title = "DNSAgent - Starting ..."; var version = Assembly.GetExecutingAssembly().GetName().Version; var buildTime = Utils.RetrieveLinkerTimestamp(Assembly.GetExecutingAssembly().Location); var programName = string.Format("DNSAgent {0}.{1}.{2}", version.Major, version.Minor, version.Build); Logger.Info("{0} (build at {1})\n", programName, buildTime.ToString(CultureInfo.CurrentCulture)); Logger.Info("Starting..."); _dnsAgent = new DnsAgent(ReadOptions(), ReadRules()); if (Environment.UserInteractive) { var startedWaitHandler = new ManualResetEvent(false); _dnsAgent.Started += () => { startedWaitHandler.Set(); }; if (!_dnsAgent.Start()) { PressAnyKeyToContinue(); return; } startedWaitHandler.WaitOne(); Logger.Info("Press Ctrl-R to reload configurations, Ctrl-Q to stop and quit."); Task.Run(() => { var exit = false; while (!exit) { var keyInfo = Console.ReadKey(true); if (keyInfo.Modifiers != ConsoleModifiers.Control) continue; switch (keyInfo.Key) { case ConsoleKey.R: // Reload options.cfg and rules.cfg Reload(); break; case ConsoleKey.Q: exit = true; Stop(); break; } } }); var hideOnStart = _dnsAgent.Options.HideOnStart; var hideMenuItem = new MenuItem(hideOnStart ? "Show" : "Hide"); if (hideOnStart) ShowWindow(GetConsoleWindow(), SwHide); hideMenuItem.Click += (sender, eventArgs) => { if (hideMenuItem.Text == "Hide") { ShowWindow(GetConsoleWindow(), SwHide); hideMenuItem.Text = "Show"; } else { ShowWindow(GetConsoleWindow(), SwShow); hideMenuItem.Text = "Hide"; } }; _contextMenu = new ContextMenu(new[] { hideMenuItem, new MenuItem("Reload", (sender, eventArgs) => Reload()), new MenuItem("Exit", (sender, eventArgs) => Stop(false)) }); _notifyIcon = new NotifyIcon { Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location), ContextMenu = _contextMenu, Text = programName, Visible = true }; _notifyIcon.MouseClick += (sender, eventArgs) => { if (eventArgs.Button == MouseButtons.Left) hideMenuItem.PerformClick(); }; Application.Run(); } else _dnsAgent.Start(); }