using Luna.Core.Abstractions; using Luna.Shared; using Microsoft.AspNetCore.SignalR; namespace Luna.Core.Hubs; public class ChatHubContext(IHubContext hubContext) : IChatHubContext { public async Task SendResponseAsync(string connectionId, ChannelMessage message, CancellationToken cancellationToken = default) { await GetClient(connectionId) .SendAsync("OnMessageReceived", message, cancellationToken); } public async Task SendStreamingResponseAsync( string connectionId, IAsyncEnumerable messageStream, CancellationToken cancellationToken = default) { var client = GetClient(connectionId); await foreach (var update in messageStream.WithCancellation(cancellationToken)) { await client.SendAsync("OnMessageStreamReceived", update, cancellationToken); } } private ISingleClientProxy GetClient(string connectionId) => hubContext.Clients.Client(connectionId); }