using System.Collections.Generic; using System.Linq; using Microsoft.AspNet.SignalR; using Learun.Util; using Learun.Application.WorkFlow; using Learun.Cache.Base; using Learun.Cache.Factory; using Newtonsoft.Json; using System.Threading.Tasks; using Learun.Application.IM; namespace Learun.Application.Web.Hubs { public class ChatHub : Hub { private NWFProcessIBLL nWFProcessIBLL = new NWFProcessBLL(); public ICache cache = CacheFactory.CaChe(); private IMMsgIBLL iMMsgIBLL = new IMMsgBLL(); public void SendMsg(string userId, string ProjectId) { if (string.IsNullOrEmpty(ProjectId)) { ProjectId = ""; } //获取正在连接的对象 List listSinglar = cache.Read>("SinglaRConnect"); if (listSinglar != null && listSinglar.Count > 0) { //推送给连接对象 List listConnectionId = listSinglar.Where(o => o.UserId == userId).Select(o => o.ConnectionId).ToList(); IEnumerable list = new List(); list = iMMsgIBLL.GetProjectMsg(ProjectId, userId); //获取未处理数据 int count = 0; string json = ""; list = list.OrderByDescending(x => x.F_CreateDate).ToList(); if (list != null && list.Count() > 0) { count = list.Count(); json = JsonConvert.SerializeObject(list.Take(count > 5 ? 5 : count)); } ReturnData msg = new ReturnData() { Count = count, Json = json }; GlobalHost.ConnectionManager.GetHubContext().Clients.Clients(listConnectionId).sendMsg(msg); } } public void Send(string userId, string ProjectId) { if (string.IsNullOrEmpty(ProjectId)) { ProjectId = ""; } //获取正在连接的对象 List listSinglar = cache.Read>("SinglaRConnect"); if (listSinglar != null && listSinglar.Count > 0) { //推送给连接对象 List listConnectionId = listSinglar.Where(o => o.UserId == userId).Select(o => o.ConnectionId).ToList(); string pagination = "{'rows':1000,'page':1,'sidx':'F_CreateDate DESC','sord':'ASC','records':0,'total':0}"; string queryJson = "{ 'StartTime':'','EndTime':'','IsLook':'0'}"; Pagination paginationobj = pagination.ToObject(); IEnumerable list = new List(); UserInfo userInfo = new UserInfo(); userInfo.userId = userId; list = nWFProcessIBLL.GetMyMessageList(userInfo, paginationobj, queryJson, "", ProjectId); //获取未处理数据 int count = 0; string json = ""; list = list.OrderByDescending(x => x.F_CreateDate).ToList(); if (list != null && list.Count() > 0) { count = list.Count(); json = JsonConvert.SerializeObject(list.Take(count > 5 ? 5 : count)); } ReturnData msg = new ReturnData() { Count = count, Json = json }; GlobalHost.ConnectionManager.GetHubContext().Clients.Clients(listConnectionId).broadcastMessage(msg); } } public static IEnumerable IEnumerableAdd(IEnumerable collection, T value) { (collection as List).Add(value); return collection; } public ReturnData sendMessage() { string pagination = "{'rows':1000,'page':1,'sidx':'F_CreateDate DESC','sord':'ASC','records':0,'total':0}"; string queryJson = "{ 'StartTime':'','EndTime':''}"; Pagination paginationobj = pagination.ToObject(); IEnumerable list = new List(); UserInfo userInfo = LoginUserInfo.Get(); list = nWFProcessIBLL.GetMyTaskPageList(userInfo, paginationobj, queryJson, "",""); //获取未处理数据 int count = 0; string json = ""; if (list != null && list.Count() > 0) { count = list.Count(); json = JsonConvert.SerializeObject(list.Take(count > 5 ? 5 : count)); } ReturnData msg = new ReturnData() { Count = count, Json = json }; return msg; } /// /// 推送消息 /// public async Task Send() { string pagination = "{'rows':1000,'page':1,'sidx':'F_CreateDate DESC','sord':'ASC','records':0,'total':0}"; string queryJson = "{ 'StartTime':'','EndTime':''}"; Pagination paginationobj = pagination.ToObject(); IEnumerable list = new List(); UserInfo userInfo = LoginUserInfo.Get(); list = nWFProcessIBLL.GetMyTaskPageList(userInfo, paginationobj, queryJson, "",""); //获取未处理数据 int count = 0; string json = ""; if (list != null && list.Count() > 0) { count = list.Count(); json = JsonConvert.SerializeObject(list.Take(count > 5 ? 5 : count)); } ReturnData msg = new ReturnData() { Count = count, Json = json }; //获取正在连接的对象 List listSinglar = cache.Read>("SinglaRConnect"); if (listSinglar != null && listSinglar.Count > 0) { //推送给连接对象 List listConnectionId = listSinglar.Where(o => o.UserId == userInfo.userId).Select(o => o.ConnectionId).ToList(); await GlobalHost.ConnectionManager.GetHubContext().Clients.Clients(listConnectionId).SettingMessages(msg); } } #region 重写连接与断开方法 /// /// 初连 /// /// public override Task OnConnected() { //获取参数 string userId = Context.Request.QueryString["userId"]; List list = cache.Read>("SinglaRConnect"); if (list == null) { list = new List(); } list.Add(new SinglaRConnect() { UserId = userId, ConnectionId = Context.ConnectionId }); cache.Write("SinglaRConnect", list); return base.OnConnected(); } /// /// 断开 /// /// /// public override Task OnDisconnected(bool stopCalled) { List list = cache.Read>("SinglaRConnect"); if (list != null && list.Count > 0) { //获取参数 string connectionId = Context.ConnectionId; SinglaRConnect singlar = list.Where(o => o.ConnectionId == connectionId).FirstOrDefault(); if (singlar != null) { list.Remove(singlar); } cache.Write("SinglaRConnect", list); } return base.OnDisconnected(stopCalled); } #endregion } /// /// 返回实体 /// public class ReturnData { /// /// 未处理条数 /// public int Count { get; set; } /// /// 信息集 /// public string Json { get; set; } } #region SinglRConnect /// /// singlar的连接对象 /// public class SinglaRConnect { public string UserId { get; set; } public string ConnectionId { get; set; } } #endregion }