From a99b5ff07fdcd925a2e06cb5ac61b24646a1acb4 Mon Sep 17 00:00:00 2001 From: "tgstation-server-ci[bot]" <161980869+tgstation-server-ci[bot]@users.noreply.github.com> Date: Sat, 5 Oct 2024 03:39:21 +0000 Subject: [PATCH] Deploy code docs to GitHub Pages for workflow run 3372 Commit: e82b1a6f3982383c51c63752ecfbffc54be4b046 --- _administration_controller_8cs_source.html | 2 +- _application_8cs_source.html | 6 +- _file_logging_configuration_8cs_source.html | 73 +- ..._connection_string_builder_8cs_source.html | 83 +- _irc_password_type_8cs.html | 1 + _irc_password_type_8cs_source.html | 7 +- _irc_provider_8cs_source.html | 1285 +++++++-------- _provider_factory_8cs_source.html | 91 +- changelog.yml | 21 + ...1_1_api_1_1_models_1_1_engine_version.html | 4 +- ...els_1_1_irc_connection_string_builder.html | 85 +- ..._1_providers_1_1_irc_provider-members.html | 82 +- ...1_chat_1_1_providers_1_1_irc_provider.html | 1381 ++++++++++------- ...roviders_1_1_irc_provider__coll__graph.map | 82 +- ...roviders_1_1_irc_provider__coll__graph.md5 | 2 +- ...roviders_1_1_irc_provider__coll__graph.png | Bin 134538 -> 159089 bytes ...6341a13aed727a56c3dfe047f8b22d_icgraph.map | 5 + ...6341a13aed727a56c3dfe047f8b22d_icgraph.md5 | 1 + ...6341a13aed727a56c3dfe047f8b22d_icgraph.png | Bin 0 -> 10672 bytes ...219ee47d3cdc106c66c7279c5d1473c_cgraph.map | 5 + ...219ee47d3cdc106c66c7279c5d1473c_cgraph.md5 | 1 + ...219ee47d3cdc106c66c7279c5d1473c_cgraph.png | Bin 0 -> 10717 bytes ...09ea88022cc7f1ed175e5f863e79c9_icgraph.map | 5 - ...09ea88022cc7f1ed175e5f863e79c9_icgraph.md5 | 1 - ...09ea88022cc7f1ed175e5f863e79c9_icgraph.png | Bin 10774 -> 0 bytes ...b2c312d6d9703edbeb60825cfb1602_icgraph.map | 5 - ...b2c312d6d9703edbeb60825cfb1602_icgraph.md5 | 1 - ...b2c312d6d9703edbeb60825cfb1602_icgraph.png | Bin 11175 -> 0 bytes ...b8ee20f302c136f9a254c34315950a4_cgraph.map | 7 - ...b8ee20f302c136f9a254c34315950a4_cgraph.md5 | 1 - ...b8ee20f302c136f9a254c34315950a4_cgraph.png | Bin 17995 -> 0 bytes ...s_1_1_chat_1_1_providers_1_1_provider.html | 4 +- ...roviders_1_1_provider_factory-members.html | 3 +- ...at_1_1_providers_1_1_provider_factory.html | 164 +- ...ders_1_1_provider_factory__coll__graph.map | 39 +- ...ders_1_1_provider_factory__coll__graph.md5 | 2 +- ...ders_1_1_provider_factory__coll__graph.png | Bin 100642 -> 110671 bytes ...nents_1_1_interop_1_1_message_content.html | 2 +- ..._1_file_logging_configuration-members.html | 3 +- ...ration_1_1_file_logging_configuration.html | 82 +- ...rollers_1_1_administration_controller.html | 6 +- ...ver_1_1_host_1_1_core_1_1_application.html | 8 +- ..._host_1_1_i_o_1_1_default_i_o_manager.html | 2 +- ..._1_1_host_1_1_utils_1_1_async_delayer.html | 2 +- functions.html | 4 +- functions_c.html | 2 +- functions_d.html | 1 - functions_func_i.html | 3 +- functions_func_l.html | 2 +- functions_func_p.html | 2 +- functions_g.html | 4 +- functions_h.html | 4 +- functions_i.html | 5 +- functions_l.html | 3 +- functions_p.html | 7 +- functions_prop_p.html | 1 + functions_r.html | 3 +- functions_s.html | 1 + functions_vars.html | 1 + functions_vars_c.html | 2 +- functions_vars_d.html | 1 - functions_vars_l.html | 1 + functions_vars_s.html | 1 + index.html | 1 + ...er_1_1_host_1_1_i_o_1_1_i_i_o_manager.html | 2 +- ...m_1_1_i_assembly_information_provider.html | 4 +- ...station_1_1_server_1_1_api_1_1_models.html | 8 +- search/all_10.js | 43 +- search/all_11.js | 71 +- search/all_13.js | 10 +- search/all_14.js | 267 ++-- search/all_15.js | 6 +- search/all_16.js | 6 +- search/all_18.js | 4 +- search/all_2.js | 113 +- search/all_3.js | 2 +- search/all_4.js | 8 +- search/all_5.js | 255 ++- search/all_6.js | 2 +- search/all_7.js | 6 +- search/all_8.js | 4 +- search/all_9.js | 4 +- search/all_a.js | 395 ++--- search/all_d.js | 45 +- search/enumvalues_e.js | 3 +- search/functions_8.js | 43 +- search/functions_b.js | 4 +- search/functions_f.js | 2 +- search/properties_f.js | 23 +- search/variables_0.js | 19 +- search/variables_11.js | 2 +- search/variables_12.js | 55 +- search/variables_2.js | 2 +- search/variables_3.js | 47 +- search/variables_b.js | 13 +- 95 files changed, 2731 insertions(+), 2340 deletions(-) create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.map create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.md5 create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.png create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.map create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.md5 create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.png delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.map delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.md5 delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.png delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.map delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.md5 delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.png delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.map delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.md5 delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.png diff --git a/_administration_controller_8cs_source.html b/_administration_controller_8cs_source.html index b662a723d5..adfd9c8216 100644 --- a/_administration_controller_8cs_source.html +++ b/_administration_controller_8cs_source.html @@ -461,7 +461,7 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Api.Routes.Administration
const string Administration
The server administration controller.
Definition Routes.cs:28
Tgstation.Server.Api.Routes.Logs
const string Logs
The endpoint to download server logs.
Definition Routes.cs:33
Tgstation.Server.Host.Configuration.FileLoggingConfiguration
File logging configuration options.
Definition FileLoggingConfiguration.cs:16
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory
string GetFullLogDirectory(IIOManager ioManager, IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier)
Gets the evaluated log Directory.
Definition FileLoggingConfiguration.cs:51
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory
string GetFullLogDirectory(IIOManager ioManager, IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier)
Gets the evaluated log Directory.
Definition FileLoggingConfiguration.cs:56
Tgstation.Server.Host.Controllers.AdministrationController
ApiController for TGS administration purposes.
Definition AdministrationController.cs:40
Tgstation.Server.Host.Controllers.AdministrationController.ListLogs
ValueTask< IActionResult > ListLogs([FromQuery] int? page, [FromQuery] int? pageSize, CancellationToken cancellationToken)
List LogFileResponses present.
Tgstation.Server.Host.Controllers.AdministrationController.fileLoggingConfiguration
readonly FileLoggingConfiguration fileLoggingConfiguration
The FileLoggingConfiguration for the AdministrationController.
Definition AdministrationController.cs:94
diff --git a/_application_8cs_source.html b/_application_8cs_source.html index 55fcf866d1..fee9f87c03 100644 --- a/_application_8cs_source.html +++ b/_application_8cs_source.html @@ -851,9 +851,9 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Host.Components.Watchdog.WatchdogFactory
Definition WatchdogFactory.cs:22
Tgstation.Server.Host.Configuration.ControlPanelConfiguration
Configuration options for the web control panel.
Definition ControlPanelConfiguration.cs:9
Tgstation.Server.Host.Configuration.DatabaseConfiguration.DatabaseType
DatabaseType DatabaseType
The Configuration.DatabaseType to create.
Definition DatabaseConfiguration.cs:20
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.MicrosoftLogLevel
LogLevel MicrosoftLogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs for Microsoft library sources.
Definition FileLoggingConfiguration.cs:42
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory
string GetFullLogDirectory(IIOManager ioManager, IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier)
Gets the evaluated log Directory.
Definition FileLoggingConfiguration.cs:51
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.LogLevel
LogLevel LogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs.
Definition FileLoggingConfiguration.cs:36
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.MicrosoftLogLevel
LogLevel MicrosoftLogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs for Microsoft library sources.
Definition FileLoggingConfiguration.cs:47
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory
string GetFullLogDirectory(IIOManager ioManager, IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier)
Gets the evaluated log Directory.
Definition FileLoggingConfiguration.cs:56
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.LogLevel
LogLevel LogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs.
Definition FileLoggingConfiguration.cs:41
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.Disable
bool Disable
If file logging is disabled.
Definition FileLoggingConfiguration.cs:30
Tgstation.Server.Host.Configuration.GeneralConfiguration
General configuration options.
Definition GeneralConfiguration.cs:20
Tgstation.Server.Host.Configuration.GeneralConfiguration.CurrentConfigVersion
static readonly Version CurrentConfigVersion
The current ConfigVersion.
Definition GeneralConfiguration.cs:79
diff --git a/_file_logging_configuration_8cs_source.html b/_file_logging_configuration_8cs_source.html index 6e93425aeb..3bd4cef776 100644 --- a/_file_logging_configuration_8cs_source.html +++ b/_file_logging_configuration_8cs_source.html @@ -102,47 +102,50 @@ $(document).ready(function() { init_codefold(0); });
26
30 public bool Disable { get; set; }
31
-
35 [JsonConverter(typeof(StringEnumConverter))]
-
36 public LogLevel LogLevel { get; set; } = LogLevel.Debug; // Not a `const` b/c of https://github.com/coverlet-coverage/coverlet/issues/1507
-
37
-
41 [JsonConverter(typeof(StringEnumConverter))]
-
42 public LogLevel MicrosoftLogLevel { get; set; } = LogLevel.Warning; // Not a `const` b/c of https://github.com/coverlet-coverage/coverlet/issues/1507
-
43
-
-
51 public string GetFullLogDirectory(
-
52 IIOManager ioManager,
-
53 IAssemblyInformationProvider assemblyInformationProvider,
-
54 IPlatformIdentifier platformIdentifier)
-
55 {
-
56 ArgumentNullException.ThrowIfNull(ioManager);
-
57 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
-
58 ArgumentNullException.ThrowIfNull(platformIdentifier);
-
59
-
60 if (!String.IsNullOrEmpty(Directory))
-
61 return Directory;
-
62
-
63 return platformIdentifier.IsWindows
-
64 ? ioManager.ConcatPath(
-
65 Environment.GetFolderPath(
-
66 Environment.SpecialFolder.CommonApplicationData,
-
67 Environment.SpecialFolderOption.DoNotVerify),
-
68 assemblyInformationProvider.VersionPrefix,
-
69 "logs")
-
70 : ioManager.ConcatPath(
-
71 "/var/log",
-
72 assemblyInformationProvider.VersionPrefix);
-
73 }
+
35 public bool ProviderNetworkDebug { get; set; }
+
36
+
40 [JsonConverter(typeof(StringEnumConverter))]
+
41 public LogLevel LogLevel { get; set; } = LogLevel.Debug; // Not a `const` b/c of https://github.com/coverlet-coverage/coverlet/issues/1507
+
42
+
46 [JsonConverter(typeof(StringEnumConverter))]
+
47 public LogLevel MicrosoftLogLevel { get; set; } = LogLevel.Warning; // Not a `const` b/c of https://github.com/coverlet-coverage/coverlet/issues/1507
+
48
+
+
56 public string GetFullLogDirectory(
+
57 IIOManager ioManager,
+
58 IAssemblyInformationProvider assemblyInformationProvider,
+
59 IPlatformIdentifier platformIdentifier)
+
60 {
+
61 ArgumentNullException.ThrowIfNull(ioManager);
+
62 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
+
63 ArgumentNullException.ThrowIfNull(platformIdentifier);
+
64
+
65 if (!String.IsNullOrEmpty(Directory))
+
66 return Directory;
+
67
+
68 return platformIdentifier.IsWindows
+
69 ? ioManager.ConcatPath(
+
70 Environment.GetFolderPath(
+
71 Environment.SpecialFolder.CommonApplicationData,
+
72 Environment.SpecialFolderOption.DoNotVerify),
+
73 assemblyInformationProvider.VersionPrefix,
+
74 "logs")
+
75 : ioManager.ConcatPath(
+
76 "/var/log",
+
77 assemblyInformationProvider.VersionPrefix);
+
78 }
-
74 }
+
79 }
-
75}
+
80}
JsonConverter
Tgstation.Server.Host.Configuration.FileLoggingConfiguration
File logging configuration options.
Definition FileLoggingConfiguration.cs:16
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.Directory
string? Directory
Where log files are stored.
Definition FileLoggingConfiguration.cs:25
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.MicrosoftLogLevel
LogLevel MicrosoftLogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs for Microsoft library sources.
Definition FileLoggingConfiguration.cs:42
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory
string GetFullLogDirectory(IIOManager ioManager, IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier)
Gets the evaluated log Directory.
Definition FileLoggingConfiguration.cs:51
-
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.LogLevel
LogLevel LogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs.
Definition FileLoggingConfiguration.cs:36
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.MicrosoftLogLevel
LogLevel MicrosoftLogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs for Microsoft library sources.
Definition FileLoggingConfiguration.cs:47
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory
string GetFullLogDirectory(IIOManager ioManager, IAssemblyInformationProvider assemblyInformationProvider, IPlatformIdentifier platformIdentifier)
Gets the evaluated log Directory.
Definition FileLoggingConfiguration.cs:56
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.LogLevel
LogLevel LogLevel
The minimum Microsoft.Extensions.Logging.LogLevel to display in logs.
Definition FileLoggingConfiguration.cs:41
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.Section
const string Section
The key for the Microsoft.Extensions.Configuration.IConfigurationSection the FileLoggingConfiguration...
Definition FileLoggingConfiguration.cs:20
+
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.ProviderNetworkDebug
bool ProviderNetworkDebug
If Chat Providers should log their network traffic. Normally disabled because it is too noisy.
Definition FileLoggingConfiguration.cs:35
Tgstation.Server.Host.Configuration.FileLoggingConfiguration.Disable
bool Disable
If file logging is disabled.
Definition FileLoggingConfiguration.cs:30
Tgstation.Server.Host.IO.IIOManager
Interface for using filesystems.
Definition IIOManager.cs:13
Tgstation.Server.Host.IO.IIOManager.ConcatPath
string ConcatPath(params string[] paths)
Combines an array of strings into a path.
diff --git a/_irc_connection_string_builder_8cs_source.html b/_irc_connection_string_builder_8cs_source.html index 86ce8a47b6..36c258b166 100644 --- a/_irc_connection_string_builder_8cs_source.html +++ b/_irc_connection_string_builder_8cs_source.html @@ -147,49 +147,50 @@ $(document).ready(function() { init_codefold(0); });
88 case IrcPasswordType.NickServ:
89 case IrcPasswordType.Sasl:
90 case IrcPasswordType.Server:
-
91 PasswordType = passwordType;
-
92 break;
-
93 default:
-
94 break;
-
95 }
-
96
-
97 if (splits.Length < 6)
-
98 return;
-
99
-
100 var rest = new List<string>(splits);
-
101 rest.RemoveRange(0, 5);
-
102 Password = String.Join(";", rest);
-
103 }
+
91 case IrcPasswordType.Oper:
+
92 PasswordType = passwordType;
+
93 break;
+
94 default:
+
95 break;
+
96 }
+
97
+
98 if (splits.Length < 6)
+
99 return;
+
100
+
101 var rest = new List<string>(splits);
+
102 rest.RemoveRange(0, 5);
+
103 Password = String.Join(";", rest);
+
104 }
-
104
-
-
106 public override string ToString()
-
107 {
-
108 var sb = new StringBuilder();
-
109 sb.Append(Address);
-
110 sb.Append(';');
-
111 sb.Append(Port);
-
112 sb.Append(';');
-
113 sb.Append(Nickname);
-
114 sb.Append(';');
-
115
-
116 if (UseSsl.HasValue)
-
117 sb.Append(Convert.ToInt32(UseSsl.Value));
-
118
-
119 if (PasswordType.HasValue)
-
120 {
-
121 sb.Append(';');
-
122 sb.Append((int)PasswordType);
-
123 sb.Append(';');
-
124 sb.Append(Password);
-
125 }
-
126
-
127 return sb.ToString();
-
128 }
+
105
+
+
107 public override string ToString()
+
108 {
+
109 var sb = new StringBuilder();
+
110 sb.Append(Address);
+
111 sb.Append(';');
+
112 sb.Append(Port);
+
113 sb.Append(';');
+
114 sb.Append(Nickname);
+
115 sb.Append(';');
+
116
+
117 if (UseSsl.HasValue)
+
118 sb.Append(Convert.ToInt32(UseSsl.Value));
+
119
+
120 if (PasswordType.HasValue)
+
121 {
+
122 sb.Append(';');
+
123 sb.Append((int)PasswordType);
+
124 sb.Append(';');
+
125 sb.Append(Password);
+
126 }
+
127
+
128 return sb.ToString();
+
129 }
-
129 }
+
130 }
-
130}
+
131}
Tgstation.Server.Api.Models.Internal.ChatConnectionStringBuilder
Helper for building ChatBotSettings.ConnectionStrings.
Definition ChatConnectionStringBuilder.cs:7
Tgstation.Server.Api.Models.IrcConnectionStringBuilder
ChatConnectionStringBuilder for ChatProvider.Irc.
Definition IrcConnectionStringBuilder.cs:13
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Valid
override bool Valid
Definition IrcConnectionStringBuilder.cs:15
@@ -200,7 +201,7 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Address
string? Address
The IP address or URL of the IRC server.
Definition IrcConnectionStringBuilder.cs:20
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.UseSsl
bool? UseSsl
If the connection should be made using SSL.
Definition IrcConnectionStringBuilder.cs:35
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder
IrcConnectionStringBuilder()
Initializes a new instance of the IrcConnectionStringBuilder class.
Definition IrcConnectionStringBuilder.cs:50
-
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString
override string ToString()
Definition IrcConnectionStringBuilder.cs:106
+
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString
override string ToString()
Definition IrcConnectionStringBuilder.cs:107
Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Nickname
string? Nickname
The nickname for the bot to use.
Definition IrcConnectionStringBuilder.cs:30
Tgstation.Server.Api.Models.Internal
Definition ChatBotApiBase.cs:6
Tgstation.Server.Api.Models
Definition ChatChannel.cs:6
diff --git a/_irc_password_type_8cs.html b/_irc_password_type_8cs.html index 7dcb21f9e7..0753f8c5a2 100644 --- a/_irc_password_type_8cs.html +++ b/_irc_password_type_8cs.html @@ -99,6 +99,7 @@ Enumerations enum  Tgstation.Server.Api.Models.IrcPasswordType { Tgstation.Server.Api.Models.Server , Tgstation.Server.Api.Models.Sasl , Tgstation.Server.Api.Models.NickServ +, Tgstation.Server.Api.Models.Oper }  Represents the type of a password for a ChatProvider.Irc. More...
  diff --git a/_irc_password_type_8cs_source.html b/_irc_password_type_8cs_source.html index 6c12b300c6..6085a96276 100644 --- a/_irc_password_type_8cs_source.html +++ b/_irc_password_type_8cs_source.html @@ -92,11 +92,14 @@ $(document).ready(function() { init_codefold(0); });
16 Sasl,
17
21 NickServ,
-
22 }
+
22
+
26 Oper,
+
27 }
-
23}
+
28}
Tgstation.Server.Api.Models
Definition ChatChannel.cs:6
Tgstation.Server.Api.Models.IrcPasswordType
IrcPasswordType
Represents the type of a password for a ChatProvider.Irc.
Definition IrcPasswordType.cs:7
+
Tgstation.Server.Api.Models.IrcPasswordType.Oper
@ Oper
Use OPER authentication.
Tgstation.Server.Api.Models.IrcPasswordType.NickServ
@ NickServ
Use NickServ authentication.
Tgstation.Server.Api.Models.IrcPasswordType.Sasl
@ Sasl
Use PLAIN sasl authentication.
Tgstation.Server.Api.Models.IrcPasswordType.Server
@ Server
Use server authentication.
diff --git a/_irc_provider_8cs_source.html b/_irc_provider_8cs_source.html index 67189975e2..8255d78021 100644 --- a/_irc_provider_8cs_source.html +++ b/_irc_provider_8cs_source.html @@ -97,321 +97,314 @@ $(document).ready(function() { init_codefold(0); });
13
14using Tgstation.Server.Api.Models;
15using Tgstation.Server.Host.Components.Interop;
-
16using Tgstation.Server.Host.Extensions;
-
17using Tgstation.Server.Host.IO;
-
18using Tgstation.Server.Host.Jobs;
-
19using Tgstation.Server.Host.System;
-
20using Tgstation.Server.Host.Utils;
-
21
-
22namespace Tgstation.Server.Host.Components.Chat.Providers
-
23{
-
-
27 sealed class IrcProvider : Provider
-
28 {
-
32 const int PreambleMessageLength = 12;
-
33
-
37 const int MessageBytesLimit = 512;
-
38
-
40 public override bool Connected => client.IsConnected;
-
41
-
43 public override string BotMention => client.Nickname;
-
44
-
48 readonly IrcFeatures client;
-
49
-
53 readonly string address;
-
54
-
58 readonly ushort port;
-
59
-
63 readonly string nickname;
-
64
-
68 readonly string password;
-
69
-
73 readonly IrcPasswordType? passwordType;
-
74
-
78 readonly Dictionary<ulong, string?> channelIdMap;
-
79
-
83 readonly Dictionary<ulong, string> queryChannelIdMap;
-
84
-
88 Task? listenTask;
-
89
-
93 ulong channelIdCounter;
-
94
-
98 bool disconnecting;
-
99
-
- - -
110 IAsyncDelayer asyncDelayer,
-
111 ILogger<IrcProvider> logger,
-
112 IAssemblyInformationProvider assemblyInformationProvider,
-
113 Models.ChatBot chatBot)
-
114 : base(jobManager, asyncDelayer, logger, chatBot)
-
115 {
-
116 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
-
117
-
118 var builder = chatBot.CreateConnectionStringBuilder();
-
119 if (builder == null || !builder.Valid || builder is not IrcConnectionStringBuilder ircBuilder)
-
120 throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!");
-
121
-
122 address = ircBuilder.Address!;
-
123 port = ircBuilder.Port!.Value;
-
124 nickname = ircBuilder.Nickname!;
-
125
-
126 password = ircBuilder.Password!;
-
127 passwordType = ircBuilder.PasswordType;
-
128
-
129 client = new IrcFeatures
-
130 {
-
131 SupportNonRfc = true,
-
132 CtcpUserInfo = "You are going to play. And I am going to watch. And everything will be just fine...",
-
133 AutoRejoin = true,
-
134 AutoRejoinOnKick = true,
-
135 AutoRelogin = true,
-
136 AutoRetry = false,
-
137 AutoReconnect = false,
-
138 ActiveChannelSyncing = true,
-
139 AutoNickHandling = true,
-
140 CtcpVersion = assemblyInformationProvider.VersionString,
-
141 UseSsl = ircBuilder.UseSsl!.Value,
-
142 };
-
143 if (ircBuilder.UseSsl.Value)
-
144 client.ValidateServerCertificate = true; // dunno if it defaults to that or what
-
145
-
146 client.OnChannelMessage += Client_OnChannelMessage;
-
147 client.OnQueryMessage += Client_OnQueryMessage;
+ + + + + + +
22
+ +
24{
+
+
28 sealed class IrcProvider : Provider
+
29 {
+
33 const int PreambleMessageLength = 12;
+
34
+
38 const int MessageBytesLimit = 512;
+
39
+
41 public override bool Connected => client.IsConnected;
+
42
+
44 public override string BotMention => client.Nickname;
+
45
+
49 readonly string address;
+
50
+
54 readonly ushort port;
+
55
+
59 readonly bool ssl;
+
60
+
64 readonly string nickname;
+
65
+
69 readonly string password;
+
70
+ +
75
+
79 readonly Dictionary<ulong, string?> channelIdMap;
+
80
+
84 readonly Dictionary<ulong, string> queryChannelIdMap;
+
85
+ +
90
+ +
95
+
99 IrcFeatures client;
+
100
+ +
105
+ +
110
+
+ + +
122 IAsyncDelayer asyncDelayer,
+
123 ILogger<IrcProvider> logger,
+
124 IAssemblyInformationProvider assemblyInformationProvider,
+
125 Models.ChatBot chatBot,
+ +
127 : base(jobManager, asyncDelayer, logger, chatBot)
+
128 {
+
129 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
+
130 ArgumentNullException.ThrowIfNull(loggingConfiguration);
+
131
+
132 var builder = chatBot.CreateConnectionStringBuilder();
+
133 if (builder == null || !builder.Valid || builder is not IrcConnectionStringBuilder ircBuilder)
+
134 throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!");
+
135
+
136 address = ircBuilder.Address!;
+
137 port = ircBuilder.Port!.Value;
+
138 ssl = ircBuilder.UseSsl!.Value;
+
139 nickname = ircBuilder.Nickname!;
+
140
+
141 password = ircBuilder.Password!;
+
142 passwordType = ircBuilder.PasswordType;
+
143
+
144 assemblyInfo = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
+
145 this.loggingConfiguration = loggingConfiguration ?? throw new ArgumentNullException(nameof(loggingConfiguration));
+
146
+
148
-
149 /*client.OnReadLine += (sender, e) => Logger.LogTrace("READ: {line}", e.Line);
-
150 client.OnWriteLine += (sender, e) => Logger.LogTrace("WRITE: {line}", e.Line);*/
-
151
-
152 channelIdMap = new Dictionary<ulong, string?>();
-
153 queryChannelIdMap = new Dictionary<ulong, string>();
- -
155 }
+
149 channelIdMap = new Dictionary<ulong, string?>();
+
150 queryChannelIdMap = new Dictionary<ulong, string>();
+ +
152 }
-
156
-
-
158 public override async ValueTask DisposeAsync()
-
159 {
-
160 await base.DisposeAsync();
-
161
-
162 // DCT: None available
-
163 await HardDisconnect(CancellationToken.None);
-
164 }
+
153
+
+
155 public override async ValueTask DisposeAsync()
+
156 {
+
157 await base.DisposeAsync();
+
158
+
159 // DCT: None available
+
160 await HardDisconnect(CancellationToken.None);
+
161 }
-
165
-
-
167 public override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
-
168 {
-
169 ArgumentNullException.ThrowIfNull(message);
-
170
-
171 await Task.Factory.StartNew(
-
172 () =>
-
173 {
-
174 // IRC doesn't allow newlines
-
175 // Explicitly ignore embeds
-
176 var messageText = message.Text;
-
177 messageText ??= $"Embed Only: {JsonConvert.SerializeObject(message.Embed)}";
-
178
-
179 messageText = String.Concat(
-
180 messageText
-
181 .Where(x => x != '\r')
-
182 .Select(x => x == '\n' ? '|' : x));
-
183
-
184 var channelName = channelIdMap[channelId];
-
185 SendType sendType;
-
186 if (channelName == null)
-
187 {
-
188 channelName = queryChannelIdMap[channelId];
-
189 sendType = SendType.Notice;
-
190 }
-
191 else
-
192 sendType = SendType.Message;
-
193
-
194 var messageSize = Encoding.UTF8.GetByteCount(messageText) + Encoding.UTF8.GetByteCount(channelName) + PreambleMessageLength;
-
195 var messageTooLong = messageSize > MessageBytesLimit;
-
196 if (messageTooLong)
-
197 messageText = $"TGS: Could not send message to IRC. Line write exceeded protocol limit of {MessageBytesLimit}B.";
-
198
-
199 try
-
200 {
-
201 client.SendMessage(sendType, channelName, messageText);
-
202 }
-
203 catch (Exception e)
-
204 {
-
205 Logger.LogWarning(e, "Unable to send to channel {channelName}!", channelName);
-
206 return;
-
207 }
-
208
-
209 if (messageTooLong)
-
210 Logger.LogWarning(
-
211 "Failed to send to channel {channelId}: Message size ({messageSize}B) exceeds IRC limit of 512B",
-
212 channelId,
-
213 messageSize);
-
214 },
-
215 cancellationToken,
- -
217 TaskScheduler.Current);
-
218 }
+
162
+
+
164 public override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
+
165 {
+
166 ArgumentNullException.ThrowIfNull(message);
+
167
+
168 await Task.Factory.StartNew(
+
169 () =>
+
170 {
+
171 // IRC doesn't allow newlines
+
172 // Explicitly ignore embeds
+
173 var messageText = message.Text;
+
174 messageText ??= $"Embed Only: {JsonConvert.SerializeObject(message.Embed)}";
+
175
+
176 messageText = String.Concat(
+
177 messageText
+
178 .Where(x => x != '\r')
+
179 .Select(x => x == '\n' ? '|' : x));
+
180
+
181 var channelName = channelIdMap[channelId];
+
182 SendType sendType;
+
183 if (channelName == null)
+
184 {
+
185 channelName = queryChannelIdMap[channelId];
+
186 sendType = SendType.Notice;
+
187 }
+
188 else
+
189 sendType = SendType.Message;
+
190
+
191 var messageSize = Encoding.UTF8.GetByteCount(messageText) + Encoding.UTF8.GetByteCount(channelName) + PreambleMessageLength;
+
192 var messageTooLong = messageSize > MessageBytesLimit;
+
193 if (messageTooLong)
+
194 messageText = $"TGS: Could not send message to IRC. Line write exceeded protocol limit of {MessageBytesLimit}B.";
+
195
+
196 try
+
197 {
+
198 client.SendMessage(sendType, channelName, messageText);
+
199 }
+
200 catch (Exception e)
+
201 {
+
202 Logger.LogWarning(e, "Unable to send to channel {channelName}!", channelName);
+
203 return;
+
204 }
+
205
+
206 if (messageTooLong)
+
207 Logger.LogWarning(
+
208 "Failed to send to channel {channelId}: Message size ({messageSize}B) exceeds IRC limit of 512B",
+
209 channelId,
+
210 messageSize);
+
211 },
+
212 cancellationToken,
+ +
214 TaskScheduler.Current);
+
215 }
-
219
-
-
221 public override async ValueTask<Func<string?, string, ValueTask<Func<bool, ValueTask>>>> SendUpdateMessage(
-
222 Models.RevisionInformation revisionInformation,
-
223 EngineVersion engineVersion,
-
224 DateTimeOffset? estimatedCompletionTime,
-
225 string? gitHubOwner,
-
226 string? gitHubRepo,
-
227 ulong channelId,
-
228 bool localCommitPushed,
-
229 CancellationToken cancellationToken)
-
230 {
-
231 ArgumentNullException.ThrowIfNull(revisionInformation);
-
232 ArgumentNullException.ThrowIfNull(engineVersion);
-
233 ArgumentNullException.ThrowIfNull(gitHubOwner);
-
234 ArgumentNullException.ThrowIfNull(gitHubRepo);
-
235
-
236 var commitInsert = revisionInformation.CommitSha![..7];
-
237 string remoteCommitInsert;
-
238 if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha)
-
239 {
-
240 commitInsert = String.Format(CultureInfo.InvariantCulture, localCommitPushed ? "^{0}" : "{0}", commitInsert);
-
241 remoteCommitInsert = String.Empty;
-
242 }
-
243 else
-
244 remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}", revisionInformation.OriginCommitSha![..7]);
-
245
-
246 var testmergeInsert = (revisionInformation.ActiveTestMerges?.Count ?? 0) == 0
-
247 ? String.Empty
-
248 : String.Format(
-
249 CultureInfo.InvariantCulture,
-
250 " (Test Merges: {0})",
-
251 String.Join(
-
252 ", ",
-
253 revisionInformation
-
254 .ActiveTestMerges!
-
255 .Select(x => x.TestMerge)
-
256 .Select(x =>
-
257 {
-
258 var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]);
-
259 if (x.Comment != null)
-
260 result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment);
-
261 return result;
-
262 })));
-
263
-
264 var prefix = GetEngineCompilerPrefix(engineVersion.Engine!.Value);
-
265 await SendMessage(
-
266 null,
- -
268 {
-
269 Text = String.Format(
-
270 CultureInfo.InvariantCulture,
-
271 $"{prefix}: Deploying revision: {0}{1}{2} BYOND Version: {3}{4}",
-
272 commitInsert,
-
273 testmergeInsert,
-
274 remoteCommitInsert,
-
275 engineVersion.ToString(),
-
276 estimatedCompletionTime.HasValue
-
277 ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}"
-
278 : String.Empty),
-
279 },
-
280 channelId,
-
281 cancellationToken);
-
282
-
283 return async (errorMessage, dreamMakerOutput) =>
-
284 {
-
285 await SendMessage(
-
286 null,
- -
288 {
-
289 Text = $"{prefix}: Deployment {(errorMessage == null ? "complete" : "failed")}!",
-
290 },
-
291 channelId,
-
292 cancellationToken);
-
293
-
294 return active => ValueTask.CompletedTask;
-
295 };
-
296 }
+
216
+
+
218 public override async ValueTask<Func<string?, string, ValueTask<Func<bool, ValueTask>>>> SendUpdateMessage(
+
219 Models.RevisionInformation revisionInformation,
+
220 EngineVersion engineVersion,
+
221 DateTimeOffset? estimatedCompletionTime,
+
222 string? gitHubOwner,
+
223 string? gitHubRepo,
+
224 ulong channelId,
+
225 bool localCommitPushed,
+
226 CancellationToken cancellationToken)
+
227 {
+
228 ArgumentNullException.ThrowIfNull(revisionInformation);
+
229 ArgumentNullException.ThrowIfNull(engineVersion);
+
230 ArgumentNullException.ThrowIfNull(gitHubOwner);
+
231 ArgumentNullException.ThrowIfNull(gitHubRepo);
+
232
+
233 var commitInsert = revisionInformation.CommitSha![..7];
+
234 string remoteCommitInsert;
+
235 if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha)
+
236 {
+
237 commitInsert = String.Format(CultureInfo.InvariantCulture, localCommitPushed ? "^{0}" : "{0}", commitInsert);
+
238 remoteCommitInsert = String.Empty;
+
239 }
+
240 else
+
241 remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}", revisionInformation.OriginCommitSha![..7]);
+
242
+
243 var testmergeInsert = (revisionInformation.ActiveTestMerges?.Count ?? 0) == 0
+
244 ? String.Empty
+
245 : String.Format(
+
246 CultureInfo.InvariantCulture,
+
247 " (Test Merges: {0})",
+
248 String.Join(
+
249 ", ",
+
250 revisionInformation
+
251 .ActiveTestMerges!
+
252 .Select(x => x.TestMerge)
+
253 .Select(x =>
+
254 {
+
255 var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]);
+
256 if (x.Comment != null)
+
257 result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment);
+
258 return result;
+
259 })));
+
260
+
261 var prefix = GetEngineCompilerPrefix(engineVersion.Engine!.Value);
+
262 await SendMessage(
+
263 null,
+ +
265 {
+
266 Text = String.Format(
+
267 CultureInfo.InvariantCulture,
+
268 $"{prefix}: Deploying revision: {0}{1}{2} BYOND Version: {3}{4}",
+
269 commitInsert,
+
270 testmergeInsert,
+
271 remoteCommitInsert,
+
272 engineVersion.ToString(),
+
273 estimatedCompletionTime.HasValue
+
274 ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}"
+
275 : String.Empty),
+
276 },
+
277 channelId,
+
278 cancellationToken);
+
279
+
280 return async (errorMessage, dreamMakerOutput) =>
+
281 {
+
282 await SendMessage(
+
283 null,
+ +
285 {
+
286 Text = $"{prefix}: Deployment {(errorMessage == null ? "complete" : "failed")}!",
+
287 },
+
288 channelId,
+
289 cancellationToken);
+
290
+
291 return active => ValueTask.CompletedTask;
+
292 };
+
293 }
-
297
-
299 protected override async ValueTask<Dictionary<Models.ChatChannel, IEnumerable<ChannelRepresentation>>> MapChannelsImpl(
-
300 IEnumerable<Models.ChatChannel> channels,
-
301 CancellationToken cancellationToken)
-
302 => await Task.Factory.StartNew(
-
303 () =>
-
304 {
-
305 if (channels.Any(x => x.IrcChannel == null))
-
306 throw new InvalidOperationException("ChatChannel missing IrcChannel!");
-
307 lock (client)
-
308 {
-
309 var channelsWithKeys = new Dictionary<string, string>();
-
310 var hs = new HashSet<string>(); // for unique inserts
-
311 foreach (var channel in channels)
-
312 {
-
313 var name = channel.GetIrcChannelName();
-
314 var key = channel.GetIrcChannelKey();
-
315 if (hs.Add(name) && key != null)
-
316 channelsWithKeys.Add(name, key);
-
317 }
-
318
-
319 var toPart = new List<string>();
-
320 foreach (var activeChannel in client.JoinedChannels)
-
321 if (!hs.Remove(activeChannel))
-
322 toPart.Add(activeChannel);
-
323
-
324 foreach (var channelToLeave in toPart)
-
325 client.RfcPart(channelToLeave, "Pretty nice abscond!");
-
326 foreach (var channelToJoin in hs)
-
327 if (channelsWithKeys.TryGetValue(channelToJoin, out var key))
-
328 client.RfcJoin(channelToJoin, key);
-
329 else
-
330 client.RfcJoin(channelToJoin);
-
331
-
332 return new Dictionary<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(
-
333 channels
-
334 .Select(dbChannel =>
-
335 {
-
336 var channelName = dbChannel.GetIrcChannelName();
-
337 ulong? id = null;
-
338 if (!channelIdMap.Any(y =>
-
339 {
-
340 if (y.Value != channelName)
-
341 return false;
-
342 id = y.Key;
-
343 return true;
-
344 }))
-
345 {
-
346 id = channelIdCounter++;
-
347 channelIdMap.Add(id.Value, channelName);
-
348 }
-
349
-
350 return new KeyValuePair<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(
-
351 dbChannel,
-
352 new List<ChannelRepresentation>
-
353 {
-
354 new(address, channelName, id!.Value)
-
355 {
-
356 Tag = dbChannel.Tag,
-
357 IsAdminChannel = dbChannel.IsAdminChannel == true,
-
358 IsPrivateChannel = false,
-
359 EmbedsSupported = false,
-
360 },
-
361 });
-
362 }));
-
363 }
-
364 },
-
365 cancellationToken,
- -
367 TaskScheduler.Current);
-
368
-
-
370 protected override async ValueTask Connect(CancellationToken cancellationToken)
-
371 {
-
372 disconnecting = false;
-
373 cancellationToken.ThrowIfCancellationRequested();
-
374 try
-
375 {
-
376 await Task.Factory.StartNew(
-
377 () => client.Connect(address, port),
+
294
+
296 protected override async ValueTask<Dictionary<Models.ChatChannel, IEnumerable<ChannelRepresentation>>> MapChannelsImpl(
+
297 IEnumerable<Models.ChatChannel> channels,
+
298 CancellationToken cancellationToken)
+
299 => await Task.Factory.StartNew(
+
300 () =>
+
301 {
+
302 if (channels.Any(x => x.IrcChannel == null))
+
303 throw new InvalidOperationException("ChatChannel missing IrcChannel!");
+
304 lock (client)
+
305 {
+
306 var channelsWithKeys = new Dictionary<string, string>();
+
307 var hs = new HashSet<string>(); // for unique inserts
+
308 foreach (var channel in channels)
+
309 {
+
310 var name = channel.GetIrcChannelName();
+
311 var key = channel.GetIrcChannelKey();
+
312 if (hs.Add(name) && key != null)
+
313 channelsWithKeys.Add(name, key);
+
314 }
+
315
+
316 var toPart = new List<string>();
+
317 foreach (var activeChannel in client.JoinedChannels)
+
318 if (!hs.Remove(activeChannel))
+
319 toPart.Add(activeChannel);
+
320
+
321 foreach (var channelToLeave in toPart)
+
322 client.RfcPart(channelToLeave, "Pretty nice abscond!");
+
323 foreach (var channelToJoin in hs)
+
324 if (channelsWithKeys.TryGetValue(channelToJoin, out var key))
+
325 client.RfcJoin(channelToJoin, key);
+
326 else
+
327 client.RfcJoin(channelToJoin);
+
328
+
329 return new Dictionary<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(
+
330 channels
+
331 .Select(dbChannel =>
+
332 {
+
333 var channelName = dbChannel.GetIrcChannelName();
+
334 ulong? id = null;
+
335 if (!channelIdMap.Any(y =>
+
336 {
+
337 if (y.Value != channelName)
+
338 return false;
+
339 id = y.Key;
+
340 return true;
+
341 }))
+
342 {
+
343 id = channelIdCounter++;
+
344 channelIdMap.Add(id.Value, channelName);
+
345 }
+
346
+
347 return new KeyValuePair<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(
+
348 dbChannel,
+
349 new List<ChannelRepresentation>
+
350 {
+
351 new(address, channelName, id!.Value)
+
352 {
+
353 Tag = dbChannel.Tag,
+
354 IsAdminChannel = dbChannel.IsAdminChannel == true,
+
355 IsPrivateChannel = false,
+
356 EmbedsSupported = false,
+
357 },
+
358 });
+
359 }));
+
360 }
+
361 },
+
362 cancellationToken,
+ +
364 TaskScheduler.Current);
+
365
+
+
367 protected override async ValueTask Connect(CancellationToken cancellationToken)
+
368 {
+
369 cancellationToken.ThrowIfCancellationRequested();
+
370 try
+
371 {
+
372 await Task.Factory.StartNew(
+
373 () =>
+
374 {
+
375 client = InstantiateClient();
+
376 client.Connect(address, port);
+
377 },
378 cancellationToken,
380 TaskScheduler.Current)
@@ -419,298 +412,351 @@ $(document).ready(function() { init_codefold(0); });
382
383 cancellationToken.ThrowIfCancellationRequested();
384
-
385 Logger.LogTrace("Authenticating ({passwordType})...", passwordType);
-
386 switch (passwordType)
-
387 {
-
388 case IrcPasswordType.Server:
-
389 client.Login(nickname, nickname, 0, nickname, password);
-
390 break;
-
391 case IrcPasswordType.NickServ:
-
392 client.Login(nickname, nickname, 0, nickname);
-
393 cancellationToken.ThrowIfCancellationRequested();
-
394 client.SendMessage(SendType.Message, "NickServ", String.Format(CultureInfo.InvariantCulture, "IDENTIFY {0}", password));
-
395 break;
-
396 case IrcPasswordType.Sasl:
-
397 await SaslAuthenticate(cancellationToken);
-
398 break;
-
399 case null:
-
400 client.Login(nickname, nickname, 0, nickname);
-
401 break;
-
402 default:
-
403 throw new InvalidOperationException($"Invalid IrcPasswordType: {passwordType.Value}");
-
404 }
-
405
-
406 cancellationToken.ThrowIfCancellationRequested();
-
407 Logger.LogTrace("Processing initial messages...");
-
408 await NonBlockingListen(cancellationToken);
-
409
-
410 var nickCheckCompleteTcs = new TaskCompletionSource();
-
411 using (cancellationToken.Register(() => nickCheckCompleteTcs.TrySetCanceled(cancellationToken)))
-
412 {
-
413 listenTask = Task.Factory.StartNew(
-
414 async () =>
-
415 {
-
416 Logger.LogTrace("Entering nick check loop");
-
417 while (!disconnecting && client.IsConnected && client.Nickname != nickname)
-
418 {
-
419 client.ListenOnce(true);
-
420 if (disconnecting || !client.IsConnected)
-
421 break;
-
422 await NonBlockingListen(cancellationToken);
-
423
-
424 // ensure we have the correct nick
-
425 if (client.GetIrcUser(nickname) == null)
-
426 client.RfcNick(nickname);
-
427 }
-
428
-
429 nickCheckCompleteTcs.TrySetResult();
+
385 listenTask = Task.Factory.StartNew(
+
386 () =>
+
387 {
+
388 Logger.LogTrace("Starting blocking listen...");
+
389 try
+
390 {
+
391 client.Listen();
+
392 }
+
393 catch (Exception ex)
+
394 {
+
395 Logger.LogWarning(ex, "IRC Main Listen Exception!");
+
396 }
+
397
+
398 Logger.LogTrace("Exiting listening task...");
+
399 },
+
400 cancellationToken,
+ +
402 TaskScheduler.Current);
+
403
+
404 Logger.LogTrace("Authenticating ({passwordType})...", passwordType);
+
405 switch (passwordType)
+
406 {
+
407 case IrcPasswordType.Server:
+
408 client.RfcPass(password);
+
409 await Login(client, nickname, cancellationToken);
+
410 break;
+
411 case IrcPasswordType.NickServ:
+
412 await Login(client, nickname, cancellationToken);
+
413 cancellationToken.ThrowIfCancellationRequested();
+
414 client.SendMessage(SendType.Message, "NickServ", String.Format(CultureInfo.InvariantCulture, "IDENTIFY {0}", password));
+
415 break;
+
416 case IrcPasswordType.Sasl:
+
417 await SaslAuthenticate(cancellationToken);
+
418 break;
+
419 case IrcPasswordType.Oper:
+
420 await Login(client, nickname, cancellationToken);
+
421 cancellationToken.ThrowIfCancellationRequested();
+
422 client.RfcOper(nickname, password, Priority.Critical);
+
423 break;
+
424 case null:
+
425 await Login(client, nickname, cancellationToken);
+
426 break;
+
427 default:
+
428 throw new InvalidOperationException($"Invalid IrcPasswordType: {passwordType.Value}");
+
429 }
430
-
431 Logger.LogTrace("Starting blocking listen...");
-
432 try
-
433 {
-
434 client.Listen();
-
435 }
-
436 catch (Exception ex)
-
437 {
-
438 Logger.LogWarning(ex, "IRC Main Listen Exception!");
-
439 }
+
431 cancellationToken.ThrowIfCancellationRequested();
+
432
+
433 Logger.LogTrace("Connection established!");
+
434 }
+
435 catch (Exception e) when (e is not OperationCanceledException)
+
436 {
+
437 throw new JobException(ErrorCode.ChatCannotConnectProvider, e);
+
438 }
+
439 }
+
440
-
441 Logger.LogTrace("Exiting listening task...");
-
442 },
-
443 cancellationToken,
- -
445 TaskScheduler.Current);
-
446
-
447 await nickCheckCompleteTcs.Task;
-
448 }
-
449
-
450 Logger.LogTrace("Connection established!");
-
451 }
-
452 catch (Exception e) when (e is not OperationCanceledException)
-
453 {
-
454 throw new JobException(ErrorCode.ChatCannotConnectProvider, e);
-
455 }
-
456 }
+
+
442 protected override async ValueTask DisconnectImpl(CancellationToken cancellationToken)
+
443 {
+
444 try
+
445 {
+
446 await Task.Factory.StartNew(
+
447 () =>
+
448 {
+
449 try
+
450 {
+
451 client.RfcQuit("Mr. Stark, I don't feel so good...", Priority.Critical); // priocritical otherwise it wont go through
+
452 }
+
453 catch (Exception e)
+
454 {
+
455 Logger.LogWarning(e, "Error quitting IRC!");
+
456 }
+
457 },
+
458 cancellationToken,
+ +
460 TaskScheduler.Current);
+
461 await HardDisconnect(cancellationToken);
+
462 }
+
463 catch (OperationCanceledException)
+
464 {
+
465 throw;
+
466 }
+
467 catch (Exception e)
+
468 {
+
469 Logger.LogWarning(e, "Error disconnecting from IRC!");
+
470 }
+
471 }
-
457
-
-
459 protected override async ValueTask DisconnectImpl(CancellationToken cancellationToken)
-
460 {
-
461 try
-
462 {
-
463 await Task.Factory.StartNew(
-
464 () =>
-
465 {
-
466 try
-
467 {
-
468 client.RfcQuit("Mr. Stark, I don't feel so good...", Priority.Critical); // priocritical otherwise it wont go through
-
469 }
-
470 catch (Exception e)
-
471 {
-
472 Logger.LogWarning(e, "Error quitting IRC!");
-
473 }
-
474 },
-
475 cancellationToken,
- -
477 TaskScheduler.Current);
-
478 await HardDisconnect(cancellationToken);
-
479 }
-
480 catch (OperationCanceledException)
-
481 {
-
482 throw;
-
483 }
-
484 catch (Exception e)
-
485 {
-
486 Logger.LogWarning(e, "Error disconnecting from IRC!");
-
487 }
-
488 }
-
-
489
-
-
495 void HandleMessage(IrcEventArgs e, bool isPrivate)
-
496 {
-
497 if (e.Data.Nick.Equals(client.Nickname, StringComparison.OrdinalIgnoreCase))
-
498 return;
-
499
-
500 var username = e.Data.Nick;
-
501 var channelName = isPrivate ? username : e.Data.Channel;
-
502
-
503 ulong MapAndGetChannelId(Dictionary<ulong, string?> dicToCheck)
+
472
+
+
481 async ValueTask Login(IrcFeatures client, string nickname, CancellationToken cancellationToken)
+
482 {
+
483 var promise = new TaskCompletionSource<object>();
+
484
+
485 void Callback(object? sender, EventArgs e)
+
486 {
+
487 Logger.LogTrace("IRC Registered.");
+
488 promise.TrySetResult(e);
+
489 }
+
490
+
491 client.OnRegistered += Callback;
+
492
+
493 client.Login(nickname, nickname, 0, nickname);
+
494
+
495 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
496 cts.CancelAfter(TimeSpan.FromSeconds(30));
+
497
+
498 try
+
499 {
+
500 await promise.Task.WaitAsync(cts.Token);
+
501 client.OnRegistered -= Callback;
+
502 }
+
503 catch (OperationCanceledException)
504 {
-
505 ulong? resultId = null;
-
506 if (!dicToCheck.Any(x =>
-
507 {
-
508 if (x.Value != channelName)
-
509 return false;
-
510 resultId = x.Key;
-
511 return true;
-
512 }))
-
513 {
-
514 resultId = channelIdCounter++;
-
515 dicToCheck.Add(resultId.Value, channelName);
-
516 if (dicToCheck == queryChannelIdMap)
-
517 channelIdMap.Add(resultId.Value, null);
-
518 }
-
519
-
520 return resultId!.Value;
-
521 }
-
522
-
523 ulong userId, channelId;
-
524 lock (client)
+
505 if (client.IsConnected)
+
506 client.Disconnect();
+
507 throw new JobException("Timed out waiting for IRC Registration");
+
508 }
+
509 }
+
+
510
+
+
516 void HandleMessage(IrcEventArgs e, bool isPrivate)
+
517 {
+
518 if (e.Data.Nick.Equals(client.Nickname, StringComparison.OrdinalIgnoreCase))
+
519 return;
+
520
+
521 var username = e.Data.Nick;
+
522 var channelName = isPrivate ? username : e.Data.Channel;
+
523
+
524 ulong MapAndGetChannelId(Dictionary<ulong, string?> dicToCheck)
525 {
-
526 userId = MapAndGetChannelId(new Dictionary<ulong, string?>(queryChannelIdMap
-
527 .Cast<KeyValuePair<ulong, string?>>())); // NRT my beloathed
-
528 channelId = isPrivate ? userId : MapAndGetChannelId(channelIdMap);
-
529 }
-
530
-
531 var channelFriendlyName = isPrivate ? String.Format(CultureInfo.InvariantCulture, "PM: {0}", channelName) : channelName;
-
532 var message = new Message(
-
533 new ChatUser(
-
534 new ChannelRepresentation(address, channelFriendlyName, channelId)
-
535 {
-
536 IsPrivateChannel = isPrivate,
-
537 EmbedsSupported = false,
-
538
-
539 // isAdmin and Tag populated by manager
-
540 },
-
541 username,
-
542 username,
-
543 userId),
-
544 e.Data.Message);
-
545
-
546 EnqueueMessage(message);
-
547 }
+
526 ulong? resultId = null;
+
527 if (!dicToCheck.Any(x =>
+
528 {
+
529 if (x.Value != channelName)
+
530 return false;
+
531 resultId = x.Key;
+
532 return true;
+
533 }))
+
534 {
+
535 resultId = channelIdCounter++;
+
536 dicToCheck.Add(resultId.Value, channelName);
+
537 if (dicToCheck == queryChannelIdMap)
+
538 channelIdMap.Add(resultId.Value, null);
+
539 }
+
540
+
541 return resultId!.Value;
+
542 }
+
543
+
544 ulong userId, channelId;
+
545 lock (client)
+
546 {
+
547 userId = MapAndGetChannelId(new Dictionary<ulong, string?>(queryChannelIdMap
+
548 .Cast<KeyValuePair<ulong, string?>>())); // NRT my beloathed
+
549 channelId = isPrivate ? userId : MapAndGetChannelId(channelIdMap);
+
550 }
+
551
+
552 var channelFriendlyName = isPrivate ? String.Format(CultureInfo.InvariantCulture, "PM: {0}", channelName) : channelName;
+
553 var message = new Message(
+
554 new ChatUser(
+
555 new ChannelRepresentation(address, channelFriendlyName, channelId)
+
556 {
+
557 IsPrivateChannel = isPrivate,
+
558 EmbedsSupported = false,
+
559
+
560 // isAdmin and Tag populated by manager
+
561 },
+
562 username,
+
563 username,
+
564 userId),
+
565 e.Data.Message);
+
566
+
567 EnqueueMessage(message);
+
568 }
-
548
-
554 void Client_OnQueryMessage(object sender, IrcEventArgs e) => HandleMessage(e, true);
-
555
-
561 void Client_OnChannelMessage(object sender, IrcEventArgs e) => HandleMessage(e, false);
-
562
-
568 Task NonBlockingListen(CancellationToken cancellationToken) => Task.Factory.StartNew(
-
569 () =>
-
570 {
-
571 try
-
572 {
-
573 client.Listen(false);
-
574 }
-
575 catch (Exception ex)
-
576 {
-
577 Logger.LogWarning(ex, "IRC Non-Blocking Listen Exception!");
-
578 }
-
579 },
-
580 cancellationToken,
-
581 TaskCreationOptions.None,
-
582 TaskScheduler.Current)
-
583 .WaitAsync(cancellationToken);
-
584
-
-
590 async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
-
591 {
-
592 client.WriteLine("CAP REQ :sasl", Priority.Critical); // needs to be put in the buffer before anything else
-
593 cancellationToken.ThrowIfCancellationRequested();
-
594
-
595 Logger.LogTrace("Logging in...");
-
596 client.Login(nickname, nickname, 0, nickname);
-
597 cancellationToken.ThrowIfCancellationRequested();
-
598
-
599 // wait for the SASL ack or timeout
-
600 var receivedAck = false;
-
601 var receivedPlus = false;
-
602
-
603 void AuthenticationDelegate(object sender, ReadLineEventArgs e)
-
604 {
-
605 if (e.Line.Contains("ACK :sasl", StringComparison.Ordinal))
-
606 receivedAck = true;
-
607 else if (e.Line.Contains("AUTHENTICATE +", StringComparison.Ordinal))
-
608 receivedPlus = true;
-
609 }
-
610
-
611 Logger.LogTrace("Performing handshake...");
-
612 client.OnReadLine += AuthenticationDelegate;
-
613 try
-
614 {
-
615 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
616 timeoutCts.CancelAfter(TimeSpan.FromSeconds(25));
-
617 var timeoutToken = timeoutCts.Token;
-
618
-
619 var listenTimeSpan = TimeSpan.FromMilliseconds(10);
-
620 for (; !receivedAck;
-
621 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
-
622 await NonBlockingListen(cancellationToken);
+
569
+
575 void Client_OnQueryMessage(object sender, IrcEventArgs e) => HandleMessage(e, true);
+
576
+
582 void Client_OnChannelMessage(object sender, IrcEventArgs e) => HandleMessage(e, false);
+
583
+
589 Task NonBlockingListen(CancellationToken cancellationToken) => Task.Factory.StartNew(
+
590 () =>
+
591 {
+
592 try
+
593 {
+
594 client.Listen(false);
+
595 }
+
596 catch (Exception ex)
+
597 {
+
598 Logger.LogWarning(ex, "IRC Non-Blocking Listen Exception!");
+
599 }
+
600 },
+
601 cancellationToken,
+
602 TaskCreationOptions.None,
+
603 TaskScheduler.Current)
+
604 .WaitAsync(cancellationToken);
+
605
+
+
611 async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
+
612 {
+
613 client.WriteLine("CAP REQ :sasl", Priority.Critical); // needs to be put in the buffer before anything else
+
614 cancellationToken.ThrowIfCancellationRequested();
+
615
+
616 Logger.LogTrace("Logging in...");
+
617 client.Login(nickname, nickname, 0, nickname);
+
618 cancellationToken.ThrowIfCancellationRequested();
+
619
+
620 // wait for the SASL ack or timeout
+
621 var receivedAck = false;
+
622 var receivedPlus = false;
623
-
624 client.WriteLine("AUTHENTICATE PLAIN", Priority.Critical);
-
625 timeoutToken.ThrowIfCancellationRequested();
-
626
-
627 for (; !receivedPlus;
-
628 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
-
629 await NonBlockingListen(cancellationToken);
+
624 void AuthenticationDelegate(object sender, ReadLineEventArgs e)
+
625 {
+
626 if (e.Line.Contains("ACK :sasl", StringComparison.Ordinal))
+
627 receivedAck = true;
+
628 else if (e.Line.Contains("AUTHENTICATE +", StringComparison.Ordinal))
+
629 receivedPlus = true;
630 }
-
631 finally
-
632 {
-
633 client.OnReadLine -= AuthenticationDelegate;
-
634 }
-
635
-
636 cancellationToken.ThrowIfCancellationRequested();
-
637
-
638 // Stolen! https://github.com/znc/znc/blob/1e697580155d5a38f8b5a377f3b1d94aaa979539/modules/sasl.cpp#L196
-
639 Logger.LogTrace("Sending credentials...");
-
640 var authString = String.Format(
-
641 CultureInfo.InvariantCulture,
-
642 "{0}{1}{0}{1}{2}",
-
643 nickname,
-
644 '\0',
-
645 password);
-
646 var b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
-
647 var authLine = $"AUTHENTICATE {b64}";
-
648 client.WriteLine(authLine, Priority.Critical);
-
649 cancellationToken.ThrowIfCancellationRequested();
-
650
-
651 Logger.LogTrace("Finishing authentication...");
-
652 client.WriteLine("CAP END", Priority.Critical);
-
653 }
-
-
654
-
-
660 async ValueTask HardDisconnect(CancellationToken cancellationToken)
-
661 {
-
662 if (!Connected)
-
663 {
-
664 Logger.LogTrace("Not hard disconnecting, already offline");
-
665 return;
-
666 }
-
667
-
668 Logger.LogTrace("Hard disconnect");
-
669
-
670 disconnecting = true;
+
631
+
632 Logger.LogTrace("Performing handshake...");
+
633 client.OnReadLine += AuthenticationDelegate;
+
634 try
+
635 {
+
636 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
637 timeoutCts.CancelAfter(TimeSpan.FromSeconds(25));
+
638 var timeoutToken = timeoutCts.Token;
+
639
+
640 var listenTimeSpan = TimeSpan.FromMilliseconds(10);
+
641 for (; !receivedAck;
+
642 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
+
643 await NonBlockingListen(cancellationToken);
+
644
+
645 client.WriteLine("AUTHENTICATE PLAIN", Priority.Critical);
+
646 timeoutToken.ThrowIfCancellationRequested();
+
647
+
648 for (; !receivedPlus;
+
649 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
+
650 await NonBlockingListen(cancellationToken);
+
651 }
+
652 finally
+
653 {
+
654 client.OnReadLine -= AuthenticationDelegate;
+
655 }
+
656
+
657 cancellationToken.ThrowIfCancellationRequested();
+
658
+
659 // Stolen! https://github.com/znc/znc/blob/1e697580155d5a38f8b5a377f3b1d94aaa979539/modules/sasl.cpp#L196
+
660 Logger.LogTrace("Sending credentials...");
+
661 var authString = String.Format(
+
662 CultureInfo.InvariantCulture,
+
663 "{0}{1}{0}{1}{2}",
+
664 nickname,
+
665 '\0',
+
666 password);
+
667 var b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
+
668 var authLine = $"AUTHENTICATE {b64}";
+
669 client.WriteLine(authLine, Priority.Critical);
+
670 cancellationToken.ThrowIfCancellationRequested();
671
-
672 // This call blocks permanently randomly sometimes
-
673 // Frankly I don't give a shit
-
674 var disconnectTask = Task.Factory.StartNew(
-
675 () =>
-
676 {
-
677 try
-
678 {
-
679 client.Disconnect();
-
680 }
-
681 catch (Exception e)
-
682 {
-
683 Logger.LogWarning(e, "Error disconnecting IRC!");
-
684 }
-
685 },
-
686 cancellationToken,
- -
688 TaskScheduler.Current);
-
689
-
690 await Task.WhenAny(
-
691 Task.WhenAll(
-
692 disconnectTask,
-
693 listenTask ?? Task.CompletedTask),
-
694 AsyncDelayer.Delay(TimeSpan.FromSeconds(5), cancellationToken));
-
695 }
+
672 Logger.LogTrace("Finishing authentication...");
+
673 client.WriteLine("CAP END", Priority.Critical);
+
674 }
-
696 }
+
675
+
+
681 async ValueTask HardDisconnect(CancellationToken cancellationToken)
+
682 {
+
683 if (!Connected)
+
684 {
+
685 Logger.LogTrace("Not hard disconnecting, already offline");
+
686 return;
+
687 }
+
688
+
689 Logger.LogTrace("Hard disconnect");
+
690
+
691 // This call blocks permanently randomly sometimes
+
692 // Frankly I don't give a shit
+
693 var disconnectTask = Task.Factory.StartNew(
+
694 () =>
+
695 {
+
696 try
+
697 {
+
698 client.Disconnect();
+
699 }
+
700 catch (Exception e)
+
701 {
+
702 Logger.LogWarning(e, "Error disconnecting IRC!");
+
703 }
+
704 },
+
705 cancellationToken,
+ +
707 TaskScheduler.Current);
+
708
+
709 await Task.WhenAny(
+
710 Task.WhenAll(
+
711 disconnectTask,
+
712 listenTask ?? Task.CompletedTask),
+
713 AsyncDelayer.Delay(TimeSpan.FromSeconds(5), cancellationToken));
+
714 }
-
697}
+
715
+
+
721 IrcFeatures InstantiateClient()
+
722 {
+
723 var newClient = new IrcFeatures
+
724 {
+
725 SupportNonRfc = true,
+
726 CtcpUserInfo = "You are going to play. And I am going to watch. And everything will be just fine...",
+
727 AutoRejoin = true,
+
728 AutoRejoinOnKick = true,
+
729 AutoRelogin = false,
+
730 AutoRetry = false,
+
731 AutoReconnect = false,
+
732 ActiveChannelSyncing = true,
+
733 AutoNickHandling = true,
+
734 CtcpVersion = assemblyInfo.VersionString,
+
735 UseSsl = ssl,
+
736 EnableUTF8Recode = true,
+
737 };
+
738 if (ssl)
+
739 newClient.ValidateServerCertificate = true; // dunno if it defaults to that or what
+
740
+
741 newClient.OnChannelMessage += Client_OnChannelMessage;
+
742 newClient.OnQueryMessage += Client_OnQueryMessage;
+
743
+
744 if (loggingConfiguration.ProviderNetworkDebug)
+
745 {
+
746 newClient.OnReadLine += (sender, e) => Logger.LogTrace("READ: {line}", e.Line);
+
747 newClient.OnWriteLine += (sender, e) => Logger.LogTrace("WRITE: {line}", e.Line);
+
748 }
+
749
+
750 newClient.OnError += (sender, e) =>
+
751 {
+
752 Logger.LogError("IRC ERROR: {error}", e.ErrorMessage);
+
753 newClient.Disconnect();
+
754 };
+
755
+
756 return newClient;
+
757 }
+
+
758 }
+
+
759}
Information about an engine installation.
@@ -718,35 +764,39 @@ $(document).ready(function() { init_codefold(0); });
ChatConnectionStringBuilder for ChatProvider.Irc.
Represents a tgs_chat_user datum.
Definition ChatUser.cs:12
- -
readonly IrcFeatures client
The IrcFeatures client.
-
readonly ushort port
Port of the server to connect to.
-
readonly string password
Password which will used for authentication.
+ +
IrcFeatures InstantiateClient()
Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to caus...
+
readonly IAssemblyInformationProvider assemblyInfo
The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.
+
readonly ushort port
Port of the server to connect to.
+
readonly string password
Password which will used for authentication.
override async ValueTask< Dictionary< Models.ChatChannel, IEnumerable< ChannelRepresentation > > > MapChannelsImpl(IEnumerable< Models.ChatChannel > channels, CancellationToken cancellationToken)
-
override async ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage(Models.RevisionInformation revisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
Send the message for a deployment.A ValueTask<TResult> resulting in a Func<T1, T2,...
-
override string BotMention
The string that indicates the IProvider was mentioned.
-
override async ValueTask DisconnectImpl(CancellationToken cancellationToken)
- -
async ValueTask HardDisconnect(CancellationToken cancellationToken)
Attempt to disconnect from IRC immediately.
-
const int PreambleMessageLength
Length of the preamble when writing a message to the server. Must be summed with the channel name to ...
- -
async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
Run SASL authentication on client.
-
readonly string address
Address of the server to connect to.
+
override async ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage(Models.RevisionInformation revisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
Send the message for a deployment.A ValueTask<TResult> resulting in a Func<T1, T2,...
+
override string BotMention
The string that indicates the IProvider was mentioned.
+
override async ValueTask DisconnectImpl(CancellationToken cancellationToken)
+ +
IrcProvider(IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< IrcProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, Models.ChatBot chatBot, FileLoggingConfiguration loggingConfiguration)
Initializes a new instance of the IrcProvider class.
+
async ValueTask HardDisconnect(CancellationToken cancellationToken)
Attempt to disconnect from IRC immediately.
+
const int PreambleMessageLength
Length of the preamble when writing a message to the server. Must be summed with the channel name to ...
+ +
async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
Run SASL authentication on client.
+
readonly string address
Address of the server to connect to.
void Client_OnQueryMessage(object sender, IrcEventArgs e)
When a query message is received in IRC.
-
override async ValueTask Connect(CancellationToken cancellationToken)
-
readonly? IrcPasswordType passwordType
The IrcPasswordType of password.
- - -
void HandleMessage(IrcEventArgs e, bool isPrivate)
Handle an IRC message.
-
readonly Dictionary< ulong, string > queryChannelIdMap
Map of ChannelRepresentation.RealIds to query users.
-
override bool Connected
If the IProvider is currently connected.
-
override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
Send a message to the IProvider.A ValueTask representing the running operation.
+
override async ValueTask Connect(CancellationToken cancellationToken)
+
readonly? IrcPasswordType passwordType
The IrcPasswordType of password.
+
async ValueTask Login(IrcFeatures client, string nickname, CancellationToken cancellationToken)
Register the client on the network.
+ +
void HandleMessage(IrcEventArgs e, bool isPrivate)
Handle an IRC message.
+ +
readonly Dictionary< ulong, string > queryChannelIdMap
Map of ChannelRepresentation.RealIds to query users.
+
override bool Connected
If the IProvider is currently connected.
+
readonly bool ssl
Wether or not this IRC client is to use ssl.
+
override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
Send a message to the IProvider.A ValueTask representing the running operation.
+
readonly FileLoggingConfiguration loggingConfiguration
The FileLoggingConfiguration for the IrcProvider.
void Client_OnChannelMessage(object sender, IrcEventArgs e)
When a channel message is received in IRC.
-
const int MessageBytesLimit
Hard limit to sendable message size in bytes.
-
Task? listenTask
The ValueTask used for IrcConnection.Listen(bool).
+
const int MessageBytesLimit
Hard limit to sendable message size in bytes.
+
Task? listenTask
The ValueTask used for IrcConnection.Listen(bool).
Task NonBlockingListen(CancellationToken cancellationToken)
Perform a non-blocking IrcConnection.Listen(bool).
-
IrcProvider(IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< IrcProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, Models.ChatBot chatBot)
Initializes a new instance of the IrcProvider class.
-
readonly Dictionary< ulong, string?> channelIdMap
Map of ChannelRepresentation.RealIds to channel names.
+
readonly Dictionary< ulong, string?> channelIdMap
Map of ChannelRepresentation.RealIds to channel names.
Represents a message received by a IProvider.
Definition Message.cs:9
static string GetEngineCompilerPrefix(Api.Models.EngineType engineType)
Get the prefix for messages about deployments.
@@ -754,6 +804,7 @@ $(document).ready(function() { init_codefold(0); });
ILogger< Provider > Logger
The ILogger for the Provider.
Definition Provider.cs:35
Represents a message to send to a chat provider.
+
IIOManager that resolves paths to Environment.CurrentDirectory.
const TaskCreationOptions BlockingTaskCreationOptions
The TaskCreationOptions used to spawn Tasks for potentially long running, blocking operations.
Operation exceptions thrown from the context of a Models.Job.
@@ -761,13 +812,13 @@ $(document).ready(function() { init_codefold(0); });
Task Delay(TimeSpan timeSpan, CancellationToken cancellationToken)
Create a Task that completes after a given timeSpan .A Task representing the running operation.
Manages the runtime of Jobs.
-
IrcPasswordType
Represents the type of a password for a ChatProvider.Irc.
ErrorCode
Types of Response.ErrorMessageResponses that the API may return.
Definition ErrorCode.cs:12
+ diff --git a/_provider_factory_8cs_source.html b/_provider_factory_8cs_source.html index a075d87242..3d5ce19819 100644 --- a/_provider_factory_8cs_source.html +++ b/_provider_factory_8cs_source.html @@ -109,57 +109,64 @@ $(document).ready(function() { init_codefold(0); });
37
42
-
- - - - -
55 ILoggerFactory loggerFactory,
-
56 IOptions<GeneralConfiguration> generalConfigurationOptions)
-
57 {
-
58 this.jobManager = jobManager ?? throw new ArgumentNullException(nameof(jobManager));
-
59 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
-
60 this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
-
61 this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
-
62 generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
-
63 }
+ +
47
+
+ + + + +
61 ILoggerFactory loggerFactory,
+
62 IOptions<GeneralConfiguration> generalConfigurationOptions,
+
63 IOptions<FileLoggingConfiguration> loggingConfigurationOptions)
+
64 {
+
65 this.jobManager = jobManager ?? throw new ArgumentNullException(nameof(jobManager));
+
66 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
+
67 this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
+
68 this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
+
69 generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
+
70 loggingConfiguration = loggingConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(loggingConfigurationOptions));
+
71 }
-
64
-
-
66 public IProvider CreateProvider(Models.ChatBot settings)
-
67 {
-
68 ArgumentNullException.ThrowIfNull(settings);
-
69 return settings.Provider switch
-
70 {
-
71 ChatProvider.Irc => new IrcProvider(
- - -
74 loggerFactory.CreateLogger<IrcProvider>(),
- -
76 settings),
-
77 ChatProvider.Discord => new DiscordProvider(
- - -
80 loggerFactory.CreateLogger<DiscordProvider>(),
- -
82 settings,
- -
84 _ => throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid ChatProvider: {0}", settings.Provider)),
-
85 };
-
86 }
+
72
+
+
74 public IProvider CreateProvider(Models.ChatBot settings)
+
75 {
+
76 ArgumentNullException.ThrowIfNull(settings);
+
77 return settings.Provider switch
+
78 {
+
79 ChatProvider.Irc => new IrcProvider(
+ + +
82 loggerFactory.CreateLogger<IrcProvider>(),
+ +
84 settings,
+ +
86 ChatProvider.Discord => new DiscordProvider(
+ + +
89 loggerFactory.CreateLogger<DiscordProvider>(),
+ +
91 settings,
+ +
93 _ => throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid ChatProvider: {0}", settings.Provider)),
+
94 };
+
95 }
-
87 }
+
96 }
-
88}
- +
97}
+ +
readonly FileLoggingConfiguration loggingConfiguration
The FileLoggingConfiguration for the ProviderFactory.
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the ProviderFactory.
-
IProvider CreateProvider(Models.ChatBot settings)
Create a IProvider.A new IProvider.
+
IProvider CreateProvider(Models.ChatBot settings)
Create a IProvider.A new IProvider.
readonly GeneralConfiguration generalConfiguration
The GeneralConfiguration for the ProviderFactory.
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the ProviderFactory.
readonly IJobManager jobManager
The IJobManager for the ProviderFactory.
-
ProviderFactory(IJobManager jobManager, IAssemblyInformationProvider assemblyInformationProvider, IAsyncDelayer asyncDelayer, ILoggerFactory loggerFactory, IOptions< GeneralConfiguration > generalConfigurationOptions)
Initializes a new instance of the ProviderFactory class.
+
ProviderFactory(IJobManager jobManager, IAssemblyInformationProvider assemblyInformationProvider, IAsyncDelayer asyncDelayer, ILoggerFactory loggerFactory, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< FileLoggingConfiguration > loggingConfigurationOptions)
Initializes a new instance of the ProviderFactory class.
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the ProviderFactory.
+ diff --git a/changelog.yml b/changelog.yml index 3b92e0b082..a2a7addeb0 100644 --- a/changelog.yml +++ b/changelog.yml @@ -1,5 +1,12 @@ Components: Configuration: + - Version: 5.3.0 + Changes: + - Descriptions: + - Adds a new `ProviderNetworkDebug` flag in `FileLogging` to debug IRC traffic. + Author: craftxbox + PullRequest: 1935 + Unreleased: true - Version: 5.2.0 Changes: - Descriptions: @@ -174,6 +181,12 @@ Components: - The swarm protocol is now versioned separately from the TGS core version. This allows for slightly differing servers to group together in a swarm. Updates will still synchronize all servers to the same version. **It is still recommended that all servers in the swarm run the same TGS version.** Author: Cyberboss PullRequest: 1929 + - Descriptions: + - Refactors the IrcProvider to be a bit more resilient. + - Fixes the IrcProvider getting permanently stuck if the connection between TGS and IRC is ever severed. + - Adds the OPER Irc authentication mode, helpful for anyone running their own IRC servers. + Author: craftxbox + PullRequest: 1935 - Descriptions: - Fixed some oddities in the authentication/authorization pipeline. Author: Cyberboss @@ -3850,6 +3863,10 @@ Components: HttpApi: - Version: 10.10.0 Changes: + - Descriptions: + - Adds new IRC authentication type with index 3 for /OPER authentication + Author: craftxbox + PullRequest: 1935 - Descriptions: - Reserved error code 109 for a future change. Author: Cyberboss @@ -4670,6 +4687,10 @@ Components: NugetApi: - Version: 16.0.0 Changes: + - Descriptions: + - Adds IrcPasswordType.Oper for /OPER authentication + Author: craftxbox + PullRequest: 1935 - Descriptions: - '**BREAKING:** Removed `IEquatable` implementations for `SwarmServer`s.' - '**BREAKING:** `RightsHelper.RoleNames` now returns an `IEnumerable` instead of a comma separated `string`.' diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html index ff8449fb39..11f914e7d4 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html @@ -432,7 +432,7 @@ Here is the caller graph for this function:

References Tgstation.Server.Api.Models.EngineVersion.CustomIteration, Tgstation.Server.Api.Models.EngineVersion.Engine, Tgstation.Server.Api.Models.EngineVersion.SourceSHA, Tgstation.Server.Api.Models.EngineVersion.ToString(), and Tgstation.Server.Api.Models.EngineVersion.Version.

-

Referenced by Tgstation.Server.Host.Components.Engine.EngineManager.AssertAndLockVersion(), Tgstation.Server.Host.Components.Engine.EngineManager.ChangeVersion(), Tgstation.Server.Host.Components.Engine.EngineManager.DeleteVersion(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), and Tgstation.Server.Api.Models.EngineVersion.ToString().

+

Referenced by Tgstation.Server.Host.Components.Engine.EngineManager.AssertAndLockVersion(), Tgstation.Server.Host.Components.Engine.EngineManager.ChangeVersion(), Tgstation.Server.Host.Components.Engine.EngineManager.DeleteVersion(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), and Tgstation.Server.Api.Models.EngineVersion.ToString().

Here is the call graph for this function:
@@ -714,7 +714,7 @@ Here is the caller graph for this function:

Definition at line 24 of file EngineVersion.cs.

24{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Watchdog.WindowsWatchdog.ApplyInitialDmb(), Tgstation.Server.Host.Components.Engine.ByondInstallation.ByondInstallation(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.CanUseSwappableDmbProvider(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ChangeSettings(), Tgstation.Server.Host.Components.Engine.EngineManager.CheckVersionParameter(), Tgstation.Server.Host.Components.Engine.EngineInstallerBase.CheckVersionValidity(), Tgstation.Server.Host.Components.Engine.DelegatingEngineInstaller.DelegateCall< TReturn >(), Tgstation.Server.Api.Models.EngineVersion.EngineVersion(), Tgstation.Server.Api.Models.EngineVersion.Equals(), Tgstation.Server.Host.Components.Chat.Commands.EngineCommand.Invoke(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.OpenDreamInstallation(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage(), Tgstation.Server.Api.Models.EngineVersion.ToString(), and Tgstation.Server.Api.Models.EngineVersion.TryParse().

+

Referenced by Tgstation.Server.Host.Components.Watchdog.WindowsWatchdog.ApplyInitialDmb(), Tgstation.Server.Host.Components.Engine.ByondInstallation.ByondInstallation(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.CanUseSwappableDmbProvider(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ChangeSettings(), Tgstation.Server.Host.Components.Engine.EngineManager.CheckVersionParameter(), Tgstation.Server.Host.Components.Engine.EngineInstallerBase.CheckVersionValidity(), Tgstation.Server.Host.Components.Engine.DelegatingEngineInstaller.DelegateCall< TReturn >(), Tgstation.Server.Api.Models.EngineVersion.EngineVersion(), Tgstation.Server.Api.Models.EngineVersion.Equals(), Tgstation.Server.Host.Components.Chat.Commands.EngineCommand.Invoke(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.OpenDreamInstallation(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage(), Tgstation.Server.Api.Models.EngineVersion.ToString(), and Tgstation.Server.Api.Models.EngineVersion.TryParse().

diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_irc_connection_string_builder.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_irc_connection_string_builder.html index d875164fdf..0c8ebb6a3d 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_irc_connection_string_builder.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_irc_connection_string_builder.html @@ -232,19 +232,20 @@ Properties
88 case IrcPasswordType.NickServ:
89 case IrcPasswordType.Sasl:
90 case IrcPasswordType.Server:
-
91 PasswordType = passwordType;
-
92 break;
-
93 default:
-
94 break;
-
95 }
-
96
-
97 if (splits.Length < 6)
-
98 return;
-
99
-
100 var rest = new List<string>(splits);
-
101 rest.RemoveRange(0, 5);
-
102 Password = String.Join(";", rest);
-
103 }
+
91 case IrcPasswordType.Oper:
+
92 PasswordType = passwordType;
+
93 break;
+
94 default:
+
95 break;
+
96 }
+
97
+
98 if (splits.Length < 6)
+
99 return;
+
100
+
101 var rest = new List<string>(splits);
+
102 rest.RemoveRange(0, 5);
+
103 Password = String.Join(";", rest);
+
104 }
IrcPasswordType? PasswordType
The optional IrcPasswordType to use.
@@ -275,29 +276,29 @@ Properties

-

Definition at line 106 of file IrcConnectionStringBuilder.cs.

-
107 {
-
108 var sb = new StringBuilder();
-
109 sb.Append(Address);
-
110 sb.Append(';');
-
111 sb.Append(Port);
-
112 sb.Append(';');
-
113 sb.Append(Nickname);
-
114 sb.Append(';');
-
115
-
116 if (UseSsl.HasValue)
-
117 sb.Append(Convert.ToInt32(UseSsl.Value));
-
118
-
119 if (PasswordType.HasValue)
-
120 {
-
121 sb.Append(';');
-
122 sb.Append((int)PasswordType);
-
123 sb.Append(';');
-
124 sb.Append(Password);
-
125 }
-
126
-
127 return sb.ToString();
-
128 }
+

Definition at line 107 of file IrcConnectionStringBuilder.cs.

+
108 {
+
109 var sb = new StringBuilder();
+
110 sb.Append(Address);
+
111 sb.Append(';');
+
112 sb.Append(Port);
+
113 sb.Append(';');
+
114 sb.Append(Nickname);
+
115 sb.Append(';');
+
116
+
117 if (UseSsl.HasValue)
+
118 sb.Append(Convert.ToInt32(UseSsl.Value));
+
119
+
120 if (PasswordType.HasValue)
+
121 {
+
122 sb.Append(';');
+
123 sb.Append((int)PasswordType);
+
124 sb.Append(';');
+
125 sb.Append(Password);
+
126 }
+
127
+
128 return sb.ToString();
+
129 }

References Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Address, Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Nickname, Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Password, Tgstation.Server.Api.Models.IrcConnectionStringBuilder.PasswordType, Tgstation.Server.Api.Models.IrcConnectionStringBuilder.Port, and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.UseSsl.

@@ -329,7 +330,7 @@ Properties

Definition at line 20 of file IrcConnectionStringBuilder.cs.

20{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

+

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

@@ -358,7 +359,7 @@ Properties

Definition at line 30 of file IrcConnectionStringBuilder.cs.

30{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

+

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

@@ -387,7 +388,7 @@ Properties

Definition at line 45 of file IrcConnectionStringBuilder.cs.

45{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

+

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

@@ -416,7 +417,7 @@ Properties

Definition at line 40 of file IrcConnectionStringBuilder.cs.

40{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

+

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

@@ -445,7 +446,7 @@ Properties

Definition at line 25 of file IrcConnectionStringBuilder.cs.

25{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

+

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

@@ -474,7 +475,7 @@ Properties

Definition at line 35 of file IrcConnectionStringBuilder.cs.

35{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

+

Referenced by Tgstation.Server.Api.Models.IrcConnectionStringBuilder.IrcConnectionStringBuilder(), and Tgstation.Server.Api.Models.IrcConnectionStringBuilder.ToString().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html index 5c2bac1cf7..40728814cf 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html @@ -81,19 +81,19 @@ $(function() {

This is the complete list of members for Tgstation.Server.Host.Components.Chat.Providers.IrcProvider, including all inherited members.

- - - - - - - - - - - - - + + + + + + + + + + + + + @@ -103,33 +103,37 @@ $(function() { - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
addressTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
AsyncDelayerTgstation.Server.Host.Components.Chat.Providers.Providerprotected
BotMentionTgstation.Server.Host.Components.Chat.Providers.IrcProvider
channelIdCounterTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
channelIdMapTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
ChatBotTgstation.Server.Host.Components.Chat.Providers.Providerprotected
clientTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Client_OnChannelMessage(object sender, IrcEventArgs e)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Client_OnQueryMessage(object sender, IrcEventArgs e)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Connect(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprotected
ConnectedTgstation.Server.Host.Components.Chat.Providers.IrcProvider
Disconnect(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
DisconnectImpl(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprotected
disconnectingTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
assemblyInfoTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
AsyncDelayerTgstation.Server.Host.Components.Chat.Providers.Providerprotected
BotMentionTgstation.Server.Host.Components.Chat.Providers.IrcProvider
channelIdCounterTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
channelIdMapTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
ChatBotTgstation.Server.Host.Components.Chat.Providers.Providerprotected
clientTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Client_OnChannelMessage(object sender, IrcEventArgs e)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Client_OnQueryMessage(object sender, IrcEventArgs e)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Connect(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprotected
ConnectedTgstation.Server.Host.Components.Chat.Providers.IrcProvider
Disconnect(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
DisconnectImpl(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprotected
DisposeAsync()Tgstation.Server.Host.Components.Chat.Providers.IrcProvidervirtual
DisposedTgstation.Server.Host.Components.Chat.Providers.Provider
EnqueueMessage(Message? message)Tgstation.Server.Host.Components.Chat.Providers.Providerprotected
InitialConnectionJobTgstation.Server.Host.Components.Chat.Providers.Provider
initialConnectionTcsTgstation.Server.Host.Components.Chat.Providers.Providerprivate
InitialMappingComplete()Tgstation.Server.Host.Components.Chat.Providers.Provider
IrcProvider(IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< IrcProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, Models.ChatBot chatBot)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
jobManagerTgstation.Server.Host.Components.Chat.Providers.Providerprivate
listenTaskTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
LoggerTgstation.Server.Host.Components.Chat.Providers.Providerprotected
MapChannels(IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
MapChannelsImpl(IEnumerable< Models.ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprotected
Tgstation::Server::Host::Components::Chat::Providers::Provider.MapChannelsImpl(IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Providerprotected
MessageBytesLimitTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivatestatic
messageQueueTgstation.Server.Host.Components.Chat.Providers.Providerprivate
nextMessageTgstation.Server.Host.Components.Chat.Providers.Providerprivate
InstantiateClient()Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
IrcProvider(IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< IrcProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, Models.ChatBot chatBot, FileLoggingConfiguration loggingConfiguration)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
jobManagerTgstation.Server.Host.Components.Chat.Providers.Providerprivate
listenTaskTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
LoggerTgstation.Server.Host.Components.Chat.Providers.Providerprotected
loggingConfigurationTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
Login(IrcFeatures client, string nickname, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
MapChannels(IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
MapChannelsImpl(IEnumerable< Models.ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprotected
Tgstation::Server::Host::Components::Chat::Providers::Provider.MapChannelsImpl(IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Providerprotected
MessageBytesLimitTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivatestatic
messageQueueTgstation.Server.Host.Components.Chat.Providers.Providerprivate
NextMessage(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
nicknameTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
NonBlockingListen(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
passwordTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
passwordTypeTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
portTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
PreambleMessageLengthTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivatestatic
Provider(IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< Provider > logger, ChatBot chatBot)Tgstation.Server.Host.Components.Chat.Providers.Providerprotected
queryChannelIdMapTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
reconnectCtsTgstation.Server.Host.Components.Chat.Providers.Providerprivate
ReconnectionLoop(uint reconnectInterval, bool connectNow, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Providerprivate
reconnectTaskTgstation.Server.Host.Components.Chat.Providers.Providerprivate
reconnectTaskLockTgstation.Server.Host.Components.Chat.Providers.Providerprivate
SaslAuthenticate(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
SendUpdateMessage(Models.RevisionInformation revisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
SetReconnectInterval(uint reconnectInterval, bool connectNow)Tgstation.Server.Host.Components.Chat.Providers.Provider
nextMessageTgstation.Server.Host.Components.Chat.Providers.Providerprivate
nicknameTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
NonBlockingListen(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
passwordTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
passwordTypeTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
portTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
PreambleMessageLengthTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivatestatic
Provider(IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< Provider > logger, ChatBot chatBot)Tgstation.Server.Host.Components.Chat.Providers.Providerprotected
queryChannelIdMapTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
reconnectCtsTgstation.Server.Host.Components.Chat.Providers.Providerprivate
ReconnectionLoop(uint reconnectInterval, bool connectNow, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Providerprivate
reconnectTaskTgstation.Server.Host.Components.Chat.Providers.Providerprivate
reconnectTaskLockTgstation.Server.Host.Components.Chat.Providers.Providerprivate
SaslAuthenticate(CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
SendUpdateMessage(Models.RevisionInformation revisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
SetReconnectInterval(uint reconnectInterval, bool connectNow)Tgstation.Server.Host.Components.Chat.Providers.Provider
sslTgstation.Server.Host.Components.Chat.Providers.IrcProviderprivate
StopReconnectionTimer()Tgstation.Server.Host.Components.Chat.Providers.Providerprivate
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html index 2e6ee0b0bc..37993581d1 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html @@ -107,52 +107,58 @@ Collaboration diagram for Tgstation.Server.Host.Components.Chat.Providers.IrcPro
Collaboration graph
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
- - - + + + @@ -321,6 +327,9 @@ Properties

Public Member Functions

 IrcProvider (IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< IrcProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, Models.ChatBot chatBot)
 Initializes a new instance of the IrcProvider class.
 
 IrcProvider (IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< IrcProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, Models.ChatBot chatBot, FileLoggingConfiguration loggingConfiguration)
 Initializes a new instance of the IrcProvider class.
 
override async ValueTask DisposeAsync ()
 
override async ValueTask SendMessage (Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
+ + + @@ -339,18 +348,21 @@ Private Member Functions + + +

Private Member Functions

async ValueTask Login (IrcFeatures client, string nickname, CancellationToken cancellationToken)
 Register the client on the network.
 
void HandleMessage (IrcEventArgs e, bool isPrivate)
 Handle an IRC message.
 
async ValueTask HardDisconnect (CancellationToken cancellationToken)
 Attempt to disconnect from IRC immediately.
 
IrcFeatures InstantiateClient ()
 Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to cause issues.
 
- - - + + + @@ -366,15 +378,21 @@ Private Attributes + + + + + + + + + - - -

Private Attributes

readonly IrcFeatures client
 The IrcFeatures client.
 
readonly string address
 Address of the server to connect to.
 
readonly ushort port
 Port of the server to connect to.
 
readonly bool ssl
 Wether or not this IRC client is to use ssl.
 
readonly string nickname
 IRC nickname.
 
readonly Dictionary< ulong, string > queryChannelIdMap
 Map of ChannelRepresentation.RealIds to query users.
 
readonly IAssemblyInformationProvider assemblyInfo
 The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.
 
readonly FileLoggingConfiguration loggingConfiguration
 The FileLoggingConfiguration for the IrcProvider.
 
IrcFeatures client
 The IrcFeatures client.
 
Task? listenTask
 The ValueTask used for IrcConnection.Listen(bool).
 
ulong channelIdCounter
 Id counter for channelIdMap.
 
bool disconnecting
 If we are disconnecting.
 
@@ -395,10 +413,10 @@ Additional Inherited Members

Detailed Description

IProvider for internet relay chat.

-

Definition at line 27 of file IrcProvider.cs.

+

Definition at line 28 of file IrcProvider.cs.

Constructor & Destructor Documentation

- -

◆ IrcProvider()

+ +

◆ IrcProvider()

@@ -431,7 +449,13 @@ Additional Inherited Members
- + + + + + + + @@ -449,79 +473,63 @@ Additional Inherited Members +

Static Private Attributes

Models::ChatBot chatBot chatBot,
FileLoggingConfiguration loggingConfiguration 
loggerThe ILogger for the Provider.
assemblyInformationProviderThe IAssemblyInformationProvider to get the IAssemblyInformationProvider.VersionString from.
chatBotThe Models.ChatBot for the Provider.
loggingConfigurationThe FileLoggingConfiguration for the Provider.
-

Definition at line 108 of file IrcProvider.cs.

-
114 : base(jobManager, asyncDelayer, logger, chatBot)
-
115 {
-
116 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
-
117
-
118 var builder = chatBot.CreateConnectionStringBuilder();
-
119 if (builder == null || !builder.Valid || builder is not IrcConnectionStringBuilder ircBuilder)
-
120 throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!");
-
121
-
122 address = ircBuilder.Address!;
-
123 port = ircBuilder.Port!.Value;
-
124 nickname = ircBuilder.Nickname!;
-
125
-
126 password = ircBuilder.Password!;
-
127 passwordType = ircBuilder.PasswordType;
-
128
-
129 client = new IrcFeatures
-
130 {
-
131 SupportNonRfc = true,
-
132 CtcpUserInfo = "You are going to play. And I am going to watch. And everything will be just fine...",
-
133 AutoRejoin = true,
-
134 AutoRejoinOnKick = true,
-
135 AutoRelogin = true,
-
136 AutoRetry = false,
-
137 AutoReconnect = false,
-
138 ActiveChannelSyncing = true,
-
139 AutoNickHandling = true,
-
140 CtcpVersion = assemblyInformationProvider.VersionString,
-
141 UseSsl = ircBuilder.UseSsl!.Value,
-
142 };
-
143 if (ircBuilder.UseSsl.Value)
-
144 client.ValidateServerCertificate = true; // dunno if it defaults to that or what
-
145
-
146 client.OnChannelMessage += Client_OnChannelMessage;
-
147 client.OnQueryMessage += Client_OnQueryMessage;
+

Definition at line 120 of file IrcProvider.cs.

+
127 : base(jobManager, asyncDelayer, logger, chatBot)
+
128 {
+
129 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
+
130 ArgumentNullException.ThrowIfNull(loggingConfiguration);
+
131
+
132 var builder = chatBot.CreateConnectionStringBuilder();
+
133 if (builder == null || !builder.Valid || builder is not IrcConnectionStringBuilder ircBuilder)
+
134 throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!");
+
135
+
136 address = ircBuilder.Address!;
+
137 port = ircBuilder.Port!.Value;
+
138 ssl = ircBuilder.UseSsl!.Value;
+
139 nickname = ircBuilder.Nickname!;
+
140
+
141 password = ircBuilder.Password!;
+
142 passwordType = ircBuilder.PasswordType;
+
143
+
144 assemblyInfo = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
+
145 this.loggingConfiguration = loggingConfiguration ?? throw new ArgumentNullException(nameof(loggingConfiguration));
+
146
+
148
-
149 /*client.OnReadLine += (sender, e) => Logger.LogTrace("READ: {line}", e.Line);
-
150 client.OnWriteLine += (sender, e) => Logger.LogTrace("WRITE: {line}", e.Line);*/
-
151
-
152 channelIdMap = new Dictionary<ulong, string?>();
-
153 queryChannelIdMap = new Dictionary<ulong, string>();
- -
155 }
+
149 channelIdMap = new Dictionary<ulong, string?>();
+
150 queryChannelIdMap = new Dictionary<ulong, string>();
+ +
152 }
ChatConnectionStringBuilder for ChatProvider.Irc.
-
readonly IrcFeatures client
The IrcFeatures client.
-
readonly ushort port
Port of the server to connect to.
-
readonly string password
Password which will used for authentication.
- -
readonly string address
Address of the server to connect to.
-
void Client_OnQueryMessage(object sender, IrcEventArgs e)
When a query message is received in IRC.
-
readonly? IrcPasswordType passwordType
The IrcPasswordType of password.
- -
readonly Dictionary< ulong, string > queryChannelIdMap
Map of ChannelRepresentation.RealIds to query users.
-
void Client_OnChannelMessage(object sender, IrcEventArgs e)
When a channel message is received in IRC.
-
readonly Dictionary< ulong, string?> channelIdMap
Map of ChannelRepresentation.RealIds to channel names.
+
IrcFeatures InstantiateClient()
Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to caus...
+
readonly IAssemblyInformationProvider assemblyInfo
The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.
+
readonly ushort port
Port of the server to connect to.
+
readonly string password
Password which will used for authentication.
+ +
readonly string address
Address of the server to connect to.
+
readonly? IrcPasswordType passwordType
The IrcPasswordType of password.
+ + +
readonly Dictionary< ulong, string > queryChannelIdMap
Map of ChannelRepresentation.RealIds to query users.
+
readonly bool ssl
Wether or not this IRC client is to use ssl.
+
readonly FileLoggingConfiguration loggingConfiguration
The FileLoggingConfiguration for the IrcProvider.
+
readonly Dictionary< ulong, string?> channelIdMap
Map of ChannelRepresentation.RealIds to channel names.
readonly IJobManager jobManager
The IJobManager for the Provider.
Definition Provider.cs:40
-
-

References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.address, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdCounter, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.Client_OnChannelMessage(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.Client_OnQueryMessage(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.nickname, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.password, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.passwordType, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.port, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap, and Tgstation.Server.Host.System.IAssemblyInformationProvider.VersionString.

+

References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.address, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.assemblyInfo, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdCounter, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.InstantiateClient(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.loggingConfiguration, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.nickname, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.password, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.passwordType, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.port, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap, and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.ssl.

Here is the call graph for this function:
-
- - - - - - +
+ + + +
@@ -571,18 +579,6 @@ Here is the call graph for this function:
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

-
-Here is the caller graph for this function:
-
-
- - - - - -
- @@ -628,18 +624,6 @@ Here is the caller graph for this function: -

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

-
-Here is the caller graph for this function:
-
-
- - - - - -
- @@ -668,14 +652,17 @@ Here is the caller graph for this function:

-

Definition at line 370 of file IrcProvider.cs.

-
371 {
-
372 disconnecting = false;
-
373 cancellationToken.ThrowIfCancellationRequested();
-
374 try
-
375 {
-
376 await Task.Factory.StartNew(
-
377 () => client.Connect(address, port),
+

Definition at line 367 of file IrcProvider.cs.

+
368 {
+
369 cancellationToken.ThrowIfCancellationRequested();
+
370 try
+
371 {
+
372 await Task.Factory.StartNew(
+
373 () =>
+
374 {
+ +
376 client.Connect(address, port);
+
377 },
378 cancellationToken,
380 TaskScheduler.Current)
@@ -683,83 +670,65 @@ Here is the caller graph for this function:
382
383 cancellationToken.ThrowIfCancellationRequested();
384
-
385 Logger.LogTrace("Authenticating ({passwordType})...", passwordType);
-
386 switch (passwordType)
-
387 {
-
388 case IrcPasswordType.Server:
-
389 client.Login(nickname, nickname, 0, nickname, password);
-
390 break;
-
391 case IrcPasswordType.NickServ:
-
392 client.Login(nickname, nickname, 0, nickname);
-
393 cancellationToken.ThrowIfCancellationRequested();
-
394 client.SendMessage(SendType.Message, "NickServ", String.Format(CultureInfo.InvariantCulture, "IDENTIFY {0}", password));
-
395 break;
-
396 case IrcPasswordType.Sasl:
-
397 await SaslAuthenticate(cancellationToken);
-
398 break;
-
399 case null:
-
400 client.Login(nickname, nickname, 0, nickname);
-
401 break;
-
402 default:
-
403 throw new InvalidOperationException($"Invalid IrcPasswordType: {passwordType.Value}");
-
404 }
-
405
-
406 cancellationToken.ThrowIfCancellationRequested();
-
407 Logger.LogTrace("Processing initial messages...");
-
408 await NonBlockingListen(cancellationToken);
-
409
-
410 var nickCheckCompleteTcs = new TaskCompletionSource();
-
411 using (cancellationToken.Register(() => nickCheckCompleteTcs.TrySetCanceled(cancellationToken)))
-
412 {
-
413 listenTask = Task.Factory.StartNew(
-
414 async () =>
-
415 {
-
416 Logger.LogTrace("Entering nick check loop");
-
417 while (!disconnecting && client.IsConnected && client.Nickname != nickname)
-
418 {
-
419 client.ListenOnce(true);
-
420 if (disconnecting || !client.IsConnected)
-
421 break;
-
422 await NonBlockingListen(cancellationToken);
-
423
-
424 // ensure we have the correct nick
-
425 if (client.GetIrcUser(nickname) == null)
-
426 client.RfcNick(nickname);
-
427 }
-
428
-
429 nickCheckCompleteTcs.TrySetResult();
+
385 listenTask = Task.Factory.StartNew(
+
386 () =>
+
387 {
+
388 Logger.LogTrace("Starting blocking listen...");
+
389 try
+
390 {
+
391 client.Listen();
+
392 }
+
393 catch (Exception ex)
+
394 {
+
395 Logger.LogWarning(ex, "IRC Main Listen Exception!");
+
396 }
+
397
+
398 Logger.LogTrace("Exiting listening task...");
+
399 },
+
400 cancellationToken,
+
401 DefaultIOManager.BlockingTaskCreationOptions,
+
402 TaskScheduler.Current);
+
403
+
404 Logger.LogTrace("Authenticating ({passwordType})...", passwordType);
+
405 switch (passwordType)
+
406 {
+
407 case IrcPasswordType.Server:
+
408 client.RfcPass(password);
+
409 await Login(client, nickname, cancellationToken);
+
410 break;
+
411 case IrcPasswordType.NickServ:
+
412 await Login(client, nickname, cancellationToken);
+
413 cancellationToken.ThrowIfCancellationRequested();
+
414 client.SendMessage(SendType.Message, "NickServ", String.Format(CultureInfo.InvariantCulture, "IDENTIFY {0}", password));
+
415 break;
+
416 case IrcPasswordType.Sasl:
+
417 await SaslAuthenticate(cancellationToken);
+
418 break;
+
419 case IrcPasswordType.Oper:
+
420 await Login(client, nickname, cancellationToken);
+
421 cancellationToken.ThrowIfCancellationRequested();
+
422 client.RfcOper(nickname, password, Priority.Critical);
+
423 break;
+
424 case null:
+
425 await Login(client, nickname, cancellationToken);
+
426 break;
+
427 default:
+
428 throw new InvalidOperationException($"Invalid IrcPasswordType: {passwordType.Value}");
+
429 }
430
-
431 Logger.LogTrace("Starting blocking listen...");
-
432 try
-
433 {
-
434 client.Listen();
-
435 }
-
436 catch (Exception ex)
-
437 {
-
438 Logger.LogWarning(ex, "IRC Main Listen Exception!");
-
439 }
-
440
-
441 Logger.LogTrace("Exiting listening task...");
-
442 },
-
443 cancellationToken,
-
444 DefaultIOManager.BlockingTaskCreationOptions,
-
445 TaskScheduler.Current);
-
446
-
447 await nickCheckCompleteTcs.Task;
-
448 }
-
449
-
450 Logger.LogTrace("Connection established!");
-
451 }
-
452 catch (Exception e) when (e is not OperationCanceledException)
-
453 {
-
454 throw new JobException(ErrorCode.ChatCannotConnectProvider, e);
-
455 }
-
456 }
+
431 cancellationToken.ThrowIfCancellationRequested();
+
432
+
433 Logger.LogTrace("Connection established!");
+
434 }
+
435 catch (Exception e) when (e is not OperationCanceledException)
+
436 {
+
437 throw new JobException(ErrorCode.ChatCannotConnectProvider, e);
+
438 }
+
439 }
-
async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
Run SASL authentication on client.
-
bool disconnecting
If we are disconnecting.
-
Task? listenTask
The ValueTask used for IrcConnection.Listen(bool).
-
Task NonBlockingListen(CancellationToken cancellationToken)
Perform a non-blocking IrcConnection.Listen(bool).
+
async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
Run SASL authentication on client.
+
async ValueTask Login(IrcFeatures client, string nickname, CancellationToken cancellationToken)
Register the client on the network.
+
Task? listenTask
The ValueTask used for IrcConnection.Listen(bool).
ILogger< Provider > Logger
The ILogger for the Provider.
Definition Provider.cs:35
IIOManager that resolves paths to Environment.CurrentDirectory.
const TaskCreationOptions BlockingTaskCreationOptions
The TaskCreationOptions used to spawn Tasks for potentially long running, blocking operations.
@@ -797,37 +766,37 @@ Here is the caller graph for this function:

-

Definition at line 459 of file IrcProvider.cs.

-
460 {
-
461 try
-
462 {
-
463 await Task.Factory.StartNew(
-
464 () =>
-
465 {
-
466 try
-
467 {
-
468 client.RfcQuit("Mr. Stark, I don't feel so good...", Priority.Critical); // priocritical otherwise it wont go through
-
469 }
-
470 catch (Exception e)
-
471 {
-
472 Logger.LogWarning(e, "Error quitting IRC!");
-
473 }
-
474 },
-
475 cancellationToken,
-
476 DefaultIOManager.BlockingTaskCreationOptions,
-
477 TaskScheduler.Current);
-
478 await HardDisconnect(cancellationToken);
-
479 }
-
480 catch (OperationCanceledException)
-
481 {
-
482 throw;
-
483 }
-
484 catch (Exception e)
-
485 {
-
486 Logger.LogWarning(e, "Error disconnecting from IRC!");
-
487 }
-
488 }
-
async ValueTask HardDisconnect(CancellationToken cancellationToken)
Attempt to disconnect from IRC immediately.
+

Definition at line 442 of file IrcProvider.cs.

+
443 {
+
444 try
+
445 {
+
446 await Task.Factory.StartNew(
+
447 () =>
+
448 {
+
449 try
+
450 {
+
451 client.RfcQuit("Mr. Stark, I don't feel so good...", Priority.Critical); // priocritical otherwise it wont go through
+
452 }
+
453 catch (Exception e)
+
454 {
+
455 Logger.LogWarning(e, "Error quitting IRC!");
+
456 }
+
457 },
+
458 cancellationToken,
+ +
460 TaskScheduler.Current);
+
461 await HardDisconnect(cancellationToken);
+
462 }
+
463 catch (OperationCanceledException)
+
464 {
+
465 throw;
+
466 }
+
467 catch (Exception e)
+
468 {
+
469 Logger.LogWarning(e, "Error disconnecting from IRC!");
+
470 }
+
471 }
+
async ValueTask HardDisconnect(CancellationToken cancellationToken)
Attempt to disconnect from IRC immediately.

References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions.

@@ -860,15 +829,15 @@ Here is the caller graph for this function:

Reimplemented from Tgstation.Server.Host.Components.Chat.Providers.Provider.

-

Definition at line 158 of file IrcProvider.cs.

-
159 {
-
160 await base.DisposeAsync();
-
161
-
162 // DCT: None available
-
163 await HardDisconnect(CancellationToken.None);
-
164 }
+

Definition at line 155 of file IrcProvider.cs.

+
156 {
+
157 await base.DisposeAsync();
+
158
+
159 // DCT: None available
+
160 await HardDisconnect(CancellationToken.None);
+
161 }
-

References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.HardDisconnect().

+

References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.HardDisconnect().

Here is the call graph for this function:
@@ -927,59 +896,59 @@ Here is the call graph for this function:
-

Definition at line 495 of file IrcProvider.cs.

-
496 {
-
497 if (e.Data.Nick.Equals(client.Nickname, StringComparison.OrdinalIgnoreCase))
-
498 return;
-
499
-
500 var username = e.Data.Nick;
-
501 var channelName = isPrivate ? username : e.Data.Channel;
-
502
-
503 ulong MapAndGetChannelId(Dictionary<ulong, string?> dicToCheck)
-
504 {
-
505 ulong? resultId = null;
-
506 if (!dicToCheck.Any(x =>
-
507 {
-
508 if (x.Value != channelName)
-
509 return false;
-
510 resultId = x.Key;
-
511 return true;
-
512 }))
-
513 {
-
514 resultId = channelIdCounter++;
-
515 dicToCheck.Add(resultId.Value, channelName);
-
516 if (dicToCheck == queryChannelIdMap)
-
517 channelIdMap.Add(resultId.Value, null);
-
518 }
-
519
-
520 return resultId!.Value;
-
521 }
-
522
-
523 ulong userId, channelId;
-
524 lock (client)
+

Definition at line 516 of file IrcProvider.cs.

+
517 {
+
518 if (e.Data.Nick.Equals(client.Nickname, StringComparison.OrdinalIgnoreCase))
+
519 return;
+
520
+
521 var username = e.Data.Nick;
+
522 var channelName = isPrivate ? username : e.Data.Channel;
+
523
+
524 ulong MapAndGetChannelId(Dictionary<ulong, string?> dicToCheck)
525 {
-
526 userId = MapAndGetChannelId(new Dictionary<ulong, string?>(queryChannelIdMap
-
527 .Cast<KeyValuePair<ulong, string?>>())); // NRT my beloathed
-
528 channelId = isPrivate ? userId : MapAndGetChannelId(channelIdMap);
-
529 }
-
530
-
531 var channelFriendlyName = isPrivate ? String.Format(CultureInfo.InvariantCulture, "PM: {0}", channelName) : channelName;
-
532 var message = new Message(
-
533 new ChatUser(
-
534 new ChannelRepresentation(address, channelFriendlyName, channelId)
-
535 {
-
536 IsPrivateChannel = isPrivate,
-
537 EmbedsSupported = false,
-
538
-
539 // isAdmin and Tag populated by manager
-
540 },
-
541 username,
-
542 username,
-
543 userId),
-
544 e.Data.Message);
-
545
-
546 EnqueueMessage(message);
-
547 }
+
526 ulong? resultId = null;
+
527 if (!dicToCheck.Any(x =>
+
528 {
+
529 if (x.Value != channelName)
+
530 return false;
+
531 resultId = x.Key;
+
532 return true;
+
533 }))
+
534 {
+
535 resultId = channelIdCounter++;
+
536 dicToCheck.Add(resultId.Value, channelName);
+
537 if (dicToCheck == queryChannelIdMap)
+
538 channelIdMap.Add(resultId.Value, null);
+
539 }
+
540
+
541 return resultId!.Value;
+
542 }
+
543
+
544 ulong userId, channelId;
+
545 lock (client)
+
546 {
+
547 userId = MapAndGetChannelId(new Dictionary<ulong, string?>(queryChannelIdMap
+
548 .Cast<KeyValuePair<ulong, string?>>())); // NRT my beloathed
+
549 channelId = isPrivate ? userId : MapAndGetChannelId(channelIdMap);
+
550 }
+
551
+
552 var channelFriendlyName = isPrivate ? String.Format(CultureInfo.InvariantCulture, "PM: {0}", channelName) : channelName;
+
553 var message = new Message(
+
554 new ChatUser(
+
555 new ChannelRepresentation(address, channelFriendlyName, channelId)
+
556 {
+
557 IsPrivateChannel = isPrivate,
+
558 EmbedsSupported = false,
+
559
+
560 // isAdmin and Tag populated by manager
+
561 },
+
562 username,
+
563 username,
+
564 userId),
+
565 e.Data.Message);
+
566
+
567 EnqueueMessage(message);
+
568 }
void EnqueueMessage(Message? message)
Queues a message for NextMessage(CancellationToken).
Definition Provider.cs:238
@@ -1017,49 +986,47 @@ Here is the call graph for this function:
Returns
A ValueTask representing the running operation.
-

Definition at line 660 of file IrcProvider.cs.

-
661 {
-
662 if (!Connected)
-
663 {
-
664 Logger.LogTrace("Not hard disconnecting, already offline");
-
665 return;
-
666 }
-
667
-
668 Logger.LogTrace("Hard disconnect");
-
669
-
670 disconnecting = true;
-
671
-
672 // This call blocks permanently randomly sometimes
-
673 // Frankly I don't give a shit
-
674 var disconnectTask = Task.Factory.StartNew(
-
675 () =>
-
676 {
-
677 try
-
678 {
-
679 client.Disconnect();
-
680 }
-
681 catch (Exception e)
-
682 {
-
683 Logger.LogWarning(e, "Error disconnecting IRC!");
-
684 }
-
685 },
-
686 cancellationToken,
-
687 DefaultIOManager.BlockingTaskCreationOptions,
-
688 TaskScheduler.Current);
-
689
-
690 await Task.WhenAny(
-
691 Task.WhenAll(
-
692 disconnectTask,
-
693 listenTask ?? Task.CompletedTask),
-
694 AsyncDelayer.Delay(TimeSpan.FromSeconds(5), cancellationToken));
-
695 }
-
override bool Connected
If the IProvider is currently connected.
+

Definition at line 681 of file IrcProvider.cs.

+
682 {
+
683 if (!Connected)
+
684 {
+
685 Logger.LogTrace("Not hard disconnecting, already offline");
+
686 return;
+
687 }
+
688
+
689 Logger.LogTrace("Hard disconnect");
+
690
+
691 // This call blocks permanently randomly sometimes
+
692 // Frankly I don't give a shit
+
693 var disconnectTask = Task.Factory.StartNew(
+
694 () =>
+
695 {
+
696 try
+
697 {
+
698 client.Disconnect();
+
699 }
+
700 catch (Exception e)
+
701 {
+
702 Logger.LogWarning(e, "Error disconnecting IRC!");
+
703 }
+
704 },
+
705 cancellationToken,
+ +
707 TaskScheduler.Current);
+
708
+
709 await Task.WhenAny(
+
710 Task.WhenAll(
+
711 disconnectTask,
+
712 listenTask ?? Task.CompletedTask),
+
713 AsyncDelayer.Delay(TimeSpan.FromSeconds(5), cancellationToken));
+
714 }
+
override bool Connected
If the IProvider is currently connected.
Task Delay(TimeSpan timeSpan, CancellationToken cancellationToken)
Create a Task that completes after a given timeSpan .A Task representing the running operation.

References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions, and Tgstation.Server.Host.Utils.AsyncDelayer.Delay().

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.DisposeAsync().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.DisposeAsync().

Here is the call graph for this function:
@@ -1081,6 +1048,177 @@ Here is the caller graph for this function:
+ + + +

◆ InstantiateClient()

+ +
+
+ + + + + +
+ + + + + + + +
IrcFeatures Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.InstantiateClient ()
+
+private
+
+ +

Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to cause issues.

+
Returns
The IrcFeatures client to use.
+ +

Definition at line 721 of file IrcProvider.cs.

+
722 {
+
723 var newClient = new IrcFeatures
+
724 {
+
725 SupportNonRfc = true,
+
726 CtcpUserInfo = "You are going to play. And I am going to watch. And everything will be just fine...",
+
727 AutoRejoin = true,
+
728 AutoRejoinOnKick = true,
+
729 AutoRelogin = false,
+
730 AutoRetry = false,
+
731 AutoReconnect = false,
+
732 ActiveChannelSyncing = true,
+
733 AutoNickHandling = true,
+
734 CtcpVersion = assemblyInfo.VersionString,
+
735 UseSsl = ssl,
+
736 EnableUTF8Recode = true,
+
737 };
+
738 if (ssl)
+
739 newClient.ValidateServerCertificate = true; // dunno if it defaults to that or what
+
740
+
741 newClient.OnChannelMessage += Client_OnChannelMessage;
+
742 newClient.OnQueryMessage += Client_OnQueryMessage;
+
743
+ +
745 {
+
746 newClient.OnReadLine += (sender, e) => Logger.LogTrace("READ: {line}", e.Line);
+
747 newClient.OnWriteLine += (sender, e) => Logger.LogTrace("WRITE: {line}", e.Line);
+
748 }
+
749
+
750 newClient.OnError += (sender, e) =>
+
751 {
+
752 Logger.LogError("IRC ERROR: {error}", e.ErrorMessage);
+
753 newClient.Disconnect();
+
754 };
+
755
+
756 return newClient;
+
757 }
+
void Client_OnQueryMessage(object sender, IrcEventArgs e)
When a query message is received in IRC.
+
void Client_OnChannelMessage(object sender, IrcEventArgs e)
When a channel message is received in IRC.
+
bool ProviderNetworkDebug
If Chat Providers should log their network traffic. Normally disabled because it is too noisy.
+ +
+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+
+Here is the caller graph for this function:
+
+
+ + + + + +
+ +
+
+ +

◆ Login()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
async ValueTask Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.Login (IrcFeatures client,
string nickname,
CancellationToken cancellationToken 
)
+
+private
+
+ +

Register the client on the network.

+
Parameters
+ + + + +
clientIRC client.
nicknameNickname.
cancellationTokenCancellation token.
+
+
+
Returns
Task that resolves when registration has been completed.
+
Exceptions
+ + +
TimeoutExceptionIf the IRC server fails to respond.
+
+
+ +

Definition at line 481 of file IrcProvider.cs.

+
482 {
+
483 var promise = new TaskCompletionSource<object>();
+
484
+
485 void Callback(object? sender, EventArgs e)
+
486 {
+
487 Logger.LogTrace("IRC Registered.");
+
488 promise.TrySetResult(e);
+
489 }
+
490
+
491 client.OnRegistered += Callback;
+
492
+
493 client.Login(nickname, nickname, 0, nickname);
+
494
+
495 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
496 cts.CancelAfter(TimeSpan.FromSeconds(30));
+
497
+
498 try
+
499 {
+
500 await promise.Task.WaitAsync(cts.Token);
+
501 client.OnRegistered -= Callback;
+
502 }
+
503 catch (OperationCanceledException)
+
504 {
+
505 if (client.IsConnected)
+
506 client.Disconnect();
+
507 throw new JobException("Timed out waiting for IRC Registration");
+
508 }
+
509 }
+
@@ -1119,7 +1257,7 @@ Here is the caller graph for this function:

-

References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap, and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client.

+

References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap, and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client.

@@ -1191,70 +1329,71 @@ Here is the caller graph for this function:
Returns
A ValueTask representing the running operation.
-

Definition at line 590 of file IrcProvider.cs.

-
591 {
-
592 client.WriteLine("CAP REQ :sasl", Priority.Critical); // needs to be put in the buffer before anything else
-
593 cancellationToken.ThrowIfCancellationRequested();
-
594
-
595 Logger.LogTrace("Logging in...");
-
596 client.Login(nickname, nickname, 0, nickname);
-
597 cancellationToken.ThrowIfCancellationRequested();
-
598
-
599 // wait for the SASL ack or timeout
-
600 var receivedAck = false;
-
601 var receivedPlus = false;
-
602
-
603 void AuthenticationDelegate(object sender, ReadLineEventArgs e)
-
604 {
-
605 if (e.Line.Contains("ACK :sasl", StringComparison.Ordinal))
-
606 receivedAck = true;
-
607 else if (e.Line.Contains("AUTHENTICATE +", StringComparison.Ordinal))
-
608 receivedPlus = true;
-
609 }
-
610
-
611 Logger.LogTrace("Performing handshake...");
-
612 client.OnReadLine += AuthenticationDelegate;
-
613 try
-
614 {
-
615 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
616 timeoutCts.CancelAfter(TimeSpan.FromSeconds(25));
-
617 var timeoutToken = timeoutCts.Token;
-
618
-
619 var listenTimeSpan = TimeSpan.FromMilliseconds(10);
-
620 for (; !receivedAck;
-
621 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
-
622 await NonBlockingListen(cancellationToken);
+

Definition at line 611 of file IrcProvider.cs.

+
612 {
+
613 client.WriteLine("CAP REQ :sasl", Priority.Critical); // needs to be put in the buffer before anything else
+
614 cancellationToken.ThrowIfCancellationRequested();
+
615
+
616 Logger.LogTrace("Logging in...");
+
617 client.Login(nickname, nickname, 0, nickname);
+
618 cancellationToken.ThrowIfCancellationRequested();
+
619
+
620 // wait for the SASL ack or timeout
+
621 var receivedAck = false;
+
622 var receivedPlus = false;
623
-
624 client.WriteLine("AUTHENTICATE PLAIN", Priority.Critical);
-
625 timeoutToken.ThrowIfCancellationRequested();
-
626
-
627 for (; !receivedPlus;
-
628 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
-
629 await NonBlockingListen(cancellationToken);
+
624 void AuthenticationDelegate(object sender, ReadLineEventArgs e)
+
625 {
+
626 if (e.Line.Contains("ACK :sasl", StringComparison.Ordinal))
+
627 receivedAck = true;
+
628 else if (e.Line.Contains("AUTHENTICATE +", StringComparison.Ordinal))
+
629 receivedPlus = true;
630 }
-
631 finally
-
632 {
-
633 client.OnReadLine -= AuthenticationDelegate;
-
634 }
-
635
-
636 cancellationToken.ThrowIfCancellationRequested();
-
637
-
638 // Stolen! https://github.com/znc/znc/blob/1e697580155d5a38f8b5a377f3b1d94aaa979539/modules/sasl.cpp#L196
-
639 Logger.LogTrace("Sending credentials...");
-
640 var authString = String.Format(
-
641 CultureInfo.InvariantCulture,
-
642 "{0}{1}{0}{1}{2}",
-
643 nickname,
-
644 '\0',
-
645 password);
-
646 var b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
-
647 var authLine = $"AUTHENTICATE {b64}";
-
648 client.WriteLine(authLine, Priority.Critical);
-
649 cancellationToken.ThrowIfCancellationRequested();
-
650
-
651 Logger.LogTrace("Finishing authentication...");
-
652 client.WriteLine("CAP END", Priority.Critical);
-
653 }
+
631
+
632 Logger.LogTrace("Performing handshake...");
+
633 client.OnReadLine += AuthenticationDelegate;
+
634 try
+
635 {
+
636 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
637 timeoutCts.CancelAfter(TimeSpan.FromSeconds(25));
+
638 var timeoutToken = timeoutCts.Token;
+
639
+
640 var listenTimeSpan = TimeSpan.FromMilliseconds(10);
+
641 for (; !receivedAck;
+
642 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
+
643 await NonBlockingListen(cancellationToken);
+
644
+
645 client.WriteLine("AUTHENTICATE PLAIN", Priority.Critical);
+
646 timeoutToken.ThrowIfCancellationRequested();
+
647
+
648 for (; !receivedPlus;
+
649 await AsyncDelayer.Delay(listenTimeSpan, timeoutToken))
+
650 await NonBlockingListen(cancellationToken);
+
651 }
+
652 finally
+
653 {
+
654 client.OnReadLine -= AuthenticationDelegate;
+
655 }
+
656
+
657 cancellationToken.ThrowIfCancellationRequested();
+
658
+
659 // Stolen! https://github.com/znc/znc/blob/1e697580155d5a38f8b5a377f3b1d94aaa979539/modules/sasl.cpp#L196
+
660 Logger.LogTrace("Sending credentials...");
+
661 var authString = String.Format(
+
662 CultureInfo.InvariantCulture,
+
663 "{0}{1}{0}{1}{2}",
+
664 nickname,
+
665 '\0',
+
666 password);
+
667 var b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
+
668 var authLine = $"AUTHENTICATE {b64}";
+
669 client.WriteLine(authLine, Priority.Critical);
+
670 cancellationToken.ThrowIfCancellationRequested();
+
671
+
672 Logger.LogTrace("Finishing authentication...");
+
673 client.WriteLine("CAP END", Priority.Critical);
+
674 }
+
Task NonBlockingListen(CancellationToken cancellationToken)
Perform a non-blocking IrcConnection.Listen(bool).

References Tgstation.Server.Host.Utils.AsyncDelayer.Delay().

@@ -1322,65 +1461,65 @@ Here is the call graph for this function:

Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider.

-

Definition at line 167 of file IrcProvider.cs.

-
168 {
-
169 ArgumentNullException.ThrowIfNull(message);
-
170
-
171 await Task.Factory.StartNew(
-
172 () =>
-
173 {
-
174 // IRC doesn't allow newlines
-
175 // Explicitly ignore embeds
-
176 var messageText = message.Text;
-
177 messageText ??= $"Embed Only: {JsonConvert.SerializeObject(message.Embed)}";
-
178
-
179 messageText = String.Concat(
-
180 messageText
-
181 .Where(x => x != '\r')
-
182 .Select(x => x == '\n' ? '|' : x));
-
183
-
184 var channelName = channelIdMap[channelId];
-
185 SendType sendType;
-
186 if (channelName == null)
-
187 {
-
188 channelName = queryChannelIdMap[channelId];
-
189 sendType = SendType.Notice;
-
190 }
-
191 else
-
192 sendType = SendType.Message;
-
193
-
194 var messageSize = Encoding.UTF8.GetByteCount(messageText) + Encoding.UTF8.GetByteCount(channelName) + PreambleMessageLength;
-
195 var messageTooLong = messageSize > MessageBytesLimit;
-
196 if (messageTooLong)
-
197 messageText = $"TGS: Could not send message to IRC. Line write exceeded protocol limit of {MessageBytesLimit}B.";
-
198
-
199 try
-
200 {
-
201 client.SendMessage(sendType, channelName, messageText);
-
202 }
-
203 catch (Exception e)
-
204 {
-
205 Logger.LogWarning(e, "Unable to send to channel {channelName}!", channelName);
-
206 return;
-
207 }
-
208
-
209 if (messageTooLong)
-
210 Logger.LogWarning(
-
211 "Failed to send to channel {channelId}: Message size ({messageSize}B) exceeds IRC limit of 512B",
-
212 channelId,
-
213 messageSize);
-
214 },
-
215 cancellationToken,
- -
217 TaskScheduler.Current);
-
218 }
-
const int PreambleMessageLength
Length of the preamble when writing a message to the server. Must be summed with the channel name to ...
-
const int MessageBytesLimit
Hard limit to sendable message size in bytes.
+

Definition at line 164 of file IrcProvider.cs.

+
165 {
+
166 ArgumentNullException.ThrowIfNull(message);
+
167
+
168 await Task.Factory.StartNew(
+
169 () =>
+
170 {
+
171 // IRC doesn't allow newlines
+
172 // Explicitly ignore embeds
+
173 var messageText = message.Text;
+
174 messageText ??= $"Embed Only: {JsonConvert.SerializeObject(message.Embed)}";
+
175
+
176 messageText = String.Concat(
+
177 messageText
+
178 .Where(x => x != '\r')
+
179 .Select(x => x == '\n' ? '|' : x));
+
180
+
181 var channelName = channelIdMap[channelId];
+
182 SendType sendType;
+
183 if (channelName == null)
+
184 {
+
185 channelName = queryChannelIdMap[channelId];
+
186 sendType = SendType.Notice;
+
187 }
+
188 else
+
189 sendType = SendType.Message;
+
190
+
191 var messageSize = Encoding.UTF8.GetByteCount(messageText) + Encoding.UTF8.GetByteCount(channelName) + PreambleMessageLength;
+
192 var messageTooLong = messageSize > MessageBytesLimit;
+
193 if (messageTooLong)
+
194 messageText = $"TGS: Could not send message to IRC. Line write exceeded protocol limit of {MessageBytesLimit}B.";
+
195
+
196 try
+
197 {
+
198 client.SendMessage(sendType, channelName, messageText);
+
199 }
+
200 catch (Exception e)
+
201 {
+
202 Logger.LogWarning(e, "Unable to send to channel {channelName}!", channelName);
+
203 return;
+
204 }
+
205
+
206 if (messageTooLong)
+
207 Logger.LogWarning(
+
208 "Failed to send to channel {channelId}: Message size ({messageSize}B) exceeds IRC limit of 512B",
+
209 channelId,
+
210 messageSize);
+
211 },
+
212 cancellationToken,
+ +
214 TaskScheduler.Current);
+
215 }
+
const int PreambleMessageLength
Length of the preamble when writing a message to the server. Must be summed with the channel name to ...
+
const int MessageBytesLimit
Hard limit to sendable message size in bytes.
-

References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client, Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MessageBytesLimit, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.PreambleMessageLength, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap, and Tgstation.Server.Host.Components.Interop.MessageContent.Text.

+

References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client, Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MessageBytesLimit, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.PreambleMessageLength, Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap, and Tgstation.Server.Host.Components.Interop.MessageContent.Text.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage().

Here is the caller graph for this function:
@@ -1474,82 +1613,82 @@ Here is the caller graph for this function:

Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider.

-

Definition at line 221 of file IrcProvider.cs.

-
230 {
-
231 ArgumentNullException.ThrowIfNull(revisionInformation);
-
232 ArgumentNullException.ThrowIfNull(engineVersion);
-
233 ArgumentNullException.ThrowIfNull(gitHubOwner);
-
234 ArgumentNullException.ThrowIfNull(gitHubRepo);
-
235
-
236 var commitInsert = revisionInformation.CommitSha![..7];
-
237 string remoteCommitInsert;
-
238 if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha)
-
239 {
-
240 commitInsert = String.Format(CultureInfo.InvariantCulture, localCommitPushed ? "^{0}" : "{0}", commitInsert);
-
241 remoteCommitInsert = String.Empty;
-
242 }
-
243 else
-
244 remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}", revisionInformation.OriginCommitSha![..7]);
-
245
-
246 var testmergeInsert = (revisionInformation.ActiveTestMerges?.Count ?? 0) == 0
-
247 ? String.Empty
-
248 : String.Format(
-
249 CultureInfo.InvariantCulture,
-
250 " (Test Merges: {0})",
-
251 String.Join(
-
252 ", ",
-
253 revisionInformation
-
254 .ActiveTestMerges!
-
255 .Select(x => x.TestMerge)
-
256 .Select(x =>
-
257 {
-
258 var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]);
-
259 if (x.Comment != null)
-
260 result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment);
-
261 return result;
-
262 })));
-
263
-
264 var prefix = GetEngineCompilerPrefix(engineVersion.Engine!.Value);
-
265 await SendMessage(
-
266 null,
- -
268 {
-
269 Text = String.Format(
-
270 CultureInfo.InvariantCulture,
-
271 $"{prefix}: Deploying revision: {0}{1}{2} BYOND Version: {3}{4}",
-
272 commitInsert,
-
273 testmergeInsert,
-
274 remoteCommitInsert,
-
275 engineVersion.ToString(),
-
276 estimatedCompletionTime.HasValue
-
277 ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}"
-
278 : String.Empty),
-
279 },
-
280 channelId,
-
281 cancellationToken);
-
282
-
283 return async (errorMessage, dreamMakerOutput) =>
-
284 {
-
285 await SendMessage(
-
286 null,
- -
288 {
-
289 Text = $"{prefix}: Deployment {(errorMessage == null ? "complete" : "failed")}!",
-
290 },
-
291 channelId,
-
292 cancellationToken);
-
293
-
294 return active => ValueTask.CompletedTask;
-
295 };
-
296 }
+

Definition at line 218 of file IrcProvider.cs.

+
227 {
+
228 ArgumentNullException.ThrowIfNull(revisionInformation);
+
229 ArgumentNullException.ThrowIfNull(engineVersion);
+
230 ArgumentNullException.ThrowIfNull(gitHubOwner);
+
231 ArgumentNullException.ThrowIfNull(gitHubRepo);
+
232
+
233 var commitInsert = revisionInformation.CommitSha![..7];
+
234 string remoteCommitInsert;
+
235 if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha)
+
236 {
+
237 commitInsert = String.Format(CultureInfo.InvariantCulture, localCommitPushed ? "^{0}" : "{0}", commitInsert);
+
238 remoteCommitInsert = String.Empty;
+
239 }
+
240 else
+
241 remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}", revisionInformation.OriginCommitSha![..7]);
+
242
+
243 var testmergeInsert = (revisionInformation.ActiveTestMerges?.Count ?? 0) == 0
+
244 ? String.Empty
+
245 : String.Format(
+
246 CultureInfo.InvariantCulture,
+
247 " (Test Merges: {0})",
+
248 String.Join(
+
249 ", ",
+
250 revisionInformation
+
251 .ActiveTestMerges!
+
252 .Select(x => x.TestMerge)
+
253 .Select(x =>
+
254 {
+
255 var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]);
+
256 if (x.Comment != null)
+
257 result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment);
+
258 return result;
+
259 })));
+
260
+
261 var prefix = GetEngineCompilerPrefix(engineVersion.Engine!.Value);
+
262 await SendMessage(
+
263 null,
+ +
265 {
+
266 Text = String.Format(
+
267 CultureInfo.InvariantCulture,
+
268 $"{prefix}: Deploying revision: {0}{1}{2} BYOND Version: {3}{4}",
+
269 commitInsert,
+
270 testmergeInsert,
+
271 remoteCommitInsert,
+
272 engineVersion.ToString(),
+
273 estimatedCompletionTime.HasValue
+
274 ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}"
+
275 : String.Empty),
+
276 },
+
277 channelId,
+
278 cancellationToken);
+
279
+
280 return async (errorMessage, dreamMakerOutput) =>
+
281 {
+
282 await SendMessage(
+
283 null,
+ +
285 {
+
286 Text = $"{prefix}: Deployment {(errorMessage == null ? "complete" : "failed")}!",
+
287 },
+
288 channelId,
+
289 cancellationToken);
+
290
+
291 return active => ValueTask.CompletedTask;
+
292 };
+
293 }
-
override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
Send a message to the IProvider.A ValueTask representing the running operation.
+
override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
Send a message to the IProvider.A ValueTask representing the running operation.
static string GetEngineCompilerPrefix(Api.Models.EngineType engineType)
Get the prefix for messages about deployments.
Represents a message to send to a chat provider.
-

References Tgstation.Server.Api.Models.EngineVersion.Engine, Tgstation.Server.Host.Components.Chat.Providers.Provider.GetEngineCompilerPrefix(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage(), and Tgstation.Server.Api.Models.EngineVersion.ToString().

+

References Tgstation.Server.Api.Models.EngineVersion.Engine, Tgstation.Server.Host.Components.Chat.Providers.Provider.GetEngineCompilerPrefix(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage(), and Tgstation.Server.Api.Models.EngineVersion.ToString().

Here is the call graph for this function:
@@ -1591,9 +1730,37 @@ Here is the call graph for this function:

Address of the server to connect to.

-

Definition at line 53 of file IrcProvider.cs.

+

Definition at line 49 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+ +
+
+ +

◆ assemblyInfo

+ +
+
+ + + + + +
+ + + + +
readonly IAssemblyInformationProvider Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.assemblyInfo
+
+private
+
+ +

The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.

+ +

Definition at line 89 of file IrcProvider.cs.

+ +

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1619,9 +1786,9 @@ Here is the call graph for this function:

Id counter for channelIdMap.

-

Definition at line 93 of file IrcProvider.cs.

+

Definition at line 109 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1647,14 +1814,14 @@ Here is the call graph for this function:

Map of ChannelRepresentation.RealIds to channel names.

-

Definition at line 78 of file IrcProvider.cs.

+

Definition at line 79 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl(), and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl(), and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

- -

◆ client

+ +

◆ client

@@ -1663,7 +1830,7 @@ Here is the call graph for this function:
- +
readonly IrcFeatures Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.clientIrcFeatures Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client
@@ -1675,35 +1842,9 @@ Here is the call graph for this function:

The IrcFeatures client.

-

Definition at line 48 of file IrcProvider.cs.

+

Definition at line 99 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl(), and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

- - - - -

◆ disconnecting

- -
-
- - - - - -
- - - - -
bool Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.disconnecting
-
-private
-
- -

If we are disconnecting.

- -

Definition at line 98 of file IrcProvider.cs.

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl(), and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

@@ -1729,7 +1870,35 @@ Here is the call graph for this function:

The ValueTask used for IrcConnection.Listen(bool).

-

Definition at line 88 of file IrcProvider.cs.

+

Definition at line 104 of file IrcProvider.cs.

+ + + + +

◆ loggingConfiguration

+ +
+
+ + + + + +
+ + + + +
readonly FileLoggingConfiguration Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.loggingConfiguration
+
+private
+
+ +

The FileLoggingConfiguration for the IrcProvider.

+ +

Definition at line 94 of file IrcProvider.cs.

+ +

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1755,9 +1924,9 @@ Here is the call graph for this function:

Hard limit to sendable message size in bytes.

-

Definition at line 37 of file IrcProvider.cs.

+

Definition at line 38 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

@@ -1783,9 +1952,9 @@ Here is the call graph for this function:

IRC nickname.

-

Definition at line 63 of file IrcProvider.cs.

+

Definition at line 64 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1811,9 +1980,9 @@ Here is the call graph for this function:

Password which will used for authentication.

-

Definition at line 68 of file IrcProvider.cs.

+

Definition at line 69 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1839,9 +2008,9 @@ Here is the call graph for this function:

The IrcPasswordType of password.

-

Definition at line 73 of file IrcProvider.cs.

+

Definition at line 74 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1867,9 +2036,9 @@ Here is the call graph for this function:

Port of the server to connect to.

-

Definition at line 58 of file IrcProvider.cs.

+

Definition at line 54 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1895,9 +2064,9 @@ Here is the call graph for this function:

Length of the preamble when writing a message to the server. Must be summed with the channel name to get the true value.

-

Definition at line 32 of file IrcProvider.cs.

+

Definition at line 33 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

@@ -1923,9 +2092,37 @@ Here is the call graph for this function:

Map of ChannelRepresentation.RealIds to query users.

-

Definition at line 83 of file IrcProvider.cs.

+

Definition at line 84 of file IrcProvider.cs.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider(), and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider(), and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage().

+ + + + +

◆ ssl

+ +
+
+ + + + + +
+ + + + +
readonly bool Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.ssl
+
+private
+
+ +

Wether or not this IRC client is to use ssl.

+ +

Definition at line 59 of file IrcProvider.cs.

+ +

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider().

@@ -1954,7 +2151,7 @@ Here is the call graph for this function:

Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider.

-

Definition at line 43 of file IrcProvider.cs.

+

Definition at line 44 of file IrcProvider.cs.

@@ -1982,7 +2179,7 @@ Here is the call graph for this function:

Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider.

-

Definition at line 40 of file IrcProvider.cs.

+

Definition at line 41 of file IrcProvider.cs.

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.map index 0e29a45876..73151a8dda 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.map +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.map @@ -1,40 +1,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.md5 index e424fd2da6..3003c8ff34 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.md5 +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.md5 @@ -1 +1 @@ -65216ed67c021d6aea6b99a9f9ed2836 \ No newline at end of file +6f9a28f53080275c781638b3022fc846 \ No newline at end of file diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider__coll__graph.png index 56724a553f7052069a57d7b1810af4fcc05ec3e4..63680cc01ae1c930bebd46a170ac9fc06676b69d 100644 GIT binary patch literal 159089 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

KulL&Uw*f{yNj9yqgm*0dhk|2do|Mvpx-SI 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 YN)qzSzaHGOT?xS`Ybs@2xb^UV0J7}JdH?_b diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.map new file mode 100644 index 0000000000..b86c8d3d7d --- /dev/null +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.md5 new file mode 100644 index 0000000000..9902b866ea --- /dev/null +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.md5 @@ -0,0 +1 @@ +2682ebed983483b2dc9ada30086ed201 \ No newline at end of file diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a036341a13aed727a56c3dfe047f8b22d_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..513fa0eb51a06f88e1d4c713bc7473066cd1b27c GIT binary patch literal 10672 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 literal 0 HcmV?d00001 diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.map new file mode 100644 index 0000000000..5b1c8deebf --- /dev/null +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.md5 new file mode 100644 index 0000000000..8402517478 --- /dev/null +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.md5 @@ -0,0 +1 @@ +34b10da24e29fe623fe3ad500e51bdda \ No newline at end of file diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a4219ee47d3cdc106c66c7279c5d1473c_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..1a67947b0484770574ad1e9dc7c2d37ceca074b2 GIT binary patch literal 10717 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%0Ah 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 t$pmo9Ba_0B - - - - diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.md5 deleted file mode 100644 index f31a831916..0000000000 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -00e6feb9c8753b88f863564bb9f45014 \ No newline at end of file diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a6709ea88022cc7f1ed175e5f863e79c9_icgraph.png deleted file mode 100644 index b08cd16cbbd41b8755f9af6a26394fe51931251f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10774 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 E0FpIk%K!iX diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.map deleted file mode 100644 index 724fac70bf..0000000000 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.md5 deleted file mode 100644 index 19608bda18..0000000000 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -7ece4d9811988e114e53cf3e8e657320 \ No newline at end of file diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ad5b2c312d6d9703edbeb60825cfb1602_icgraph.png deleted file mode 100644 index c4dc55e521637ed537d02a67cd17925782010d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11175 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 diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.map deleted file mode 100644 index 4a6c58d68c..0000000000 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.md5 deleted file mode 100644 index d36afcdf8a..0000000000 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -b4b26399f4e43e3fa3d84c6b00e3b417 \ No newline at end of file diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_afb8ee20f302c136f9a254c34315950a4_cgraph.png deleted file mode 100644 index b4f12c10b77b78bf5420f7125e411de6267a8896..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17995 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 z 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 JQNqaQzX66{UZDU0 diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html index f5888b52e7..9bcef199d1 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html @@ -694,7 +694,7 @@ Here is the caller graph for this function:

References Tgstation.Server.Api.Rights.List.

-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage().

Here is the caller graph for this function:
@@ -1761,7 +1761,7 @@ Here is the caller graph for this function:

Definition at line 35 of file Provider.cs.

35{ get; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect(), Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync(), Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage(), Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider(), Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage(), and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect(), Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync(), Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage(), Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider(), Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage(), and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_factory-members.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_factory-members.html index 8cbb43d41e..df427e1b8b 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_factory-members.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_factory-members.html @@ -86,7 +86,8 @@ $(function() { generalConfigurationTgstation.Server.Host.Components.Chat.Providers.ProviderFactoryprivate jobManagerTgstation.Server.Host.Components.Chat.Providers.ProviderFactoryprivate loggerFactoryTgstation.Server.Host.Components.Chat.Providers.ProviderFactoryprivate - ProviderFactory(IJobManager jobManager, IAssemblyInformationProvider assemblyInformationProvider, IAsyncDelayer asyncDelayer, ILoggerFactory loggerFactory, IOptions< GeneralConfiguration > generalConfigurationOptions)Tgstation.Server.Host.Components.Chat.Providers.ProviderFactory + loggingConfigurationTgstation.Server.Host.Components.Chat.Providers.ProviderFactoryprivate + ProviderFactory(IJobManager jobManager, IAssemblyInformationProvider assemblyInformationProvider, IAsyncDelayer asyncDelayer, ILoggerFactory loggerFactory, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< FileLoggingConfiguration > loggingConfigurationOptions)Tgstation.Server.Host.Components.Chat.Providers.ProviderFactory

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Ⓢ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 VidJ&|)2f04t3~p;o$S^n@ zzX25n6l`Yzw@Ls~1i~4B>kgv!fv#+Ml<@&ZhVT%P;vXpSCz0w2rRPBAF0kGFQ|Eyi z=@&b;ehS|ZMn1kH;SpuoN7X_uSNjUyz$pAEUWp>*^I7AGBSfQ4m$+bi7zGaA`Er$d z_J~p!4N;QlN_SAO`dR;!#YTpc0{rmG+cW5KZ%CO4W5s7Y2n}tQp~pZy&4q5>Z7PP- zJ@Dj$L0CKpKlahiV_?JA%ENcVyN7SI9(#iE6EBlZP@2f^4KHPukEh(&J0ezbd08A+ zwhU|9jMfWJZo^h#b7}ao@hh0cDWtG%PdG_9O@EWI_RZ+~}-N(=E-ou>05$i#RE56WkPVI5Q)u?x7 zmG^Q1=dk*>fiM#i5lsWO0C1mWhOpUtNbU+8fy}Ss)A1{*tI}9Y{cqJxrjQjzVi3>3 zZQ=DLPr7k!9@vXNYNmYikk0>AX;sx1Y4AadmlOfR-2|mpBYH1(VtERy2c6UmB~JkB zb!^RGC>TaoCAsT*fAUlaE|9gFhfG05eoRYJ zD^#L;7lR2mvBGi6G^uFmjr#|~q$yU*yfX{}qe=;TQW_{DUScoGZyjw*?LTgQA$-$1 zE;2Z+Y}AM;5CC&*$O|a zso3;9Ev=`j{X4)(sm%R%^Ux#J(RlIx(w;{PeKx)n1v|x7HXn$WiBETR_%PbaaD{dZ z7kf6_9M^wD)^s4}&X2dNBk?X`k$s~vYxjN>vIog{d$2k5g_#|iP&ME8E_&JximA)>Igb^@@_Mo`2FKuv-YT#%#1nHD#kE0PsN4} z&{|+78`0l(mozU-E1j}UG}W3`aQksNZ{`RGO{n|by0Z(tCQdI0^D9apt1y&{UtugW z08lez;;7F2bFR#L)fLz?vJ*9zukg?DVdZz`d-7fKQH)JAORx z>mgy%Vr7RFmhEQ8^|u-yxQ@LbyG%*@t;q<_eDW8+r+xC+o6v+lyZ9cZA&bxP3AwVG z(pPABa;!R^HlA*NC}(kV!mv!#Ek2=7^-P{;9bbNUwbz*hX$(r2q}T_V<@7vnOTbaMQDZQFS+45u5Yd~WrDJmUD0dQ zv~>6QPDqoVw>fr+1uUAo1M2pZ44hy-9hFnHHR9eTr8ay4w`o{95&eCY>#5^6 zFQ*IX0{eyzJI$#6eDT(Df+JFUjiNufv6UA8=9gBdDYY7x#ZXFF`ZOmaTC!gkAv z;;_@mx#yG^MP1LT{u0fI$IsI&q^8cFl$h~N#S@#IZZ5_GeJ{p$HO{D-zjghdoI*I& z9j$`b@v2K}6&yGnBm3A_oPRS;!QC(NB$hy3O-c{g@hboIO5UIFOsl-hbA~=wZDje? z6cirIUFzNn;cmz~Cih{<`typx(b7ie<@7OL%4rqxI;#xl0;$lQ7zrcFGs~NNv40nM zio_)H8>=Sl8eHh*AQqloj(k{EHc)ziLVnfdylDr~YM*83A_KAdrO}At3AsJ1esUs` z3=0SBV&%V&@(vld505ikl{QDf0!e^sE2xX#RgNz3v2Jd zX|MEX_uJxzjVIM(D|9ww#?&Wz|6wv)U;O{`%N2TmY>)W*7acYscMLuk71b27@Futa E5C5{9ivR!s literal 134538 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