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
|
{
|
public class ChatHub : Hub
|
{
|
/// <summary>
|
/// 静态用户列表
|
/// </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提供了组播,广播排除,组播排除,指定用户播发等等)
|
/// 该函数名在前端使用时一定要注意,前端调用该函数时,函数首字母一定要小写
|
/// </summary>
|
/// <param name="name1">发起者</param>
|
/// <param name="name2">消息接收者</param>
|
/// <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();
|
Clients.Clients(FindPublicBaseDic).SendMessage("来自用户:" + name1 + " 内容:" + cont + "" + DateTime.Now.ToString("yyyy/MM/ddhh:mm:ss") + "的消息推送!");
|
}
|
|
/// <summary>
|
/// 安灯呼叫提交时调用
|
/// </summary>
|
/// <param name="username">发起人</param>
|
/// <param name="wkshpcode">车间编码</param>
|
/// <param name="eqpcode">设备编码</param>
|
/// <param name="json"></param>
|
public void SendByGroupList(string username,string wkshpcode, string eqpcode, List<AnDnDate> json)
|
{
|
for (int i = 0; i < json.Count; i++)
|
{
|
string cont = wkshpcode + "对应设备" + eqpcode + json[i].name.ToString();
|
var departmentIDs = json[i].children.ToList().Select(x => x.username).ToList();//获取推送人员
|
var FindPublicBaseDic = _connections.Where(d => departmentIDs.Contains(d.Key)).Select(x => x.Value).ToList(); //匹配已经登录的推送人员唯一码
|
var FindPublicBaseDicName = _connections.Where(d => FindPublicBaseDic.Contains(d.Value)).Select(x => x.Key).ToList(); //根据唯一码匹配已经登录的推送人员名称
|
Clients.Clients(FindPublicBaseDic).SendMessage("来自用户:" + username +" 内容:" + 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);
|
//这里便是将用户id和姓名联系起来
|
_connections.Add(name, Context.ConnectionId);
|
}
|
else
|
{
|
//每次登陆id会发生变化
|
_connections[name] = Context.ConnectionId;
|
}
|
//新用户上线,服务器广播该用户名
|
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>();
|
}
|
}
|