mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-04 16:46:08 +02:00
deploy: 963c6d3384
This commit is contained in:
+92
-12
@@ -182,7 +182,7 @@
|
||||
"api/core-articles/index.html": {
|
||||
"href": "api/core-articles/index.html",
|
||||
"title": "Core Articles | EchoHub Documentation",
|
||||
"summary": "Core Articles Articles related to the EchoHub.Core shared library. Topics Data models and DTOs SignalR contract interface Validation constants and shared rules"
|
||||
"summary": "Core Articles Articles related to the EchoHub.Core shared library. Topics Data models and DTOs Contract interfaces (IChatService, IChatBroadcaster, IEchoHubClient) Validation constants and shared rules"
|
||||
},
|
||||
"api/core/EchoHub.Core.Constants.HubConstants.html": {
|
||||
"href": "api/core/EchoHub.Core.Constants.HubConstants.html",
|
||||
@@ -199,6 +199,21 @@
|
||||
"title": "Namespace EchoHub.Core.Constants | EchoHub Documentation",
|
||||
"summary": "Namespace EchoHub.Core.Constants Classes HubConstants ValidationConstants"
|
||||
},
|
||||
"api/core/EchoHub.Core.Contracts.ChannelListItem.html": {
|
||||
"href": "api/core/EchoHub.Core.Contracts.ChannelListItem.html",
|
||||
"title": "Class ChannelListItem | EchoHub Documentation",
|
||||
"summary": "Class ChannelListItem Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public record ChannelListItem : IEquatable<ChannelListItem> Inheritance object ChannelListItem Implements IEquatable<ChannelListItem> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ChannelListItem(ChannelListItem) protected ChannelListItem(ChannelListItem original) Parameters original ChannelListItem ChannelListItem(string, string?, int) public ChannelListItem(string Name, string? Topic, int OnlineCount) Parameters Name string Topic string OnlineCount int Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Name public string Name { get; init; } Property Value string OnlineCount public int OnlineCount { get; init; } Property Value int Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out string, out string?, out int) public void Deconstruct(out string Name, out string? Topic, out int OnlineCount) Parameters Name string Topic string OnlineCount int Equals(ChannelListItem?) public virtual bool Equals(ChannelListItem? other) Parameters other ChannelListItem Returns bool Equals(object?) public override bool Equals(object? obj) Parameters obj object Returns bool GetHashCode() public override int GetHashCode() Returns int PrintMembers(StringBuilder) protected virtual bool PrintMembers(StringBuilder builder) Parameters builder StringBuilder Returns bool ToString() public override string ToString() Returns string Operators operator ==(ChannelListItem?, ChannelListItem?) public static bool operator ==(ChannelListItem? left, ChannelListItem? right) Parameters left ChannelListItem right ChannelListItem Returns bool operator !=(ChannelListItem?, ChannelListItem?) public static bool operator !=(ChannelListItem? left, ChannelListItem? right) Parameters left ChannelListItem right ChannelListItem Returns bool"
|
||||
},
|
||||
"api/core/EchoHub.Core.Contracts.IChatBroadcaster.html": {
|
||||
"href": "api/core/EchoHub.Core.Contracts.IChatBroadcaster.html",
|
||||
"title": "Interface IChatBroadcaster | EchoHub Documentation",
|
||||
"summary": "Interface IChatBroadcaster Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public interface IChatBroadcaster Methods SendChannelUpdatedAsync(ChannelDto, string?) Task SendChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task SendErrorAsync(string, string) Task SendErrorAsync(string connectionId, string message) Parameters connectionId string message string Returns Task SendMessageToChannelAsync(string, MessageDto) Task SendMessageToChannelAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task SendUserJoinedAsync(string, string, string?) Task SendUserJoinedAsync(string channelName, string username, string? excludeConnectionId = null) Parameters channelName string username string excludeConnectionId string Returns Task SendUserLeftAsync(string, string) Task SendUserLeftAsync(string channelName, string username) Parameters channelName string username string Returns Task SendUserStatusChangedAsync(List<string>, UserPresenceDto) Task SendUserStatusChangedAsync(List<string> channelNames, UserPresenceDto presence) Parameters channelNames List<string> presence UserPresenceDto Returns Task"
|
||||
},
|
||||
"api/core/EchoHub.Core.Contracts.IChatService.html": {
|
||||
"href": "api/core/EchoHub.Core.Contracts.IChatService.html",
|
||||
"title": "Interface IChatService | EchoHub Documentation",
|
||||
"summary": "Interface IChatService Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public interface IChatService Methods AuthenticateUserAsync(string, string) Task<(Guid UserId, string Username)?> AuthenticateUserAsync(string username, string password) Parameters username string password string Returns Task<(Guid UserId, string Username)?> BroadcastChannelUpdatedAsync(ChannelDto, string?) Task BroadcastChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task BroadcastMessageAsync(string, MessageDto) Task BroadcastMessageAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task GetChannelHistoryAsync(string, int) Task<List<MessageDto>> GetChannelHistoryAsync(string channelName, int count) Parameters channelName string count int Returns Task<List<MessageDto>> GetChannelListAsync() Task<List<ChannelListItem>> GetChannelListAsync() Returns Task<List<ChannelListItem>> GetChannelTopicAsync(string) Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName) Parameters channelName string Returns Task<(string Topic, bool Exists)> GetChannelsForUserAsync(string) Task<List<string>> GetChannelsForUserAsync(string username) Parameters username string Returns Task<List<string>> GetOnlineUsersAsync(string) Task<List<UserPresenceDto>> GetOnlineUsersAsync(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> GetUserProfileAsync(string) Task<UserProfileDto?> GetUserProfileAsync(string username) Parameters username string Returns Task<UserProfileDto> JoinChannelAsync(string, Guid, string, string) Task<(List<MessageDto> History, string? Error)> JoinChannelAsync(string connectionId, Guid userId, string username, string channelName) Parameters connectionId string userId Guid username string channelName string Returns Task<(List<MessageDto> History, string Error)> LeaveChannelAsync(string, string, string) Task LeaveChannelAsync(string connectionId, string username, string channelName) Parameters connectionId string username string channelName string Returns Task SendMessageAsync(Guid, string, string, string) Task<string?> SendMessageAsync(Guid userId, string username, string channelName, string content) Parameters userId Guid username string channelName string content string Returns Task<string> UpdateStatusAsync(Guid, string, UserStatus, string?) Task<string?> UpdateStatusAsync(Guid userId, string username, UserStatus status, string? statusMessage) Parameters userId Guid username string status UserStatus statusMessage string Returns Task<string> UserConnectedAsync(string, Guid, string) Task UserConnectedAsync(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string Returns Task UserDisconnectedAsync(string) Task<string?> UserDisconnectedAsync(string connectionId) Parameters connectionId string Returns Task<string>"
|
||||
},
|
||||
"api/core/EchoHub.Core.Contracts.IEchoHubClient.html": {
|
||||
"href": "api/core/EchoHub.Core.Contracts.IEchoHubClient.html",
|
||||
"title": "Interface IEchoHubClient | EchoHub Documentation",
|
||||
@@ -207,7 +222,7 @@
|
||||
"api/core/EchoHub.Core.Contracts.html": {
|
||||
"href": "api/core/EchoHub.Core.Contracts.html",
|
||||
"title": "Namespace EchoHub.Core.Contracts | EchoHub Documentation",
|
||||
"summary": "Namespace EchoHub.Core.Contracts Interfaces IEchoHubClient Methods the server can invoke on connected clients."
|
||||
"summary": "Namespace EchoHub.Core.Contracts Classes ChannelListItem Interfaces IChatBroadcaster IChatService IEchoHubClient Methods the server can invoke on connected clients."
|
||||
},
|
||||
"api/core/EchoHub.Core.DTOs.AvatarUploadResponse.html": {
|
||||
"href": "api/core/EchoHub.Core.DTOs.AvatarUploadResponse.html",
|
||||
@@ -347,12 +362,62 @@
|
||||
"api/index.html": {
|
||||
"href": "api/index.html",
|
||||
"title": "API Reference | EchoHub Documentation",
|
||||
"summary": "API Reference Browse the generated API documentation for each EchoHub project. Projects Client Terminal.Gui v2 TUI application -- UI components, services, themes, and configuration. Core Shared library -- DTOs, models, constants, and the SignalR client contract. Server ASP.NET Core server -- controllers, hubs, authentication, and data access."
|
||||
"summary": "API Reference Browse the generated API documentation for each EchoHub project. Projects Client Terminal.Gui v2 TUI application -- UI components, services, themes, and configuration. Core Shared library -- DTOs, models, constants, and contracts (IChatService, IChatBroadcaster, IEchoHubClient). Server ASP.NET Core server -- controllers, hubs, ChatService, SignalRBroadcaster, authentication, and data access. Server.Irc IRC protocol gateway -- TCP listener, command handler, IrcBroadcaster, and message formatter."
|
||||
},
|
||||
"api/server-articles/index.html": {
|
||||
"href": "api/server-articles/index.html",
|
||||
"title": "Server Articles | EchoHub Documentation",
|
||||
"summary": "Server Articles Articles related to the EchoHub server built with ASP.NET Core. Topics Authentication and JWT tokens SignalR hub and real-time messaging File upload and validation Rate limiting configuration Database schema and migrations"
|
||||
"summary": "Server Articles Articles related to the EchoHub server built with ASP.NET Core. Topics Authentication and JWT tokens SignalR hub and real-time messaging IRC gateway and protocol bridging ChatService and broadcaster pattern File upload and validation Rate limiting configuration Database schema and migrations"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcBroadcaster.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcBroadcaster.html",
|
||||
"title": "Class IrcBroadcaster | EchoHub Documentation",
|
||||
"summary": "Class IrcBroadcaster Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public class IrcBroadcaster : IChatBroadcaster Inheritance object IrcBroadcaster Implements IChatBroadcaster Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcBroadcaster(IrcGatewayService) public IrcBroadcaster(IrcGatewayService gateway) Parameters gateway IrcGatewayService 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-irc/EchoHub.Server.Irc.IrcClientConnection.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html",
|
||||
"title": "Class IrcClientConnection | EchoHub Documentation",
|
||||
"summary": "Class IrcClientConnection Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll Manages a single IRC client TCP connection. public sealed class IrcClientConnection : IAsyncDisposable Inheritance object IrcClientConnection Implements IAsyncDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcClientConnection(TcpClient, Stream) public IrcClientConnection(TcpClient tcpClient, Stream stream) Parameters tcpClient TcpClient stream Stream Properties AwayMessage public string? AwayMessage { get; set; } Property Value string CapNegotiating public bool CapNegotiating { get; set; } Property Value bool ConnectionId public string ConnectionId { get; } Property Value string Hostmask public string Hostmask { get; } Property Value string IsAuthenticated public bool IsAuthenticated { get; set; } Property Value bool IsRegistered public bool IsRegistered { get; set; } Property Value bool IsSasl public bool IsSasl { get; set; } Property Value bool JoinedChannels public HashSet<string> JoinedChannels { get; } Property Value HashSet<string> Nickname public string? Nickname { get; set; } Property Value string Password public string? Password { get; set; } Property Value string RealName public string? RealName { get; set; } Property Value string UserId public Guid? UserId { get; set; } Property Value Guid? Username public string? Username { get; set; } Property Value string Methods DisposeAsync() public ValueTask DisposeAsync() Returns ValueTask ReadLineAsync(CancellationToken) public Task<string?> ReadLineAsync(CancellationToken ct) Parameters ct CancellationToken Returns Task<string> SendAsync(string) public Task SendAsync(string line) Parameters line string Returns Task SendNumericAsync(string, string, string) public Task SendNumericAsync(string serverName, string numeric, string text) Parameters serverName string numeric string text string Returns Task SendNumericAsync(string, string, string, string) public Task SendNumericAsync(string serverName, string numeric, string target, string text) Parameters serverName string numeric string target string text string Returns Task"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html",
|
||||
"title": "Class IrcCommandHandler | EchoHub Documentation",
|
||||
"summary": "Class IrcCommandHandler Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcCommandHandler Inheritance object IrcCommandHandler Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcCommandHandler(IrcClientConnection, IrcOptions, IChatService, ILogger) public IrcCommandHandler(IrcClientConnection conn, IrcOptions options, IChatService chatService, ILogger logger) Parameters conn IrcClientConnection options IrcOptions chatService IChatService logger ILogger Methods RunAsync(CancellationToken) public Task RunAsync(CancellationToken ct) Parameters ct CancellationToken Returns Task"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcMessage.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcMessage.html",
|
||||
"title": "Class IrcMessage | EchoHub Documentation",
|
||||
"summary": "Class IrcMessage Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll Parsed representation of an IRC protocol line. Format: [:prefix] COMMAND [params...] [:trailing] public sealed class IrcMessage Inheritance object IrcMessage Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcMessage() public IrcMessage() Properties Command public string Command { get; init; } Property Value string Parameters public List<string> Parameters { get; init; } Property Value List<string> Prefix public string? Prefix { get; init; } Property Value string Trailing public string? Trailing { get; } Property Value string Methods Parse(string) Parse a raw IRC line: [:prefix SPACE] command [SPACE params] CRLF public static IrcMessage Parse(string line) Parameters line string Returns IrcMessage"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.html",
|
||||
"title": "Class IrcMessageFormatter | EchoHub Documentation",
|
||||
"summary": "Class IrcMessageFormatter Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public static class IrcMessageFormatter Inheritance object IrcMessageFormatter Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods FormatMessage(MessageDto) Format a MessageDto as one or more IRC PRIVMSG lines. public static List<string> FormatMessage(MessageDto message) Parameters message MessageDto Returns List<string> SplitMessage(string, int) Split a message into chunks of approximately maxBytes (UTF-8), at word boundaries. public static List<string> SplitMessage(string content, int maxBytes) Parameters content string maxBytes int Returns List<string>"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcNumericReply.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcNumericReply.html",
|
||||
"title": "Class IrcNumericReply | EchoHub Documentation",
|
||||
"summary": "Class IrcNumericReply Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public static class IrcNumericReply Inheritance object IrcNumericReply Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Fields ERR_ALREADYREGISTERED public const string ERR_ALREADYREGISTERED = \"462\" Field Value string ERR_CANNOTSENDTOCHAN public const string ERR_CANNOTSENDTOCHAN = \"404\" Field Value string ERR_CHANOPRIVSNEEDED public const string ERR_CHANOPRIVSNEEDED = \"482\" Field Value string ERR_ERRONEUSNICKNAME public const string ERR_ERRONEUSNICKNAME = \"432\" Field Value string ERR_NEEDMOREPARAMS public const string ERR_NEEDMOREPARAMS = \"461\" Field Value string ERR_NICKNAMEINUSE public const string ERR_NICKNAMEINUSE = \"433\" Field Value string ERR_NOMOTD public const string ERR_NOMOTD = \"422\" Field Value string ERR_NONICKNAMEGIVEN public const string ERR_NONICKNAMEGIVEN = \"431\" Field Value string ERR_NOSUCHCHANNEL public const string ERR_NOSUCHCHANNEL = \"403\" Field Value string ERR_NOSUCHNICK public const string ERR_NOSUCHNICK = \"401\" Field Value string ERR_NOTONCHANNEL public const string ERR_NOTONCHANNEL = \"442\" Field Value string ERR_NOTREGISTERED public const string ERR_NOTREGISTERED = \"451\" Field Value string ERR_PASSWDMISMATCH public const string ERR_PASSWDMISMATCH = \"464\" Field Value string ERR_SASLFAIL public const string ERR_SASLFAIL = \"904\" Field Value string ERR_UNKNOWNCOMMAND public const string ERR_UNKNOWNCOMMAND = \"421\" Field Value string RPL_AWAY public const string RPL_AWAY = \"301\" Field Value string RPL_CHANNELMODEIS public const string RPL_CHANNELMODEIS = \"324\" Field Value string RPL_CREATED public const string RPL_CREATED = \"003\" Field Value string RPL_ENDOFMOTD public const string RPL_ENDOFMOTD = \"376\" Field Value string RPL_ENDOFNAMES public const string RPL_ENDOFNAMES = \"366\" Field Value string RPL_ENDOFWHO public const string RPL_ENDOFWHO = \"315\" Field Value string RPL_ENDOFWHOIS public const string RPL_ENDOFWHOIS = \"318\" Field Value string RPL_ISUPPORT public const string RPL_ISUPPORT = \"005\" Field Value string RPL_LIST public const string RPL_LIST = \"322\" Field Value string RPL_LISTEND public const string RPL_LISTEND = \"323\" Field Value string RPL_LOGGEDIN public const string RPL_LOGGEDIN = \"900\" Field Value string RPL_MOTD public const string RPL_MOTD = \"372\" Field Value string RPL_MOTDSTART public const string RPL_MOTDSTART = \"375\" Field Value string RPL_MYINFO public const string RPL_MYINFO = \"004\" Field Value string RPL_NAMREPLY public const string RPL_NAMREPLY = \"353\" Field Value string RPL_NOTOPIC public const string RPL_NOTOPIC = \"331\" Field Value string RPL_NOWAWAY public const string RPL_NOWAWAY = \"306\" Field Value string RPL_SASLSUCCESS public const string RPL_SASLSUCCESS = \"903\" Field Value string RPL_TOPIC public const string RPL_TOPIC = \"332\" Field Value string RPL_UMODEIS public const string RPL_UMODEIS = \"221\" Field Value string RPL_UNAWAY public const string RPL_UNAWAY = \"305\" Field Value string RPL_WELCOME public const string RPL_WELCOME = \"001\" Field Value string RPL_WHOISCHANNELS public const string RPL_WHOISCHANNELS = \"319\" Field Value string RPL_WHOISIDLE public const string RPL_WHOISIDLE = \"317\" Field Value string RPL_WHOISSERVER public const string RPL_WHOISSERVER = \"312\" Field Value string RPL_WHOISUSER public const string RPL_WHOISUSER = \"311\" Field Value string RPL_WHOREPLY public const string RPL_WHOREPLY = \"352\" Field Value string RPL_YOURHOST public const string RPL_YOURHOST = \"002\" Field Value string"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcOptions.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcOptions.html",
|
||||
"title": "Class IrcOptions | EchoHub Documentation",
|
||||
"summary": "Class IrcOptions Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcOptions Inheritance object IrcOptions Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcOptions() public IrcOptions() Fields SectionName public const string SectionName = \"Irc\" Field Value string Properties Enabled public bool Enabled { get; set; } Property Value bool Motd public string? Motd { get; set; } Property Value string Port public int Port { get; set; } Property Value int ServerName public string ServerName { get; set; } Property Value string TlsCertPassword public string? TlsCertPassword { get; set; } Property Value string TlsCertPath public string? TlsCertPath { get; set; } Property Value string TlsEnabled public bool TlsEnabled { get; set; } Property Value bool TlsPort public int TlsPort { get; set; } Property Value int"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.html",
|
||||
"title": "Class IrcServiceExtensions | EchoHub Documentation",
|
||||
"summary": "Class IrcServiceExtensions Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public static class IrcServiceExtensions Inheritance object IrcServiceExtensions Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods AddIrcGateway(WebApplicationBuilder) public static WebApplicationBuilder AddIrcGateway(this WebApplicationBuilder builder) Parameters builder WebApplicationBuilder Returns WebApplicationBuilder"
|
||||
},
|
||||
"api/server-irc/EchoHub.Server.Irc.html": {
|
||||
"href": "api/server-irc/EchoHub.Server.Irc.html",
|
||||
"title": "Namespace EchoHub.Server.Irc | EchoHub Documentation",
|
||||
"summary": "Namespace EchoHub.Server.Irc Classes IrcBroadcaster IrcClientConnection Manages a single IRC client TCP connection. IrcCommandHandler IrcGatewayService IrcMessage Parsed representation of an IRC protocol line. Format: [:prefix] COMMAND [params...] [:trailing] IrcMessageFormatter IrcNumericReply IrcOptions IrcServiceExtensions"
|
||||
},
|
||||
"api/server/EchoHub.Server.Auth.JwtTokenService.html": {
|
||||
"href": "api/server/EchoHub.Server.Auth.JwtTokenService.html",
|
||||
@@ -372,7 +437,7 @@
|
||||
"api/server/EchoHub.Server.Controllers.ChannelsController.html": {
|
||||
"href": "api/server/EchoHub.Server.Controllers.ChannelsController.html",
|
||||
"title": "Class ChannelsController | EchoHub Documentation",
|
||||
"summary": "Class ChannelsController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/channels\")] [Authorize] [EnableRateLimiting(\"general\")] public class ChannelsController : ControllerBase Inheritance object ControllerBase ChannelsController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelsController(EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IHubContext<ChatHub, IEchoHubClient>) public ChannelsController(EchoHubDbContext db, FileStorageService fileStorage, ImageToAsciiService asciiService, IHttpClientFactory httpClientFactory, IHubContext<ChatHub, IEchoHubClient> hubContext) Parameters db EchoHubDbContext fileStorage FileStorageService asciiService ImageToAsciiService httpClientFactory IHttpClientFactory hubContext IHubContext<ChatHub, IEchoHubClient> Methods CreateChannel(CreateChannelRequest) [HttpPost] public Task<IActionResult> CreateChannel(CreateChannelRequest request) Parameters request CreateChannelRequest Returns Task<IActionResult> DeleteChannel(string) [HttpDelete(\"{channel}\")] public Task<IActionResult> DeleteChannel(string channel) Parameters channel string Returns Task<IActionResult> GetChannels(int, int) [HttpGet] public Task<IActionResult> GetChannels(int offset = 0, int limit = 50) Parameters offset int limit int Returns Task<IActionResult> SendUrl(string, SendUrlRequest) [HttpPost(\"{channel}/send-url\")] [EnableRateLimiting(\"upload\")] public Task<IActionResult> SendUrl(string channel, SendUrlRequest request) Parameters channel string request SendUrlRequest Returns Task<IActionResult> UpdateTopic(string, UpdateTopicRequest) [HttpPut(\"{channel}/topic\")] public Task<IActionResult> UpdateTopic(string channel, UpdateTopicRequest request) Parameters channel string request UpdateTopicRequest Returns Task<IActionResult> Upload(string) [HttpPost(\"{channel}/upload\")] [EnableRateLimiting(\"upload\")] public Task<IActionResult> Upload(string channel) Parameters channel string Returns Task<IActionResult>"
|
||||
"summary": "Class ChannelsController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/channels\")] [Authorize] [EnableRateLimiting(\"general\")] public class ChannelsController : ControllerBase Inheritance object ControllerBase ChannelsController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelsController(EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IChatService) public ChannelsController(EchoHubDbContext db, FileStorageService fileStorage, ImageToAsciiService asciiService, IHttpClientFactory httpClientFactory, IChatService chatService) Parameters db EchoHubDbContext fileStorage FileStorageService asciiService ImageToAsciiService httpClientFactory IHttpClientFactory chatService IChatService Methods CreateChannel(CreateChannelRequest) [HttpPost] public Task<IActionResult> CreateChannel(CreateChannelRequest request) Parameters request CreateChannelRequest Returns Task<IActionResult> DeleteChannel(string) [HttpDelete(\"{channel}\")] public Task<IActionResult> DeleteChannel(string channel) Parameters channel string Returns Task<IActionResult> GetChannels(int, int) [HttpGet] public Task<IActionResult> GetChannels(int offset = 0, int limit = 50) Parameters offset int limit int Returns Task<IActionResult> SendUrl(string, SendUrlRequest) [HttpPost(\"{channel}/send-url\")] [EnableRateLimiting(\"upload\")] public Task<IActionResult> SendUrl(string channel, SendUrlRequest request) Parameters channel string request SendUrlRequest Returns Task<IActionResult> UpdateTopic(string, UpdateTopicRequest) [HttpPut(\"{channel}/topic\")] public Task<IActionResult> UpdateTopic(string channel, UpdateTopicRequest request) Parameters channel string request UpdateTopicRequest Returns Task<IActionResult> Upload(string) [HttpPost(\"{channel}/upload\")] [EnableRateLimiting(\"upload\")] public Task<IActionResult> Upload(string channel) Parameters channel string Returns Task<IActionResult>"
|
||||
},
|
||||
"api/server/EchoHub.Server.Controllers.FilesController.html": {
|
||||
"href": "api/server/EchoHub.Server.Controllers.FilesController.html",
|
||||
@@ -417,13 +482,18 @@
|
||||
"api/server/EchoHub.Server.Hubs.ChatHub.html": {
|
||||
"href": "api/server/EchoHub.Server.Hubs.ChatHub.html",
|
||||
"title": "Class ChatHub | EchoHub Documentation",
|
||||
"summary": "Class ChatHub Namespace EchoHub.Server.Hubs Assembly EchoHub.Server.dll [Authorize] public class ChatHub : Hub<IEchoHubClient>, IDisposable Inheritance object Hub Hub<IEchoHubClient> ChatHub Implements IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatHub(EchoHubDbContext, ILogger<ChatHub>, PresenceTracker) public ChatHub(EchoHubDbContext db, ILogger<ChatHub> logger, PresenceTracker presenceTracker) Parameters db EchoHubDbContext logger ILogger<ChatHub> presenceTracker PresenceTracker Methods GetChannelHistory(string, int) public Task<List<MessageDto>> GetChannelHistory(string channelName, int count = 50) Parameters channelName string count int Returns Task<List<MessageDto>> GetOnlineUsers(string) public Task<List<UserPresenceDto>> GetOnlineUsers(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> JoinChannel(string) public Task<List<MessageDto>> JoinChannel(string channelName) Parameters channelName string Returns Task<List<MessageDto>> LeaveChannel(string) public Task LeaveChannel(string channelName) Parameters channelName string Returns Task OnConnectedAsync() public override Task OnConnectedAsync() Returns Task OnDisconnectedAsync(Exception?) public override Task OnDisconnectedAsync(Exception? exception) Parameters exception Exception Returns Task SendMessage(string, string) public Task SendMessage(string channelName, string content) Parameters channelName string content string Returns Task UpdateStatus(UserStatus, string?) public Task UpdateStatus(UserStatus status, string? statusMessage) Parameters status UserStatus statusMessage string Returns Task"
|
||||
"summary": "Class ChatHub Namespace EchoHub.Server.Hubs Assembly EchoHub.Server.dll [Authorize] public class ChatHub : Hub<IEchoHubClient>, IDisposable Inheritance object Hub Hub<IEchoHubClient> ChatHub Implements IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatHub(IChatService, ILogger<ChatHub>) public ChatHub(IChatService chatService, ILogger<ChatHub> logger) Parameters chatService IChatService logger ILogger<ChatHub> Methods GetChannelHistory(string, int) public Task<List<MessageDto>> GetChannelHistory(string channelName, int count = 50) Parameters channelName string count int Returns Task<List<MessageDto>> GetOnlineUsers(string) public Task<List<UserPresenceDto>> GetOnlineUsers(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> JoinChannel(string) public Task<List<MessageDto>> JoinChannel(string channelName) Parameters channelName string Returns Task<List<MessageDto>> LeaveChannel(string) public Task LeaveChannel(string channelName) Parameters channelName string Returns Task OnConnectedAsync() public override Task OnConnectedAsync() Returns Task OnDisconnectedAsync(Exception?) public override Task OnDisconnectedAsync(Exception? exception) Parameters exception Exception Returns Task SendMessage(string, string) public Task SendMessage(string channelName, string content) Parameters channelName string content string Returns Task UpdateStatus(UserStatus, string?) public Task UpdateStatus(UserStatus status, string? statusMessage) Parameters status UserStatus statusMessage string Returns Task"
|
||||
},
|
||||
"api/server/EchoHub.Server.Hubs.html": {
|
||||
"href": "api/server/EchoHub.Server.Hubs.html",
|
||||
"title": "Namespace EchoHub.Server.Hubs | EchoHub Documentation",
|
||||
"summary": "Namespace EchoHub.Server.Hubs Classes ChatHub"
|
||||
},
|
||||
"api/server/EchoHub.Server.Services.ChatService.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.ChatService.html",
|
||||
"title": "Class ChatService | EchoHub Documentation",
|
||||
"summary": "Class ChatService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class ChatService : IChatService Inheritance object ChatService Implements IChatService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatService(IServiceScopeFactory, PresenceTracker, IEnumerable<IChatBroadcaster>, ILogger<ChatService>) public ChatService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, IEnumerable<IChatBroadcaster> broadcasters, ILogger<ChatService> logger) Parameters scopeFactory IServiceScopeFactory presenceTracker PresenceTracker broadcasters IEnumerable<IChatBroadcaster> logger ILogger<ChatService> Methods AuthenticateUserAsync(string, string) public Task<(Guid UserId, string Username)?> AuthenticateUserAsync(string username, string password) Parameters username string password string Returns Task<(Guid UserId, string Username)?> BroadcastChannelUpdatedAsync(ChannelDto, string?) public Task BroadcastChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task BroadcastMessageAsync(string, MessageDto) public Task BroadcastMessageAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task GetChannelHistoryAsync(string, int) public Task<List<MessageDto>> GetChannelHistoryAsync(string channelName, int count) Parameters channelName string count int Returns Task<List<MessageDto>> GetChannelListAsync() public Task<List<ChannelListItem>> GetChannelListAsync() Returns Task<List<ChannelListItem>> GetChannelTopicAsync(string) public Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName) Parameters channelName string Returns Task<(string Topic, bool Exists)> GetChannelsForUserAsync(string) public Task<List<string>> GetChannelsForUserAsync(string username) Parameters username string Returns Task<List<string>> GetOnlineUsersAsync(string) public Task<List<UserPresenceDto>> GetOnlineUsersAsync(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> GetUserProfileAsync(string) public Task<UserProfileDto?> GetUserProfileAsync(string username) Parameters username string Returns Task<UserProfileDto> JoinChannelAsync(string, Guid, string, string) public Task<(List<MessageDto> History, string? Error)> JoinChannelAsync(string connectionId, Guid userId, string username, string channelName) Parameters connectionId string userId Guid username string channelName string Returns Task<(List<MessageDto> History, string Error)> LeaveChannelAsync(string, string, string) public Task LeaveChannelAsync(string connectionId, string username, string channelName) Parameters connectionId string username string channelName string Returns Task SendMessageAsync(Guid, string, string, string) public Task<string?> SendMessageAsync(Guid userId, string username, string channelName, string content) Parameters userId Guid username string channelName string content string Returns Task<string> UpdateStatusAsync(Guid, string, UserStatus, string?) public Task<string?> UpdateStatusAsync(Guid userId, string username, UserStatus status, string? statusMessage) Parameters userId Guid username string status UserStatus statusMessage string Returns Task<string> UserConnectedAsync(string, Guid, string) public Task UserConnectedAsync(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string Returns Task UserDisconnectedAsync(string) public Task<string?> UserDisconnectedAsync(string connectionId) Parameters connectionId string Returns Task<string>"
|
||||
},
|
||||
"api/server/EchoHub.Server.Services.FileStorageService.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.FileStorageService.html",
|
||||
"title": "Class FileStorageService | EchoHub Documentation",
|
||||
@@ -442,17 +512,22 @@
|
||||
"api/server/EchoHub.Server.Services.PresenceTracker.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.PresenceTracker.html",
|
||||
"title": "Class PresenceTracker | EchoHub Documentation",
|
||||
"summary": "Class PresenceTracker Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class PresenceTracker Inheritance object PresenceTracker Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors PresenceTracker() public PresenceTracker() Methods GetChannelsForUser(string) public List<string> GetChannelsForUser(string username) Parameters username string Returns List<string> GetConnectionsInChannels(List<string>) Get all unique connection IDs for users who share any of the given channels. public List<string> GetConnectionsInChannels(List<string> channels) Parameters channels List<string> Returns List<string> GetOnlineUserCount() public int GetOnlineUserCount() Returns int GetOnlineUsersInChannel(string) public List<string> GetOnlineUsersInChannel(string channelName) Parameters channelName string Returns List<string> IsOnline(string) public bool IsOnline(string username) Parameters username string Returns bool JoinChannel(string, string) Returns true if this is a new join, false if the user was already in the channel. public bool JoinChannel(string username, string channelName) Parameters username string channelName string Returns bool LeaveChannel(string, string) public void LeaveChannel(string username, string channelName) Parameters username string channelName string UserConnected(string, Guid, string) public void UserConnected(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string UserDisconnected(string) public string? UserDisconnected(string connectionId) Parameters connectionId string Returns string"
|
||||
"summary": "Class PresenceTracker Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class PresenceTracker Inheritance object PresenceTracker Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors PresenceTracker() public PresenceTracker() Methods GetChannelsForUser(string) public List<string> GetChannelsForUser(string username) Parameters username string Returns List<string> GetConnectionsInChannels(List<string>) Get all unique connection IDs for users who share any of the given channels. public List<string> GetConnectionsInChannels(List<string> channels) Parameters channels List<string> Returns List<string> GetOnlineUserCount() public int GetOnlineUserCount() Returns int GetOnlineUsersInChannel(string) public List<string> GetOnlineUsersInChannel(string channelName) Parameters channelName string Returns List<string> GetUsernameForConnection(string) public string? GetUsernameForConnection(string connectionId) Parameters connectionId string Returns string IsOnline(string) public bool IsOnline(string username) Parameters username string Returns bool JoinChannel(string, string) Returns true if this is a new join, false if the user was already in the channel. public bool JoinChannel(string username, string channelName) Parameters username string channelName string Returns bool LeaveChannel(string, string) public void LeaveChannel(string username, string channelName) Parameters username string channelName string UserConnected(string, Guid, string) public void UserConnected(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string UserDisconnected(string) public string? UserDisconnected(string connectionId) Parameters connectionId string Returns string"
|
||||
},
|
||||
"api/server/EchoHub.Server.Services.ServerDirectoryService.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.ServerDirectoryService.html",
|
||||
"title": "Class ServerDirectoryService | EchoHub Documentation",
|
||||
"summary": "Class ServerDirectoryService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public sealed class ServerDirectoryService : BackgroundService, IDisposable Inheritance object BackgroundService ServerDirectoryService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ServerDirectoryService(IConfiguration, PresenceTracker, ILogger<ServerDirectoryService>) public ServerDirectoryService(IConfiguration configuration, PresenceTracker presenceTracker, ILogger<ServerDirectoryService> logger) Parameters configuration IConfiguration presenceTracker PresenceTracker logger ILogger<ServerDirectoryService> Methods ExecuteAsync(CancellationToken) protected override Task ExecuteAsync(CancellationToken stoppingToken) Parameters stoppingToken CancellationToken Returns Task StopAsync(CancellationToken) public override Task StopAsync(CancellationToken cancellationToken) Parameters cancellationToken CancellationToken Returns Task"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"api/server/EchoHub.Server.Services.html": {
|
||||
"href": "api/server/EchoHub.Server.Services.html",
|
||||
"title": "Namespace EchoHub.Server.Services | EchoHub Documentation",
|
||||
"summary": "Namespace EchoHub.Server.Services Classes FileStorageService FileValidationHelper ImageToAsciiService PresenceTracker ServerDirectoryService"
|
||||
"summary": "Namespace EchoHub.Server.Services Classes ChatService FileStorageService FileValidationHelper ImageToAsciiService PresenceTracker ServerDirectoryService SignalRBroadcaster"
|
||||
},
|
||||
"api/server/EchoHub.Server.Setup.DatabaseSetup.html": {
|
||||
"href": "api/server/EchoHub.Server.Setup.DatabaseSetup.html",
|
||||
@@ -472,17 +547,17 @@
|
||||
"articles/architecture.html": {
|
||||
"href": "articles/architecture.html",
|
||||
"title": "Architecture | EchoHub Documentation",
|
||||
"summary": "Architecture Overview EchoHub follows a decentralized model where each server is fully independent. There is no central authority or account federation. Users create one account per server. Components EchoHub.Core Shared library containing: Models: User, Channel, Message, RefreshToken DTOs: Record types for API requests/responses Contracts: IEchoHubClient -- the strongly-typed SignalR client interface Constants: ValidationConstants (shared regex patterns), HubConstants EchoHub.Server ASP.NET Core web application: Controllers: REST API endpoints for auth, channels, users, files, server info Hubs: SignalR ChatHub for real-time messaging Auth: JWT token service (15-min access tokens, 30-day refresh tokens) Data: EF Core with SQLite Services: Presence tracking, file storage, image-to-ASCII conversion EchoHub.Client Terminal.Gui v2 TUI application: UI: Main window, dialogs, chat renderer with ANSI color support Services: API client with automatic token refresh, SignalR connection wrapper Themes: 6 built-in color themes Config: Client configuration management Communication REST API for authentication, profile management, channel CRUD, file uploads SignalR WebSocket for real-time messaging and presence updates JWT tokens passed via query string for SignalR authentication"
|
||||
"summary": "Architecture Overview EchoHub follows a decentralized model where each server is fully independent. There is no central authority or account federation. Users create one account per server. The server exposes two protocol interfaces to the same chat backend: IRC Client ──► TCP :6667 ──► IrcGateway ──┐ ├──► ChatService ──► DB + PresenceTracker TUI Client ──► WebSocket ──► ChatHub ─────┘ Both protocols call into a shared IChatService for business logic. Events fan out to all registered IChatBroadcaster implementations (SignalR and IRC). Components EchoHub.Core Shared library containing: Models: User, Channel, Message, RefreshToken DTOs: Record types for API requests/responses Contracts: IChatService (protocol-agnostic chat operations), IChatBroadcaster (event fan-out interface), IEchoHubClient (SignalR client interface) Constants: ValidationConstants (shared regex patterns), HubConstants EchoHub.Server ASP.NET Core web application: Controllers: REST API endpoints for auth, channels, users, files, server info Hubs: SignalR ChatHub -- thin adapter delegating to IChatService Auth: JWT token service (15-min access tokens, 30-day refresh tokens) Data: EF Core with SQLite Services: ChatService (core business logic), SignalRBroadcaster, presence tracking, file storage, image-to-ASCII conversion EchoHub.Server.Irc IRC protocol gateway (separate project for clean separation of concerns): IrcGatewayService: BackgroundService with TCP listener on configured port(s), optional TLS IrcCommandHandler: Per-client IRC command dispatch -- handles CAP/SASL, NICK/USER/PASS, JOIN/PART/PRIVMSG/QUIT, NAMES/TOPIC/WHO/WHOIS/AWAY/LIST/MODE/MOTD IrcBroadcaster: IChatBroadcaster implementation that formats chat events as IRC protocol lines, with echo suppression (IRC convention) IrcMessageFormatter: Converts MessageDto to IRC PRIVMSG lines -- splits long text at word boundaries (~400 byte chunks), sends images as ASCII art line-by-line IRC users authenticate with existing EchoHub accounts via PASS/NICK/USER or SASL PLAIN (BCrypt verification against the database). EchoHub.Client Terminal.Gui v2 TUI application: UI: Main window, dialogs, chat renderer with ANSI color support Services: API client with automatic token refresh, SignalR connection wrapper Themes: 13 built-in color themes Config: Client configuration management Communication REST API for authentication, profile management, channel CRUD, file uploads SignalR WebSocket for real-time messaging and presence updates (TUI client) IRC TCP for real-time messaging via standard IRC protocol (IRC clients) JWT tokens passed via query string for SignalR authentication IRC authentication via PASS/SASL PLAIN against BCrypt password hashes Broadcaster Pattern The IChatBroadcaster interface allows multiple protocols to receive chat events: SignalRBroadcaster: Wraps IHubContext<ChatHub>, filters out IRC connections IrcBroadcaster: Iterates live IRC connections in a channel, formats events as IRC protocol lines Both are registered in DI and called by ChatService when events occur. This means a message sent from an IRC client appears in the TUI client, and vice versa."
|
||||
},
|
||||
"articles/getting-started.html": {
|
||||
"href": "articles/getting-started.html",
|
||||
"title": "Getting Started | EchoHub Documentation",
|
||||
"summary": "Getting Started Prerequisites .NET 10 SDK Run the Server dotnet run --project src/EchoHub.Server On first run, the server automatically: Creates appsettings.json from the example config Generates a secure JWT secret Creates the SQLite database with a #general channel Run the Client dotnet run --project src/EchoHub.Client Connect to a server, register an account, and start chatting. Build from Source dotnet build src/EchoHub.slnx"
|
||||
"summary": "Getting Started Prerequisites .NET 10 SDK Or grab a self-contained binary from Releases -- no runtime needed. Run the Server dotnet run --project src/EchoHub.Server On first run, the server automatically: Creates appsettings.json from the example config Generates a secure JWT secret Creates the SQLite database with a #general channel Run the Client dotnet run --project src/EchoHub.Client Connect to a server, register an account, and start chatting. Connect via IRC Enable the IRC gateway in the server's appsettings.json: { \"Irc\": { \"Enabled\": true, \"Port\": 6667 } } Then connect with any standard IRC client: irssi -c localhost -p 6667 -w <password> -n <username> IRC users must have an existing EchoHub account. Authentication works via PASS/NICK/USER or SASL PLAIN. Messages flow bidirectionally between IRC and TUI clients. For TLS, set TlsEnabled: true, TlsPort: 6697, and provide a PKCS#12 certificate path. See the Architecture page for details on how the IRC gateway integrates with the chat service. Configuration Server configuration is in appsettings.json (auto-generated on first run). See the example config for all available options. To list your server on the public directory, set Server:PublicServer to true and Server:PublicHost to your server's public address. Build from Source dotnet build src/EchoHub.slnx"
|
||||
},
|
||||
"changelog/index.html": {
|
||||
"href": "changelog/index.html",
|
||||
"title": "Changelog | EchoHub Documentation",
|
||||
"summary": "Changelog Release history for EchoHub. Releases v0.1.1 - Directory Connection Self-Healing v0.1.0 - Initial Release"
|
||||
"summary": "Changelog Release history for EchoHub. Releases 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",
|
||||
@@ -494,9 +569,14 @@
|
||||
"title": "v0.1.1 - Directory Connection Self-Healing | EchoHub Documentation",
|
||||
"summary": "v0.1.1 - Directory Connection Self-Healing Fixes Server now reconnects to the EchoHubSpace directory indefinitely when the API goes down, using exponential backoff (2s → 30s cap) If automatic reconnect is exhausted, the connection is rebuilt from scratch automatically Initial connection attempts also use exponential backoff instead of a fixed 30s delay"
|
||||
},
|
||||
"changelog/v0.2.0.html": {
|
||||
"href": "changelog/v0.2.0.html",
|
||||
"title": "v0.2.0 - IRC Gateway | EchoHub Documentation",
|
||||
"summary": "v0.2.0 - IRC Gateway Features IRC protocol gateway -- native IRC clients (irssi, WeeChat, HexChat, etc.) can connect to EchoHub servers Cross-protocol messaging -- messages flow bidirectionally between IRC and TUI clients in real time SASL PLAIN authentication -- IRC clients can authenticate via SASL or traditional PASS/NICK/USER Full IRC command support -- JOIN, PART, PRIVMSG, QUIT, NAMES, TOPIC, WHO, WHOIS, AWAY, LIST, MODE, MOTD TLS support -- optional encrypted IRC connections on port 6697 Image-to-IRC formatting -- images appear as ASCII art line-by-line with download URLs Message splitting -- long messages automatically split at word boundaries (~400 byte chunks) Configurable MOTD -- server message of the day for IRC clients Architecture Changes Extracted shared business logic from ChatHub into protocol-agnostic IChatService Introduced IChatBroadcaster pattern for multi-protocol event fan-out ChatHub refactored to thin adapter delegating to IChatService ChannelsController updated to use IChatService for broadcasts New EchoHub.Server.Irc project for clean separation of concerns IChatService and IChatBroadcaster interfaces live in EchoHub.Core/Contracts"
|
||||
},
|
||||
"index.html": {
|
||||
"href": "index.html",
|
||||
"title": "EchoHub Documentation | EchoHub Documentation",
|
||||
"summary": "EchoHub Documentation Welcome to the EchoHub documentation. EchoHub is a decentralized, IRC-like chat application built with .NET 10 and SignalR. Quick Links Getting Started - Set up and run EchoHub Architecture - Understand the system design API Reference - Generated C# API documentation Changelog - Release history"
|
||||
"summary": "EchoHub Documentation Welcome to the EchoHub documentation. EchoHub is a decentralized, IRC-style chat platform. Self-hosted, terminal-first, with a built-in IRC gateway so native IRC clients can connect alongside the TUI client. Website: echohub.voidcube.cloud | Public Servers: Server Directory Quick Links Getting Started - Set up and run EchoHub Architecture - System design and IRC gateway API Reference - Generated C# API documentation Changelog - Release history"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user