using Microsoft.AspNetCore.SignalR; namespace OASystem.API.OAMethodLib.Hubs { /// <summary> /// 定义集线器 /// </summary> public class MyHub : Hub { /// <summary> /// 用户字典 /// </summary> private static Dictionary<string, string> dictUsers = new Dictionary<string, string>(); /// <summary> /// 建立连接回调 /// </summary> /// <returns></returns> public override Task OnConnectedAsync() { Console.WriteLine($"ID:{Context.ConnectionId} 已连接"); return base.OnConnectedAsync(); } /// <summary> /// 断开连接回调 /// </summary> /// <param name="exception"></param> /// <returns></returns> public override Task OnDisconnectedAsync(Exception? exception) { Console.WriteLine($"ID:{Context.ConnectionId} 已断开"); return base.OnDisconnectedAsync(exception); } /// <summary> /// 登录功能,将用户ID和ConntectionId关联起来 /// </summary> /// <param name="userId"></param> public void Login(string userId) { if (!dictUsers.ContainsKey(userId)) { dictUsers[userId] = Context.ConnectionId; } Console.WriteLine($"{userId}登录成功,ConnectionId={Context.ConnectionId}"); //向所有用户发送当前在线的用户列表 Clients.All.SendAsync("Users", dictUsers.Keys.ToList()); } /// <summary> /// 退出功能,当客户端退出时调用 /// </summary> /// <param name="userId"></param> public void Logout(string userId) { if (dictUsers.ContainsKey(userId)) { dictUsers.Remove(userId); } Console.WriteLine($"{userId}退出成功,ConnectionId={Context.ConnectionId}"); } } }