Files
HTCloud/HT.Cloud.Service/Hubs/MessageHub.cs
2023-03-03 16:07:50 +08:00

117 lines
3.5 KiB
C#

using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using HT.Cloud.Code;
using HT.Cloud.Domain.InfoManage;
using HT.Cloud.Service.InfoManage;
using HT.Cloud.Service.SystemOrganize;
namespace HT.Cloud.Service
{
public class MessageHub : Hub
{
private string cacheKey = GlobalContext.SystemConfig.ProjectPrefix + "_hubuserinfo_";
private readonly UserService _service;
private readonly MessageService _msgService;
private string cacheKeyOperator = GlobalContext.SystemConfig.ProjectPrefix + "_operator_";// +登录者tokens
public MessageHub(UserService service, MessageService msgService)
{
_service = service;
_msgService = msgService;
}
// <summary>
/// 客户端登录到服务器
/// </summary>
/// <param name="token"></param>
public async Task SendLogin(string token)
{
var user = _service.currentuser;
if (user == null || user.UserId == null)
{
user = CacheHelper.Get<OperatorModel>(cacheKeyOperator + token);
}
if (user != null && user.CompanyId != null)
{
//一个公司一个分组
await Groups.AddToGroupAsync(Context.ConnectionId, user.CompanyId);
//将用户信息存进缓存
var list = await CacheHelper.GetAsync<List<string>>(cacheKey + user.UserId) ?? new List<string>();
//登录计数
var onlinelist = await CacheHelper.GetAsync<List<string>>(cacheKey + "list_" + user.CompanyId) ?? new List<string>();
list.Add(Context.ConnectionId);
onlinelist.Add(Context.ConnectionId);
await CacheHelper.SetAsync(cacheKey + Context.ConnectionId, user.UserId);
await CacheHelper.SetAsync(cacheKey + user.UserId, list);
await CacheHelper.SetAsync(cacheKey + "list_" + user.CompanyId, onlinelist);
}
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="reUserId">收消息的人员Id</param>
/// <param name="message">消息内容</param>
/// <returns></returns>
public async Task SendMessage(string reUserId, string message)
{
if (string.IsNullOrEmpty(reUserId))
{
return;
}
else
{
MessageEntity msg = new MessageEntity();
msg.F_EnabledMark = true;
msg.F_MessageType = 1;
msg.F_CreatorUserName = _service.currentuser.UserName;
msg.F_MessageInfo = message;
msg.F_ToUserId = reUserId;
msg.F_ClickRead = true;
await _msgService.SubmitForm(msg);
}
}
public override async Task OnDisconnectedAsync(Exception exception)
{
var user = _service.currentuser;
//删除缓存连接
var userId = await CacheHelper.GetAsync<string>(cacheKey + Context.ConnectionId);
if (!string.IsNullOrEmpty(userId))
{
//将用户信息存进缓存
var list = await CacheHelper.GetAsync<List<string>>(cacheKey + userId);
//登录计数
var onlinelist = await CacheHelper.GetAsync<List<string>>(cacheKey + "list_" + user.CompanyId);
if (list != null)
{
list.Remove(Context.ConnectionId);
if (list.Count == 0)
{
await CacheHelper.RemoveAsync(cacheKey + userId);
}
else
{
await CacheHelper.SetAsync(cacheKey + userId, list);
}
}
if (onlinelist != null)
{
onlinelist.Remove(Context.ConnectionId);
if (list.Count == 0)
{
await CacheHelper.RemoveAsync(cacheKey + "list_" + user.CompanyId);
}
else
{
await CacheHelper.SetAsync(cacheKey + "list_" + user.CompanyId, onlinelist);
}
}
await CacheHelper.RemoveAsync(cacheKey + Context.ConnectionId);
}
await base.OnDisconnectedAsync(exception);
}
}
}