Files
HTCloud/HT.Cloud.Service/Event/MessageEventSubscriber.cs

59 lines
1.5 KiB
C#
Raw Normal View History

2023-03-03 16:07:50 +08:00
using Jaina;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using HT.Cloud.Code;
using HT.Cloud.Domain.InfoManage;
namespace HT.Cloud.Service.Event
{
// 实现 IEventSubscriber 接口
public class MessageEventSubscriber : IEventSubscriber
{
private readonly IHubContext<MessageHub> _messageHub;
private string cacheHubKey = GlobalContext.SystemConfig.ProjectPrefix + "_hubuserinfo_";
public MessageEventSubscriber(IHubContext<MessageHub> messageHub)
{
_messageHub = messageHub;
}
[EventSubscribe("Message:send")] // 支持多个
public async Task SendMessage(EventHandlerExecutingContext context)
{
var todo = (BaseEventSource)context.Source;
var input = (MessageEntity)todo.Payload;
if (!string.IsNullOrEmpty(input.companyId) && input.F_ToUserId.Length == 0)
{
await _messageHub.Clients.Group(input.companyId).SendAsync("ReceiveMessage", input.ToJson());
}
else
{
var users = input.F_ToUserId.Split(',');
foreach (var item in users)
{
//存在就私信
var connectionIDs = await CacheHelper.GetAsync<List<string>>(cacheHubKey + item);
if (connectionIDs == null)
{
continue;
}
foreach (var connectionID in connectionIDs)
{
try
{
await _messageHub.Clients.Client(connectionID).SendAsync("ReceiveMessage", input.ToJson());
}
catch (Exception)
{
continue;
}
}
}
}
await Task.CompletedTask;
}
}
}