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
{
///
/// 静态用户列表
///
private IList userList = UserInfo.userList;
///
/// 用户的connectionID与用户名对照表
///
private readonly static Dictionary _connections = new Dictionary();
///
/// 发送函数,前端触发该函数给服务器,服务器在将消息发送给前端,(Clients.All.(函数名)是全体广播,另外Clients提供了组播,广播排除,组播排除,指定用户播发等等)
/// 该函数名在前端使用时一定要注意,前端调用该函数时,函数首字母一定要小写
///
/// 发起者
/// 消息接收者
/// 消息内容
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("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") + "的消息推送!");
}
///
/// 安灯呼叫提交时调用
///
/// 发起人
/// 车间编码
/// 设备编码
///
public void SendByGroupList(string username,string wkshpcode, string eqpcode, List 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") + "的消息通知!");
}
}
///
/// 用户上线函数(单用户)
///
/// 用户名
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);
}
///
/// 用户上线函数(多用户)
///
/// 用户名集合
public void SendLogins(string code)
{
string[] selects = Array.ConvertAll(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 userList = new List();
}
}