private void setupRelays() { _logger.LogInformation("Setting up attendance relays..."); var relayConfigs = _configuration.GetSection("Relays").GetChildren(); foreach (var relayConfig in relayConfigs) { var fromChatServiceName = relayConfig.GetValue <string>("FromChatServiceName"); var fromChannelName = relayConfig.GetValue <string>("FromChannelName"); var toChatServiceName = relayConfig.GetValue <string>("ToChatServiceName"); var toChannelName = relayConfig.GetValue <string>("ToChannelName"); var chatPrefix = relayConfig.GetValue <string>("ChatPrefix"); var attendanceStarted = relayConfig.GetValue <string>("AttendanceStarted"); var attendancePrefix = relayConfig.GetValue <string>("AttendancePrefix"); var attendanceEndedPrefix = relayConfig.GetValue <string>("AttendanceEndedPrefix"); var relayChat = relayConfig.GetValue <bool> ("RelayChat"); var relayAttendance = relayConfig.GetValue <bool> ("RelayAttendance"); var fromChatService = _chatServiceConnections .SingleOrDefault(c => c.Name == fromChatServiceName); var toChatService = _chatServiceConnections .SingleOrDefault(c => c.Name == toChatServiceName); if (fromChatService == null || toChatService == null) { _logger.LogError( "Could not find chat services. Check to make sure {from} and {to} exist.", fromChatServiceName, toChatServiceName); } else { _relays.Add(new RelayChannel() { IsActive = false, FromChatService = fromChatService, FromChannelName = fromChannelName, ToChatService = toChatService, ToChannelName = toChannelName, ChatPrefix = chatPrefix, AttendanceStarted = attendanceStarted, AttendancePrefix = attendancePrefix, AttendanceEndedPrefix = attendanceEndedPrefix, RelayChat = relayChat, RelayAttendance = relayAttendance, AttendanceSessionStarted = DateTimeOffset.MinValue, AttendanceSessionMessageId = "", CurrentAttendanceSessionUsers = new List <UserModel>(), TotalAttendanceSessionUsers = new List <UserModel>(), }); _logger.LogInformation( "Added new [chat: {chat}, attendance: {attendance}] relay: {fromService}/{fromChannel} -> {toService}/{toChannel}", relayChat, relayAttendance, fromChatServiceName, fromChannelName, toChatServiceName, toChannelName); } } // Subscribe to connected event var fromChatServices = _relays.Select(r => r.FromChatService).Distinct(); var toChatServices = _relays.Select(r => r.ToChatService).Distinct(); var allChatServices = fromChatServices.Concat(toChatServices).Distinct(); // Wait for all services to connect so we can extract channel and user info foreach (var chatService in allChatServices) { chatService.Connected += chatServiceConnected; } }
/// <inheritdoc /> IPeriodicLoggingConfiguration ICalculationsConfiguration.Wal() => ConfigurationSection .GetSection("Wal") .To(subSection => new PeriodicLoggingConfiguration(subSection));
/// <inheritdoc /> IPeriodicLoggingConfiguration ICalculationsConfiguration.Autovacuum() => ConfigurationSection .GetSection("Autovacuum") .To(subSection => new PeriodicLoggingConfiguration(subSection));
/// <inheritdoc /> IGeneralConfiguration ICalculationsConfiguration.General() => ConfigurationSection .GetSection("General") .To(subSection => new GeneralConfiguration(subSection));
/// <inheritdoc /> ConnectionString IDatabaseAccessConfiguration.ConnectionString() => ConfigurationSection .GetSection("ConnectionString") .To(stringSection => new ConnectionString(stringSection.Value));
/// <inheritdoc /> Uri IControlAppConfiguration.HostApiUri() => ConfigurationSection .GetSection("HostApiUri") .Value .To(uriString => new Uri(uriString));