using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using RoadFlow.Utility; using RoadFlow.Data; using Ewide.Core; namespace RoadFlow.Business.SignalR { public class SignalRHub : Hub { private static IHubContext _hubContext; public static void Configure(IHubContext accessor) { _hubContext = accessor; } /// /// 发送消息 /// /// /// 接收消息的用户ID /// /// public Task SendMessage(string message, List userIds, string userName = "") { return _hubContext.Clients.Groups(userIds).SendAsync("SendMessage", userName.IsNullOrWhiteSpace() ? "系统" : userName, message); } public override async Task OnConnectedAsync() { string userGuid = Furion.App.GetService().UserId; if (userGuid.IsNullOrWhiteSpace()) { return; } string userId = userGuid.ToLower(); await Groups.AddToGroupAsync(Context.ConnectionId, userId); await base.OnConnectedAsync(); } public override async Task OnDisconnectedAsync(Exception exception) { string userGuid = Furion.App.GetService().UserId; if (userGuid.IsNullOrWhiteSpace()) { return; } string userId = userGuid.ToLower(); await Groups.RemoveFromGroupAsync(Context.ConnectionId, userId); await base.OnDisconnectedAsync(exception); } } }