using BlazorClient; using Microsoft.AspNetCore.SignalR; namespace UndoExample; public record Tweet(Guid TweetId, string Message) : ICommand; public record Tweeted(Guid TweetId, string Message) : IEvent; public class TweetHandler : IHandleMessages<Tweet> { private readonly ILogger<TweetHandler> _logger; public TweetHandler(ILogger<TweetHandler> logger) { _logger = logger; } public async Task Handle(Tweet message, IMessageHandlerContext context) { _logger.LogInformation($"Tweeted: {message.Message}"); // Do something here like persisting the tweet to the DB. await context.Publish(new Tweeted(message.TweetId, message.Message)); } } public class TweetedSignalRHandler : IHandleMessages<Tweeted> { private readonly IHubContext<TweetHub> _hubContext; public TweetedSignalRHandler(IHubContext<TweetHub> hubContext) { _hubContext = hubContext; } public async Task Handle(Tweeted message, IMessageHandlerContext context) { await _hubContext.Clients.All.SendAsync("tweeted", message.TweetId, message.Message, context.CancellationToken); } }