tgstation-server  4.4.0
The /tg/station 13 server suite
ProviderFactory.cs
Go to the documentation of this file.
1 using Microsoft.Extensions.Logging;
2 using System;
3 using System.Globalization;
7 
8 namespace Tgstation.Server.Host.Components.Chat.Providers
9 {
12  {
17 
22 
26  readonly ILoggerFactory loggerFactory;
27 
35  IAssemblyInformationProvider assemblyInformationProvider,
36  IAsyncDelayer asyncDelayer,
37  ILoggerFactory loggerFactory)
38  {
39  this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
40  this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
41  this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
42  }
43 
45  public IProvider CreateProvider(Api.Models.Internal.ChatBot settings)
46  {
47  if (settings == null)
48  throw new ArgumentNullException(nameof(settings));
49  var builder = settings.CreateConnectionStringBuilder();
50  if (builder == null || !builder.Valid)
51  throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!");
52  switch (settings.Provider)
53  {
54  case ChatProvider.Irc:
55  var ircBuilder = (IrcConnectionStringBuilder)builder;
56  return new IrcProvider(assemblyInformationProvider, asyncDelayer, loggerFactory.CreateLogger<IrcProvider>(), ircBuilder.Address, ircBuilder.Port.Value, ircBuilder.Nickname, ircBuilder.Password, ircBuilder.PasswordType, settings.ReconnectionInterval.Value, ircBuilder.UseSsl.Value);
57  case ChatProvider.Discord:
58  var discordBuilder = (DiscordConnectionStringBuilder)builder;
59  return new DiscordProvider(
60  assemblyInformationProvider,
61  loggerFactory.CreateLogger<DiscordProvider>(),
62  discordBuilder.BotToken,
63  settings.ReconnectionInterval.Value);
64  default:
65  throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid ChatProvider: {0}", settings.Provider));
66  }
67  }
68  }
69 }
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the ProviderFactory
ChatConnectionStringBuilder for ChatProvider.Discord
For interacting with a chat service
Definition: IProvider.cs:12
ProviderFactory(IAssemblyInformationProvider assemblyInformationProvider, IAsyncDelayer asyncDelayer, ILoggerFactory loggerFactory)
Construct a ProviderFactory
IProvider CreateProvider(Api.Models.Internal.ChatBot settings)
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the ProviderFactory
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the ProviderFactory
ChatConnectionStringBuilder for ChatProvider.Irc
ChatProvider
Represents a chat service provider
Definition: ChatProvider.cs:6