using Luna.Channels.Abstractions; using Luna.Core.Abstractions; using Luna.Shared; namespace Luna.Channels.Cli; public class CliChannel(string channelId, IChatHubContext hubContext) : IChannel { public string ChannelId { get; } = channelId; public string ChannelType => Abstractions.ChannelType.Cli; public string DisplayName { get; } = "Cli"; public bool IsConnected { get; } public event ChannelMessageReceivedEventHandler? MessageReceived; public event ChannelConnectionChangedEventHandler? ConnectionStateChanged; public async Task SendStreamingMessageAsync(IAsyncEnumerable messageStream, CancellationToken cancellationToken = default) { await hubContext.SendStreamingResponseAsync(ChannelId, messageStream, cancellationToken); } public async Task SendMessageAsync(ChannelMessage message, CancellationToken cancellationToken = default) { await hubContext.SendResponseAsync(ChannelId, message, cancellationToken); } public void RaiseMessageReceived(object? sender, ChannelMessage message) { MessageReceived?.Invoke(sender, new ChannelMessageReceivedEventArgs { Channel = this, Message = message, IsHandled = false }); } public void Dispose() { } }