mirror of
https://github.com/Stone-Red-Code/EchoHub.git
synced 2026-09-04 00:56:05 +02:00
deploy: 159a28e890
This commit is contained in:
@@ -158,8 +158,8 @@ Class IrcGatewayService <a class="header-action link-secondary" title="View sou
|
||||
|
||||
<a id="EchoHub_Server_Irc_IrcGatewayService__ctor_" data-uid="EchoHub.Server.Irc.IrcGatewayService.#ctor*"></a>
|
||||
|
||||
<h3 id="EchoHub_Server_Irc_IrcGatewayService__ctor_Microsoft_Extensions_Options_IOptions_EchoHub_Server_Irc_IrcOptions__EchoHub_Core_Contracts_IChatService_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Irc_IrcGatewayService__" data-uid="EchoHub.Server.Irc.IrcGatewayService.#ctor(Microsoft.Extensions.Options.IOptions{EchoHub.Server.Irc.IrcOptions},EchoHub.Core.Contracts.IChatService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Irc.IrcGatewayService})">
|
||||
IrcGatewayService(IOptions<IrcOptions>, IChatService, ILogger<IrcGatewayService>)
|
||||
<h3 id="EchoHub_Server_Irc_IrcGatewayService__ctor_Microsoft_Extensions_Options_IOptions_EchoHub_Server_Irc_IrcOptions__System_IServiceProvider_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Irc_IrcGatewayService__" data-uid="EchoHub.Server.Irc.IrcGatewayService.#ctor(Microsoft.Extensions.Options.IOptions{EchoHub.Server.Irc.IrcOptions},System.IServiceProvider,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Irc.IrcGatewayService})">
|
||||
IrcGatewayService(IOptions<IrcOptions>, IServiceProvider, ILogger<IrcGatewayService>)
|
||||
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcGatewayService.cs"><i class="bi bi-code-slash"></i></a>
|
||||
</h3>
|
||||
|
||||
@@ -167,14 +167,14 @@ Class IrcGatewayService <a class="header-action link-secondary" title="View sou
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public IrcGatewayService(IOptions<IrcOptions> options, IChatService chatService, ILogger<IrcGatewayService> logger)</code></pre>
|
||||
<pre><code class="lang-csharp hljs">public IrcGatewayService(IOptions<IrcOptions> options, IServiceProvider services, ILogger<IrcGatewayService> logger)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>options</code> <span class="xref">IOptions</span><<a class="xref" href="EchoHub.Server.Irc.IrcOptions.html">IrcOptions</a>></dt>
|
||||
<dd></dd>
|
||||
<dt><code>chatService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IChatService.html">IChatService</a></dt>
|
||||
<dt><code>services</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iserviceprovider">IServiceProvider</a></dt>
|
||||
<dd></dd>
|
||||
<dt><code>logger</code> <span class="xref">ILogger</span><<a class="xref" href="EchoHub.Server.Irc.IrcGatewayService.html">IrcGatewayService</a>></dt>
|
||||
<dd></dd>
|
||||
|
||||
@@ -160,8 +160,8 @@ Class SignalRBroadcaster <a class="header-action link-secondary" title="View so
|
||||
|
||||
<a id="EchoHub_Server_Services_SignalRBroadcaster__ctor_" data-uid="EchoHub.Server.Services.SignalRBroadcaster.#ctor*"></a>
|
||||
|
||||
<h3 id="EchoHub_Server_Services_SignalRBroadcaster__ctor_Microsoft_AspNetCore_SignalR_IHubContext_EchoHub_Server_Hubs_ChatHub_EchoHub_Core_Contracts_IEchoHubClient__EchoHub_Server_Services_PresenceTracker_" data-uid="EchoHub.Server.Services.SignalRBroadcaster.#ctor(Microsoft.AspNetCore.SignalR.IHubContext{EchoHub.Server.Hubs.ChatHub,EchoHub.Core.Contracts.IEchoHubClient},EchoHub.Server.Services.PresenceTracker)">
|
||||
SignalRBroadcaster(IHubContext<ChatHub, IEchoHubClient>, PresenceTracker)
|
||||
<h3 id="EchoHub_Server_Services_SignalRBroadcaster__ctor_System_IServiceProvider_EchoHub_Server_Services_PresenceTracker_" data-uid="EchoHub.Server.Services.SignalRBroadcaster.#ctor(System.IServiceProvider,EchoHub.Server.Services.PresenceTracker)">
|
||||
SignalRBroadcaster(IServiceProvider, PresenceTracker)
|
||||
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/SignalRBroadcaster.cs"><i class="bi bi-code-slash"></i></a>
|
||||
</h3>
|
||||
|
||||
@@ -169,12 +169,12 @@ Class SignalRBroadcaster <a class="header-action link-secondary" title="View so
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public SignalRBroadcaster(IHubContext<ChatHub, IEchoHubClient> hubContext, PresenceTracker presenceTracker)</code></pre>
|
||||
<pre><code class="lang-csharp hljs">public SignalRBroadcaster(IServiceProvider serviceProvider, PresenceTracker presenceTracker)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>hubContext</code> <span class="xref">IHubContext</span><<a class="xref" href="EchoHub.Server.Hubs.ChatHub.html">ChatHub</a>, <a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IEchoHubClient.cs">IEchoHubClient</a>></dt>
|
||||
<dt><code>serviceProvider</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iserviceprovider">IServiceProvider</a></dt>
|
||||
<dd></dd>
|
||||
<dt><code>presenceTracker</code> <a class="xref" href="EchoHub.Server.Services.PresenceTracker.html">PresenceTracker</a></dt>
|
||||
<dd></dd>
|
||||
|
||||
@@ -90,6 +90,7 @@
|
||||
<p>Release history for EchoHub.</p>
|
||||
<h2 id="releases">Releases</h2>
|
||||
<ul>
|
||||
<li><a href="v0.2.2.html">v0.2.2</a> - Startup & Shutdown Fixes</li>
|
||||
<li><a href="v0.2.1.html">v0.2.1</a> - Shutdown & CI Fixes</li>
|
||||
<li><a href="v0.2.0.html">v0.2.0</a> - IRC Gateway</li>
|
||||
<li><a href="v0.1.1.html">v0.1.1</a> - Directory Connection Self-Healing</li>
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
<li>
|
||||
<a href="index.html" name="" title="Overview">Overview</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="v0.2.2.html" name="" title="v0.2.2">v0.2.2</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="v0.2.1.html" name="" title="v0.2.1">v0.2.1</a>
|
||||
</li>
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"v0.2.1","href":"v0.2.1.html","topicHref":"v0.2.1.html"},{"name":"v0.2.0","href":"v0.2.0.html","topicHref":"v0.2.0.html"},{"name":"v0.1.1","href":"v0.1.1.html","topicHref":"v0.1.1.html"},{"name":"v0.1.0","href":"v0.1.0.html","topicHref":"v0.1.0.html"}]}
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"v0.2.2","href":"v0.2.2.html","topicHref":"v0.2.2.html"},{"name":"v0.2.1","href":"v0.2.1.html","topicHref":"v0.2.1.html"},{"name":"v0.2.0","href":"v0.2.0.html","topicHref":"v0.2.0.html"},{"name":"v0.1.1","href":"v0.1.1.html","topicHref":"v0.1.1.html"},{"name":"v0.1.0","href":"v0.1.0.html","topicHref":"v0.1.0.html"}]}
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>v0.2.2 - Startup & Shutdown Fixes | EchoHub Documentation </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="v0.2.2 - Startup & Shutdown Fixes | EchoHub Documentation ">
|
||||
|
||||
|
||||
<link rel="icon" href="../images/hue_icon.svg">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/blob/master/docs/#L1">
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../images/hue_icon.svg" alt="EchoHub">
|
||||
EchoHub
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="v022---startup--shutdown-fixes">v0.2.2 - Startup & Shutdown Fixes</h1>
|
||||
|
||||
<h2 id="fixes">Fixes</h2>
|
||||
<ul>
|
||||
<li>Fixed server hanging on startup when IRC gateway is enabled — circular DI dependency between <code>IrcGatewayService</code> → <code>IChatService</code> → <code>IChatBroadcaster</code> → <code>IrcBroadcaster</code> caused the DI container to deadlock</li>
|
||||
<li>Fixed <code>SignalRBroadcaster</code> eagerly resolving <code>IHubContext<ChatHub></code> during DI construction, which could deadlock on some platforms — now lazy-resolves via <code>IServiceProvider</code> on first use</li>
|
||||
<li>Simplified IRC service registration to use standard <code>AddSingleton<IChatBroadcaster, IrcBroadcaster></code> instead of manual factory, breaking the circular resolution chain</li>
|
||||
<li>Fixed server hanging on Ctrl+C — replaced <code>await using</code> with explicit dispose bounded to 3 seconds, so a stuck <code>HubConnection</code> can no longer block shutdown</li>
|
||||
<li>Reduced host shutdown timeout from 30s (default) to 5s</li>
|
||||
<li>Caught <code>OperationCanceledException</code> in the directory service reconnect loop so cancellation exits immediately instead of propagating through dispose</li>
|
||||
</ul>
|
||||
<h2 id="refactoring">Refactoring</h2>
|
||||
<ul>
|
||||
<li>Replaced primary constructors with standard constructor injection across all server classes for consistency</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
<a href="https://github.com/HueByte/EchoHub/blob/master/docs/#L1" class="edit-link">Edit this page</a>
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>·</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>·</span><a href='https://echohub.voidcube.cloud'>Website</a><span class='footer-sep'>·</span><span class='footer-credit'>Built with <a href='https://dotnet.github.io/docfx'>DocFX</a></span></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
+8
-3
@@ -387,7 +387,7 @@
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html",
|
||||
"title": "Class IrcGatewayService | EchoHub Documentation",
|
||||
"summary": "Class IrcGatewayService Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcGatewayService : BackgroundService, IDisposable Inheritance object BackgroundService IrcGatewayService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcGatewayService(IOptions<IrcOptions>, IChatService, ILogger<IrcGatewayService>) public IrcGatewayService(IOptions<IrcOptions> options, IChatService chatService, ILogger<IrcGatewayService> logger) Parameters options IOptions<IrcOptions> chatService IChatService logger ILogger<IrcGatewayService> Properties Connections public IReadOnlyDictionary<string, IrcClientConnection> Connections { get; } Property Value IReadOnlyDictionary<string, IrcClientConnection> Options public IrcOptions Options { get; } Property Value IrcOptions Methods ExecuteAsync(CancellationToken) protected override Task ExecuteAsync(CancellationToken stoppingToken) Parameters stoppingToken CancellationToken Returns Task GetConnectionsInChannel(string) public IEnumerable<IrcClientConnection> GetConnectionsInChannel(string channelName) Parameters channelName string Returns IEnumerable<IrcClientConnection> StopAsync(CancellationToken) public override Task StopAsync(CancellationToken cancellationToken) Parameters cancellationToken CancellationToken Returns Task"
|
||||
"summary": "Class IrcGatewayService Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcGatewayService : BackgroundService, IDisposable Inheritance object BackgroundService IrcGatewayService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcGatewayService(IOptions<IrcOptions>, IServiceProvider, ILogger<IrcGatewayService>) public IrcGatewayService(IOptions<IrcOptions> options, IServiceProvider services, ILogger<IrcGatewayService> logger) Parameters options IOptions<IrcOptions> services IServiceProvider logger ILogger<IrcGatewayService> Properties Connections public IReadOnlyDictionary<string, IrcClientConnection> Connections { get; } Property Value IReadOnlyDictionary<string, IrcClientConnection> Options public IrcOptions Options { get; } Property Value IrcOptions Methods ExecuteAsync(CancellationToken) protected override Task ExecuteAsync(CancellationToken stoppingToken) Parameters stoppingToken CancellationToken Returns Task GetConnectionsInChannel(string) public IEnumerable<IrcClientConnection> GetConnectionsInChannel(string channelName) Parameters channelName string Returns IEnumerable<IrcClientConnection> StopAsync(CancellationToken) public override Task StopAsync(CancellationToken cancellationToken) Parameters cancellationToken CancellationToken Returns Task"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcMessage.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcMessage.html",
|
||||
@@ -522,7 +522,7 @@
|
||||
"api/server/EchoHub.Server.Services.SignalRBroadcaster.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.SignalRBroadcaster.html",
|
||||
"title": "Class SignalRBroadcaster | EchoHub Documentation",
|
||||
"summary": "Class SignalRBroadcaster Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class SignalRBroadcaster : IChatBroadcaster Inheritance object SignalRBroadcaster Implements IChatBroadcaster Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors SignalRBroadcaster(IHubContext<ChatHub, IEchoHubClient>, PresenceTracker) public SignalRBroadcaster(IHubContext<ChatHub, IEchoHubClient> hubContext, PresenceTracker presenceTracker) Parameters hubContext IHubContext<ChatHub, IEchoHubClient> presenceTracker PresenceTracker Methods SendChannelUpdatedAsync(ChannelDto, string?) public Task SendChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task SendErrorAsync(string, string) public Task SendErrorAsync(string connectionId, string message) Parameters connectionId string message string Returns Task SendMessageToChannelAsync(string, MessageDto) public Task SendMessageToChannelAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task SendUserJoinedAsync(string, string, string?) public Task SendUserJoinedAsync(string channelName, string username, string? excludeConnectionId = null) Parameters channelName string username string excludeConnectionId string Returns Task SendUserLeftAsync(string, string) public Task SendUserLeftAsync(string channelName, string username) Parameters channelName string username string Returns Task SendUserStatusChangedAsync(List<string>, UserPresenceDto) public Task SendUserStatusChangedAsync(List<string> channelNames, UserPresenceDto presence) Parameters channelNames List<string> presence UserPresenceDto Returns Task"
|
||||
"summary": "Class SignalRBroadcaster Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class SignalRBroadcaster : IChatBroadcaster Inheritance object SignalRBroadcaster Implements IChatBroadcaster Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors SignalRBroadcaster(IServiceProvider, PresenceTracker) public SignalRBroadcaster(IServiceProvider serviceProvider, PresenceTracker presenceTracker) Parameters serviceProvider IServiceProvider presenceTracker PresenceTracker Methods SendChannelUpdatedAsync(ChannelDto, string?) public Task SendChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task SendErrorAsync(string, string) public Task SendErrorAsync(string connectionId, string message) Parameters connectionId string message string Returns Task SendMessageToChannelAsync(string, MessageDto) public Task SendMessageToChannelAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task SendUserJoinedAsync(string, string, string?) public Task SendUserJoinedAsync(string channelName, string username, string? excludeConnectionId = null) Parameters channelName string username string excludeConnectionId string Returns Task SendUserLeftAsync(string, string) public Task SendUserLeftAsync(string channelName, string username) Parameters channelName string username string Returns Task SendUserStatusChangedAsync(List<string>, UserPresenceDto) public Task SendUserStatusChangedAsync(List<string> channelNames, UserPresenceDto presence) Parameters channelNames List<string> presence UserPresenceDto Returns Task"
|
||||
},
|
||||
"api/server/EchoHub.Server.Services.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.html",
|
||||
@@ -557,7 +557,7 @@
|
||||
"changelog/index.html": {
|
||||
"href": "changelog/index.html",
|
||||
"title": "Changelog | EchoHub Documentation",
|
||||
"summary": "Changelog Release history for EchoHub. Releases v0.2.1 - Shutdown & CI Fixes v0.2.0 - IRC Gateway v0.1.1 - Directory Connection Self-Healing v0.1.0 - Initial Release"
|
||||
"summary": "Changelog Release history for EchoHub. Releases v0.2.2 - Startup & Shutdown Fixes v0.2.1 - Shutdown & CI Fixes v0.2.0 - IRC Gateway v0.1.1 - Directory Connection Self-Healing v0.1.0 - Initial Release"
|
||||
},
|
||||
"changelog/v0.1.0.html": {
|
||||
"href": "changelog/v0.1.0.html",
|
||||
@@ -579,6 +579,11 @@
|
||||
"title": "v0.2.1 - Shutdown & CI Fixes | EchoHub Documentation",
|
||||
"summary": "v0.2.1 - Shutdown & CI Fixes Fixes Fixed server hanging on Ctrl+C when the directory server is unreachable — StopAsync now cancels background services before disposing connections Fixed IRC gateway shutdown blocking indefinitely on unresponsive clients — send operations are now bounded to 2 seconds Fixed CI release workflow not having full git history for building release notes (fetch-depth: 0) Fixed workflow_dispatch trigger breaking change detection when github.event.before is empty Improvements GitHub releases now include a commit list and version diff link instead of generic auto-generated notes GitHub releases link to the full changelog on the docs site"
|
||||
},
|
||||
"changelog/v0.2.2.html": {
|
||||
"href": "changelog/v0.2.2.html",
|
||||
"title": "v0.2.2 - Startup & Shutdown Fixes | EchoHub Documentation",
|
||||
"summary": "v0.2.2 - Startup & Shutdown Fixes Fixes Fixed server hanging on startup when IRC gateway is enabled — circular DI dependency between IrcGatewayService → IChatService → IChatBroadcaster → IrcBroadcaster caused the DI container to deadlock Fixed SignalRBroadcaster eagerly resolving IHubContext<ChatHub> during DI construction, which could deadlock on some platforms — now lazy-resolves via IServiceProvider on first use Simplified IRC service registration to use standard AddSingleton<IChatBroadcaster, IrcBroadcaster> instead of manual factory, breaking the circular resolution chain Fixed server hanging on Ctrl+C — replaced await using with explicit dispose bounded to 3 seconds, so a stuck HubConnection can no longer block shutdown Reduced host shutdown timeout from 30s (default) to 5s Caught OperationCanceledException in the directory service reconnect loop so cancellation exits immediately instead of propagating through dispose Refactoring Replaced primary constructors with standard constructor injection across all server classes for consistency"
|
||||
},
|
||||
"index.html": {
|
||||
"href": "index.html",
|
||||
"title": "EchoHub Documentation | EchoHub Documentation",
|
||||
|
||||
@@ -1668,6 +1668,16 @@
|
||||
},
|
||||
"version": ""
|
||||
},
|
||||
{
|
||||
"type": "Conceptual",
|
||||
"source_relative_path": "changelog/v0.2.2.md",
|
||||
"output": {
|
||||
".html": {
|
||||
"relative_path": "changelog/v0.2.2.html"
|
||||
}
|
||||
},
|
||||
"version": ""
|
||||
},
|
||||
{
|
||||
"type": "Resource",
|
||||
"source_relative_path": "images/hue_icon.svg",
|
||||
|
||||
+18
-18
@@ -9514,15 +9514,15 @@ references:
|
||||
commentId: T:EchoHub.Server.Irc.IrcGatewayService
|
||||
fullName: EchoHub.Server.Irc.IrcGatewayService
|
||||
nameWithType: IrcGatewayService
|
||||
- uid: EchoHub.Server.Irc.IrcGatewayService.#ctor(Microsoft.Extensions.Options.IOptions{EchoHub.Server.Irc.IrcOptions},EchoHub.Core.Contracts.IChatService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Irc.IrcGatewayService})
|
||||
name: IrcGatewayService(IOptions<IrcOptions>, IChatService, ILogger<IrcGatewayService>)
|
||||
href: api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html#EchoHub_Server_Irc_IrcGatewayService__ctor_Microsoft_Extensions_Options_IOptions_EchoHub_Server_Irc_IrcOptions__EchoHub_Core_Contracts_IChatService_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Irc_IrcGatewayService__
|
||||
commentId: M:EchoHub.Server.Irc.IrcGatewayService.#ctor(Microsoft.Extensions.Options.IOptions{EchoHub.Server.Irc.IrcOptions},EchoHub.Core.Contracts.IChatService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Irc.IrcGatewayService})
|
||||
name.vb: New(IOptions(Of IrcOptions), IChatService, ILogger(Of IrcGatewayService))
|
||||
fullName: EchoHub.Server.Irc.IrcGatewayService.IrcGatewayService(Microsoft.Extensions.Options.IOptions<EchoHub.Server.Irc.IrcOptions>, EchoHub.Core.Contracts.IChatService, Microsoft.Extensions.Logging.ILogger<EchoHub.Server.Irc.IrcGatewayService>)
|
||||
fullName.vb: EchoHub.Server.Irc.IrcGatewayService.New(Microsoft.Extensions.Options.IOptions(Of EchoHub.Server.Irc.IrcOptions), EchoHub.Core.Contracts.IChatService, Microsoft.Extensions.Logging.ILogger(Of EchoHub.Server.Irc.IrcGatewayService))
|
||||
nameWithType: IrcGatewayService.IrcGatewayService(IOptions<IrcOptions>, IChatService, ILogger<IrcGatewayService>)
|
||||
nameWithType.vb: IrcGatewayService.New(IOptions(Of IrcOptions), IChatService, ILogger(Of IrcGatewayService))
|
||||
- uid: EchoHub.Server.Irc.IrcGatewayService.#ctor(Microsoft.Extensions.Options.IOptions{EchoHub.Server.Irc.IrcOptions},System.IServiceProvider,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Irc.IrcGatewayService})
|
||||
name: IrcGatewayService(IOptions<IrcOptions>, IServiceProvider, ILogger<IrcGatewayService>)
|
||||
href: api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html#EchoHub_Server_Irc_IrcGatewayService__ctor_Microsoft_Extensions_Options_IOptions_EchoHub_Server_Irc_IrcOptions__System_IServiceProvider_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Irc_IrcGatewayService__
|
||||
commentId: M:EchoHub.Server.Irc.IrcGatewayService.#ctor(Microsoft.Extensions.Options.IOptions{EchoHub.Server.Irc.IrcOptions},System.IServiceProvider,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Irc.IrcGatewayService})
|
||||
name.vb: New(IOptions(Of IrcOptions), IServiceProvider, ILogger(Of IrcGatewayService))
|
||||
fullName: EchoHub.Server.Irc.IrcGatewayService.IrcGatewayService(Microsoft.Extensions.Options.IOptions<EchoHub.Server.Irc.IrcOptions>, System.IServiceProvider, Microsoft.Extensions.Logging.ILogger<EchoHub.Server.Irc.IrcGatewayService>)
|
||||
fullName.vb: EchoHub.Server.Irc.IrcGatewayService.New(Microsoft.Extensions.Options.IOptions(Of EchoHub.Server.Irc.IrcOptions), System.IServiceProvider, Microsoft.Extensions.Logging.ILogger(Of EchoHub.Server.Irc.IrcGatewayService))
|
||||
nameWithType: IrcGatewayService.IrcGatewayService(IOptions<IrcOptions>, IServiceProvider, ILogger<IrcGatewayService>)
|
||||
nameWithType.vb: IrcGatewayService.New(IOptions(Of IrcOptions), IServiceProvider, ILogger(Of IrcGatewayService))
|
||||
- uid: EchoHub.Server.Irc.IrcGatewayService.#ctor*
|
||||
name: IrcGatewayService
|
||||
href: api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html#EchoHub_Server_Irc_IrcGatewayService__ctor_
|
||||
@@ -10726,15 +10726,15 @@ references:
|
||||
commentId: T:EchoHub.Server.Services.SignalRBroadcaster
|
||||
fullName: EchoHub.Server.Services.SignalRBroadcaster
|
||||
nameWithType: SignalRBroadcaster
|
||||
- uid: EchoHub.Server.Services.SignalRBroadcaster.#ctor(Microsoft.AspNetCore.SignalR.IHubContext{EchoHub.Server.Hubs.ChatHub,EchoHub.Core.Contracts.IEchoHubClient},EchoHub.Server.Services.PresenceTracker)
|
||||
name: SignalRBroadcaster(IHubContext<ChatHub, IEchoHubClient>, PresenceTracker)
|
||||
href: api/server/EchoHub.Server.Services.SignalRBroadcaster.html#EchoHub_Server_Services_SignalRBroadcaster__ctor_Microsoft_AspNetCore_SignalR_IHubContext_EchoHub_Server_Hubs_ChatHub_EchoHub_Core_Contracts_IEchoHubClient__EchoHub_Server_Services_PresenceTracker_
|
||||
commentId: M:EchoHub.Server.Services.SignalRBroadcaster.#ctor(Microsoft.AspNetCore.SignalR.IHubContext{EchoHub.Server.Hubs.ChatHub,EchoHub.Core.Contracts.IEchoHubClient},EchoHub.Server.Services.PresenceTracker)
|
||||
name.vb: New(IHubContext(Of ChatHub, IEchoHubClient), PresenceTracker)
|
||||
fullName: EchoHub.Server.Services.SignalRBroadcaster.SignalRBroadcaster(Microsoft.AspNetCore.SignalR.IHubContext<EchoHub.Server.Hubs.ChatHub, EchoHub.Core.Contracts.IEchoHubClient>, EchoHub.Server.Services.PresenceTracker)
|
||||
fullName.vb: EchoHub.Server.Services.SignalRBroadcaster.New(Microsoft.AspNetCore.SignalR.IHubContext(Of EchoHub.Server.Hubs.ChatHub, EchoHub.Core.Contracts.IEchoHubClient), EchoHub.Server.Services.PresenceTracker)
|
||||
nameWithType: SignalRBroadcaster.SignalRBroadcaster(IHubContext<ChatHub, IEchoHubClient>, PresenceTracker)
|
||||
nameWithType.vb: SignalRBroadcaster.New(IHubContext(Of ChatHub, IEchoHubClient), PresenceTracker)
|
||||
- uid: EchoHub.Server.Services.SignalRBroadcaster.#ctor(System.IServiceProvider,EchoHub.Server.Services.PresenceTracker)
|
||||
name: SignalRBroadcaster(IServiceProvider, PresenceTracker)
|
||||
href: api/server/EchoHub.Server.Services.SignalRBroadcaster.html#EchoHub_Server_Services_SignalRBroadcaster__ctor_System_IServiceProvider_EchoHub_Server_Services_PresenceTracker_
|
||||
commentId: M:EchoHub.Server.Services.SignalRBroadcaster.#ctor(System.IServiceProvider,EchoHub.Server.Services.PresenceTracker)
|
||||
name.vb: New(IServiceProvider, PresenceTracker)
|
||||
fullName: EchoHub.Server.Services.SignalRBroadcaster.SignalRBroadcaster(System.IServiceProvider, EchoHub.Server.Services.PresenceTracker)
|
||||
fullName.vb: EchoHub.Server.Services.SignalRBroadcaster.New(System.IServiceProvider, EchoHub.Server.Services.PresenceTracker)
|
||||
nameWithType: SignalRBroadcaster.SignalRBroadcaster(IServiceProvider, PresenceTracker)
|
||||
nameWithType.vb: SignalRBroadcaster.New(IServiceProvider, PresenceTracker)
|
||||
- uid: EchoHub.Server.Services.SignalRBroadcaster.#ctor*
|
||||
name: SignalRBroadcaster
|
||||
href: api/server/EchoHub.Server.Services.SignalRBroadcaster.html#EchoHub_Server_Services_SignalRBroadcaster__ctor_
|
||||
|
||||
Reference in New Issue
Block a user