Example #1
0
        public HL7ListenerService(IOptions <Hl7ListenerSettings> settings,
                                  IHL7Acknowledger hl7Acknowledger, ISqliteQueueManager sqliteQueueManager, ILoggerFactory logFactory)
        {
            _settings           = settings?.Value ?? throw new ArgumentNullException(nameof(settings));
            _sqliteQueueManager = sqliteQueueManager;
            _hl7Acknowledger    = hl7Acknowledger;
            _logger             = logFactory.CreateLogger(_settings.Name);

            var serverIp = IPAddress.Any;

            if (!string.IsNullOrEmpty(_settings.IpAddress))
            {
                serverIp = IPAddress.Parse(_settings.IpAddress);
            }
            _listener = new TcpListener(new IPEndPoint(serverIp, _settings.Port));
        }
Example #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.AddTransient <IHL7Acknowledger, HL7Acknowledger>();

            // Setup the persistent queue first.
            services.Configure <SqliteQueueManagerSettings>(options => Configuration.GetSection("Queue").Bind(options));
            services.AddSingleton <ISqliteQueueManager, SqliteQueueManager>();

            // Setup the background task for queue sanity keeper
            services.Configure <PersistentQueueMonitoringSettings>(options => Configuration.GetSection("QueueMonitoring").Bind(options));
            services.AddSingleton <IPersistentQueueMonitoringTask, PersistentQueueMonitoringTask>();
            services.AddSingleton <IHostedService>(x => x.GetService <IPersistentQueueMonitoringTask>() as IHostedService);

            // Setup the consumer of the queue
            services.Configure <HL7HandlerSettings>(options => Configuration.GetSection("Handling").Bind(options));
            services.AddSingleton <IHL7HandlerManager, HL7HandlerManager>();
            services.AddSingleton <IHostedService>(x => x.GetService <IHL7HandlerManager>() as IHostedService);

            // Now let's spin up all the listeners, they are all producers to the queue
            var listenerConfigurations = Configuration.GetSection("Listeners");

            foreach (var configuration in listenerConfigurations.GetChildren())
            {
                var listenerSettings = new Hl7ListenerSettings();
                configuration.Bind(listenerSettings);
                services.AddTransient <IHostedService>((factory) =>
                {
                    return(new HL7ListenerService(Options.Create <Hl7ListenerSettings>(listenerSettings),
                                                  factory.GetRequiredService <IHL7Acknowledger>(),
                                                  factory.GetRequiredService <ISqliteQueueManager>(),
                                                  factory.GetRequiredService <ILoggerFactory>()));
                });
            }

            var container = new ContainerBuilder();

            container.Populate(services);
            return(new AutofacServiceProvider(container.Build()));
        }