117 lines
3.5 KiB
C#
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|