/// <summary> /// DNS Server entrypoint /// </summary> /// <param name="configFile">Fully qualified configuration filename</param> /// <param name="cts">Cancellation Token Source</param> public static void Run(string configFile, CancellationToken ct) { if (!File.Exists(configFile)) { throw new FileNotFoundException(null, configFile); } IConfiguration configuration = new ConfigurationBuilder() .AddJsonFile(configFile, true, true) .Build(); var appConfig = configuration.Get <Config.AppConfig>(); container.Bind <ZoneProvider.BaseZoneProvider>().To(ByName(appConfig.Server.Zone.Provider)); var zoneProviderConfig = configuration.GetSection("zoneprovider"); _zoneProvider = container.Get <ZoneProvider.BaseZoneProvider>(); _zoneProvider.Initialize(zoneProviderConfig, appConfig.Server.Zone.Name); _zoneResolver = new SmartZoneResolver(); _zoneResolver.SubscribeTo(_zoneProvider); _dnsServer = new DnsServer(appConfig.Server.DnsListener.Port); _httpServer = new HttpServer(); _dnsServer.Initialize(_zoneResolver); _zoneProvider.Start(ct); _dnsServer.Start(ct); if (appConfig.Server.WebServer.Enabled) { _httpServer.Initialize(string.Format("http://+:{0}/", appConfig.Server.WebServer.Port)); _httpServer.OnProcessRequest += _httpServer_OnProcessRequest; _httpServer.OnHealthProbe += _httpServer_OnHealthProbe; _httpServer.Start(ct); } ct.WaitHandle.WaitOne(); }
public Subscription(BaseZoneProvider provider, IObserver <Zone> observer) { this._provider = provider; this._observer = observer; }