Esempio n. 1
0
        public async Task Start()
        {
            _logger.LogInformation("Starting Theorem...");

            // Load configuration
            _logger.LogInformation("Loading configuration data...");
            Configuration = new ConfigurationBuilder()
                            .AddJsonFile("appsettings.default.json")
                            .AddJsonFile("appsettings.json", optional: true)
                            .AddEnvironmentVariables()
                            .Build();

            // TODO: Allow configuring logger from configuration
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                .SetMinimumLevel(LogLevel.Debug)
                .AddConsole();
            });

            // Register dependencies
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterInstance(Configuration).As <IConfigurationRoot>();

            // Logging
            containerBuilder
            .RegisterInstance(loggerFactory)
            .As <ILoggerFactory>()
            .SingleInstance();
            containerBuilder
            .RegisterGeneric(typeof(Logger <>))
            .As(typeof(ILogger <>))
            .SingleInstance();

            // Middleware
            registerMiddleware(containerBuilder);

            // Chat service providers
            registerChatServiceConnections(containerBuilder);

            // Register MiddlewarePipeline
            registerMiddlewarePipeline(containerBuilder);

            // Construct IoC container
            _iocContainer = containerBuilder.Build();
            using (var scope = _iocContainer.BeginLifetimeScope())
            {
                // Connect to chat providers!
                var chatServices = scope.Resolve <IEnumerable <IChatServiceConnection> >();
                await Task.WhenAll(
                    chatServices.Select(c =>
                                        TaskUtilities.ExpontentialRetryAsync(
                                            c.StartAsync,
                                            (e, r) => onChatServiceConnectionInterruption(c, e, r)))
                    );
            }
        }
Esempio n. 2
0
        public EzFtlStreamAnnouncementMiddleware(ILogger <EzFtlStreamAnnouncementMiddleware> logger,
                                                 ConfigurationSection configuration,
                                                 IEnumerable <IChatServiceConnection> chatServiceConnections)
        {
            _logger                 = logger;
            _configuration          = configuration;
            _chatServiceConnections = chatServiceConnections;

            _logger.LogInformation("Starting EzFtlStreamAnnouncement Middleware...");
            subscribeToChatServiceConnectedEvents();
            TaskUtilities
            .ExpontentialRetryAsync(startEzFtlConnection, onConnectionInterrupted)
            .FireAndForget();
        }