BotSharp/src/Plugins/BotSharp.Plugin.ChatHub/Helpers/EventEmitter.cs
Jicheng Lu 8778a5f8ed 1. refine chart handler instruction
2. add mechanism to allow sending multiple messages in a single round
2025-09-05 01:17:18 -05:00

40 lines
1.3 KiB
C#

using Microsoft.AspNetCore.SignalR;
using System.Runtime.CompilerServices;
namespace BotSharp.Plugin.ChatHub.Helpers;
internal class EventEmitter
{
internal static async Task SendChatEvent<T>(
IServiceProvider services,
ILogger logger,
string @event,
string conversationId,
string userId,
T data,
string callerClass = "",
[CallerMemberName] string callerMethod = "",
LogLevel logLevel = LogLevel.Warning)
{
try
{
var settings = services.GetRequiredService<ChatHubSettings>();
var chatHub = services.GetRequiredService<IHubContext<SignalRHub>>();
switch (settings.EventDispatchBy)
{
case EventDispatchType.Group when !string.IsNullOrEmpty(conversationId):
await chatHub.Clients.Group(conversationId).SendAsync(@event, data);
break;
case EventDispatchType.User when !string.IsNullOrEmpty(userId):
await chatHub.Clients.User(userId).SendAsync(@event, data);
break;
}
}
catch (Exception ex)
{
logger.Log(logLevel, ex, $"Failed to send event '{@event}' in ({callerClass}-{callerMethod}) (conversation id: {conversationId})");
}
}
}