| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using Microsoft.AspNetCore.SignalR;
- namespace Admin.NET.Core;
- /// <summary>
- /// 聊天集线器
- /// </summary>
- public class ChatHub : Hub<IChatClient>
- {
- private readonly ISysCacheService _cache;
- private readonly ISendMessageService _sendMessageService;
- public ChatHub(ISysCacheService cache,
- ISendMessageService sendMessageService)
- {
- _cache = cache;
- _sendMessageService = sendMessageService;
- }
- /// <summary>
- /// 连接
- /// </summary>
- /// <returns></returns>
- public override async Task OnConnectedAsync()
- {
- //var token = Context.GetHttpContext().Request.Query["access_token"];
- //var claims = JWTEncryption.ReadJwtToken(token)?.Claims;
- //var client = Parser.GetDefault().Parse(Context.GetHttpContext().Request.Headers["User-Agent"]);
- //var loginBrowser = client.UA.Family + client.UA.Major;
- //var loginOs = client.OS.Family + client.OS.Major;
- //var userId = claims.FirstOrDefault(e => e.Type == ClaimConst.CLAINM_USERID)?.Value;
- //var account = claims.FirstOrDefault(e => e.Type == ClaimConst.CLAINM_ACCOUNT)?.Value;
- //var name = claims.FirstOrDefault(e => e.Type == ClaimConst.CLAINM_NAME)?.Value;
- //var tenantId = claims.FirstOrDefault(e => e.Type == ClaimConst.TENANT_ID)?.Value;
- //var onlineUsers = await _cache.GetAsync<List<OnlineUser>>(CommonConst.CACHE_KEY_ONLINE_USER) ?? new List<OnlineUser>();
- //onlineUsers.Add(new OnlineUser
- //{
- // ConnectionId = Context.ConnectionId,
- // UserId = long.Parse(userId),
- // LastTime = DateTime.Now,
- // LastLoginIp = App.HttpContext.GetRequestIPv4(),
- // LastLoginBrowser = loginBrowser,
- // LastLoginOs = loginOs,
- // Account = account,
- // Name = name,
- // TenantId = Convert.ToInt64(tenantId),
- //});
- //await _cache.SetAsync(CommonConst.CACHE_KEY_ONLINE_USER, onlineUsers);
- }
- /// <summary>
- /// 断开
- /// </summary>
- /// <param name="exception"></param>
- /// <returns></returns>
- public override async Task OnDisconnectedAsync(Exception exception)
- {
- //if (!string.IsNullOrEmpty(Context.ConnectionId))
- //{
- // var onlineUsers = await _cache.GetAsync<List<OnlineUser>>(CommonConst.CACHE_KEY_ONLINE_USER);
- // if (onlineUsers == null) return;
- // onlineUsers.RemoveAll(u => u.ConnectionId == Context.ConnectionId);
- // await _cache.SetAsync(CommonConst.CACHE_KEY_ONLINE_USER, onlineUsers);
- //}
- }
- /// <summary>
- /// 前端调用发送方法(发送信息给某个人)
- /// </summary>
- /// <param name="_message"></param>
- /// <returns></returns>
- public async Task ClientsSendMessage(MessageInput _message)
- {
- await _sendMessageService.SendMessageToUser(_message.Title, _message.Message, _message.MessageType, _message.UserId);
- }
- /// <summary>
- /// 前端调用发送方法(发送信息给所有人)
- /// </summary>
- /// <param name="_message"></param>
- /// <returns></returns>
- public async Task ClientsSendMessagetoAll(MessageInput _message)
- {
- await _sendMessageService.SendMessageToAllUser(_message.Title, _message.Message, _message.MessageType);
- }
- /// <summary>
- /// 前端调用发送方法(发送消息给除了发送人的其他人)
- /// </summary>
- /// <param name="_message"></param>
- /// <returns></returns>
- public async Task ClientsSendMessagetoOther(MessageInput _message)
- {
- // _message.userId为发送人ID
- await _sendMessageService.SendMessageToOtherUser(_message.Title, _message.Message, _message.MessageType, _message.UserId);
- }
- /// <summary>
- /// 前端调用发送方法(发送消息给某些人)
- /// </summary>
- /// <param name="_message"></param>
- /// <returns></returns>
- public async Task ClientsSendMessagetoUsers(MessageInput _message)
- {
- await _sendMessageService.SendMessageToUsers(_message.Title, _message.Message, _message.MessageType, _message.UserIds);
- }
- }
|