| | |
| | | using Microsoft.AspNet.SignalR; |
| | | using Dapper; |
| | | using Microsoft.AspNet.SignalR; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Data; |
| | | using System.Linq; |
| | | using System.Web; |
| | | using VueWebApi.Models; |
| | | using VueWebApi.Tools; |
| | | |
| | | namespace VueWebApi.Hubs |
| | | { |
| | |
| | | /// </summary> |
| | | private IList<string> userList = UserInfo.userList; |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 用户的connectionID与用户名对照表 |
| | | /// </summary> |
| | | private readonly static Dictionary<string, string> _connections = new Dictionary<string, string>(); |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 发送函数,前端触发该函数给服务器,服务器在将消息发送给前端,(Clients.All.(函数名)是全体广播,另外Clients提供了组播,广播排除,组播排除,指定用户播发等等) |
| | |
| | | /// <param name="cont">消息内容</param> |
| | | public void SendByGroup(string name1, string name2, string cont) |
| | | { |
| | | LogHelper.WriteLogData("登录人员:" + name1 + "发送人:" + name2 + "发送内容:" + cont); |
| | | //Client内为用户的id,是唯一的,SendMessage函数是前端函数,意思是服务器将该消息推送至前端 |
| | | //Clients.Client(_connections[name2]).SendMessage("来自用户:" + name1 + " 内容:" + cont + "" + DateTime.Now.ToString("yyyy/MM/ddhh:mm:ss") + "的消息推送!"); |
| | | Clients.Client(_connections[name2]).SendMessage("来自用户:" + name1 + " 内容:" + cont + "" + DateTime.Now.ToString("yyyy/MM/ddhh:mm:ss") + "的消息推送!"); |
| | |
| | | public void SendByGroups(string name1, DataTable name2, string cont) |
| | | { |
| | | var departmentIDs = name2.AsEnumerable().ToList().Select(x => x.Field<string>("name")).ToList(); |
| | | var FindPublicBaseDic = _connections.Where(d => departmentIDs.Contains(d.Key)).Select(x=>x.Value).ToList(); |
| | | var FindPublicBaseDic = _connections.Where(d => departmentIDs.Contains(d.Key)).Select(x => x.Value).ToList(); |
| | | Clients.Clients(FindPublicBaseDic).SendMessage("来自用户:" + name1 + " 内容:" + cont + "" + DateTime.Now.ToString("yyyy/MM/ddhh:mm:ss") + "的消息推送!"); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 用户上线函数 |
| | | /// 用户上线函数(单用户) |
| | | /// </summary> |
| | | /// <param name="name">用户名</param> |
| | | public void SendLogin(string name) |
| | | { |
| | | LogHelper.WriteLogData("登录人员:" + name); |
| | | if (!userList.Contains(name)) |
| | | { |
| | | userList.Add(name); |
| | |
| | | //新用户上线,服务器广播该用户名 |
| | | Clients.All.loginUser(userList); |
| | | } |
| | | /// <summary> |
| | | /// 用户上线函数(多用户) |
| | | /// </summary> |
| | | /// <param name="code">用户名集合</param> |
| | | public void SendLogins(string code) |
| | | { |
| | | string[] selects = Array.ConvertAll<string, string>(code.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] |
| | | //查找系统用户 |
| | | var sql = @"select usercode as code,username as name |
| | | from TUser |
| | | where is_delete='0' and enable='Y' and usercode in @usercode"; |
| | | var data = DapperHelper.selectlist(sql, new { shopcode = selects.ToArray() }); |
| | | for (int i = 0; i < data.Rows.Count; i++) |
| | | { |
| | | |
| | | if (!userList.Contains(data.Rows[i]["name"].ToString())) |
| | | { |
| | | userList.Add(data.Rows[i]["name"].ToString()); |
| | | //这里便是将用户id和姓名联系起来 |
| | | _connections.Add(data.Rows[i]["name"].ToString(), Context.ConnectionId); |
| | | } |
| | | else |
| | | { |
| | | //每次登陆id会发生变化 |
| | | _connections[data.Rows[i]["name"].ToString()] = Context.ConnectionId; |
| | | } |
| | | } |
| | | //新用户上线,服务器广播该用户名 |
| | | Clients.All.loginUser(userList); |
| | | } |
| | | } |
| | | |
| | | |
| | | public class UserInfo |
| | | { |
| | | public static IList<string> userList = new List<string>(); |