Exemplo n.º 1
0
        /// <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();
        }
Exemplo n.º 2
0
 public Subscription(BaseZoneProvider provider, IObserver <Zone> observer)
 {
     this._provider = provider;
     this._observer = observer;
 }