using iWare.Wms.Core;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
namespace iWare.Wms.Application
{
///
/// 消息发送服务
///
[ApiDescriptionSettings(Name = "Message", Order = 100)]
[Route("api")]
public class SendMessageService : ISendMessageService, IDynamicApiController, ITransient
{
private readonly ISysCacheService _sysCacheService;
private readonly IHubContext _chatHubContext;
public SendMessageService(ISysCacheService sysCacheService, IHubContext chatHubContext)
{
_sysCacheService = sysCacheService;
_chatHubContext = chatHubContext;
}
///
/// 发送消息给所有人
///
/// 发送标题
/// 发送内容
/// 消息类型
///
[HttpGet("sysMessage/allUser")]
public async Task SendMessageToAllUser(string title, string message, MessageType type)
{
await _chatHubContext.Clients.All.ReceiveMessage(new { title = title, message = message, messagetype = type });
}
///
/// 发送消息给除了发送人的其他人
///
/// 发送标题
/// 发送内容
/// 发送人
/// 消息类型
///
[HttpGet("sysMessage/otherUser")]
public async Task SendMessageToOtherUser(string title, string message, MessageType type, long userId)
{
var onlineuserlist = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER);
var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
if (user != null)
{
await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(new { title = title, message = message, messagetype = type });
}
}
///
/// 发送消息给某个人
///
/// 发送标题
/// 发送内容
/// 接收人
/// 消息类型
///
[HttpGet("sysMessage/user")]
public async Task SendMessageToUser(string title, string message, MessageType type, long userId)
{
var onlineuserlist = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER);
var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
if (user != null)
{
foreach (var item in user)
{
await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(new { title = title, message = message, messagetype = type });
}
}
}
///
/// 发送消息给某些人
///
/// 发送标题
/// 发送内容
/// 接收人列表
/// 消息类型
///
[HttpGet("sysMessage/users")]
public async Task SendMessageToUsers(string title, string message, MessageType type, List userId)
{
var onlineuserlist = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER);
List userlist = new List();
foreach (var item in onlineuserlist)
{
if (userId.Contains(item.UserId))
{
userlist.Add(item.ConnectionId);
}
}
await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(new { title = title, message = message, messagetype = type });
}
}
}