mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-04 08:36:11 +02:00
- Add IrcGatewayService to handle IRC connections and commands. - Create IrcMessage class for parsing IRC protocol lines. - Implement IrcMessageFormatter for formatting messages as IRC lines. - Define IrcNumericReply constants for IRC numeric replies. - Add IrcOptions class for configuration settings related to IRC. - Create IrcServiceExtensions for adding IRC services to the application. - Refactor ChannelsController to use IChatService for broadcasting messages and channel updates. - Update ChatHub to utilize IChatService for user connection and message handling. - Introduce ChatService to manage chat-related operations and interactions. - Implement SignalRBroadcaster for broadcasting messages to SignalR clients. - Update PresenceTracker to retrieve usernames for connections. - Modify appsettings.example.json to include IRC configuration options. - Update solution file to include the new IRC project.
37 lines
1.6 KiB
C#
37 lines
1.6 KiB
C#
using EchoHub.Core.DTOs;
|
|
using EchoHub.Core.Models;
|
|
|
|
namespace EchoHub.Core.Contracts;
|
|
|
|
public interface IChatService
|
|
{
|
|
// Connection lifecycle
|
|
Task UserConnectedAsync(string connectionId, Guid userId, string username);
|
|
Task<string?> UserDisconnectedAsync(string connectionId);
|
|
|
|
// Channel operations
|
|
Task<(List<MessageDto> History, string? Error)> JoinChannelAsync(string connectionId, Guid userId, string username, string channelName);
|
|
Task LeaveChannelAsync(string connectionId, string username, string channelName);
|
|
|
|
// Messaging
|
|
Task<string?> SendMessageAsync(Guid userId, string username, string channelName, string content);
|
|
Task<List<MessageDto>> GetChannelHistoryAsync(string channelName, int count);
|
|
|
|
// Presence
|
|
Task<string?> UpdateStatusAsync(Guid userId, string username, UserStatus status, string? statusMessage);
|
|
Task<List<UserPresenceDto>> GetOnlineUsersAsync(string channelName);
|
|
|
|
// Broadcasting (used by controllers and IRC gateway)
|
|
Task BroadcastMessageAsync(string channelName, MessageDto message);
|
|
Task BroadcastChannelUpdatedAsync(ChannelDto channel, string? channelName = null);
|
|
|
|
// Query operations (used by IRC gateway for WHOIS, TOPIC, LIST, AUTH)
|
|
Task<UserProfileDto?> GetUserProfileAsync(string username);
|
|
Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName);
|
|
Task<List<ChannelListItem>> GetChannelListAsync();
|
|
Task<List<string>> GetChannelsForUserAsync(string username);
|
|
Task<(Guid UserId, string Username)?> AuthenticateUserAsync(string username, string password);
|
|
}
|
|
|
|
public record ChannelListItem(string Name, string? Topic, int OnlineCount);
|