工作流程:
- 用户每次登陆系统会产生一个“ConnectionId”,这个“ConnectionId”是随机生成的,所以每次用户进入或者刷新都要更新“ConnectionId”。
- 新登陆用户在前台执行以下方法(hubDbID和hubUserName都要去赋值,可以用viewData)
$.connection.hub.start().done(function () { //连接用户 chatHub.server.onConnect(hubDbID, hubUserName); });
- 随后后台执行以下代码
public void OnConnect(string dbID, string userName)
- 用户点击xxx按钮或者刷新页面可以激活以下方法
也可以用viewData,如果对应页面按钮使用Ajax异步调用,可以把把async: false,再去激活XXX按钮执行以下方法
function registerMessagePopups(toUserIds, hubMessage, groupName) { //加入组 chatHub.server.addRoom(toUserIds, groupName); //发消息 chatHub.server.sendMessagePopups(hubMessage, groupName); }
- 随后代码会执行
public void AddRoom(string toUserIds, string groupName) public void SendMessagePopups(string message, string groupName)
- 然后前台会执行
chatHub.client.sendMessagePopupsByGroup = function (hubMessage) { alert("entesendMessagePopupsByGroup," + hubMessage); }
源代码
[HubName("msgHubMini")]
public class MsgHub : Hub
{
static List<HubUser> hubUsers = new List<HubUser>();
public void OnConnect(string dbID, string userName)
{
var connectId = Context.ConnectionId;
//当前用户是否在
HubUser tempUser = hubUsers.Where(a => a.DbID == dbID).FirstOrDefault();
//每次刷新产生新ID代替
if (tempUser != null)
{
// 更新用户connectId
tempUser.ConnectionID = connectId;
}
else
{
//新增
hubUsers.Add(new HubUser { ConnectionID = connectId, DbID = dbID, UserName = userName });
}
}
public void AddRoom(string toUserIds, string groupName)
{
if (!string.IsNullOrEmpty(toUserIds) && !string.IsNullOrEmpty(groupName))
{
//每次新建立组
IList<string> tempUserIDs = new List<string>();
for (int i = 0; i < hubUsers.Count; i++)
{
if (toUserIds.Contains(hubUsers[i].DbID))
{
tempUserIDs.Add(hubUsers[i].ConnectionID);
}
}
for (int j = 0; j < tempUserIDs.Count; j++)
{
Groups.Add(tempUserIDs[j], groupName);
}
}
}
public void SendMessagePopups(string message, string groupName)
{
if (!string.IsNullOrEmpty(groupName) && !string.IsNullOrEmpty(message))
{
//Clients.All.sendMessagePopupsByGroup(message);
Clients.OthersInGroup(groupName).sendMessagePopupsByGroup(message);
}
}
}
var chatHub = $.connection.msgHubMini;
$(function () {
$.connection.hub.start().done(function () {
//连接用户
chatHub.server.onConnect(hubDbID, hubUserName);
});
chatHub.client.sendMessagePopupsByGroup = function (hubMessage) {
alert("entesendMessagePopupsByGroup," + hubMessage);
}
});
function registerMessagePopups(toUserIds, hubMessage, groupName) {
//alert(toUserIds + ":::" + hubMessage + ":::" + groupName)
//加入组
chatHub.server.addRoom(toUserIds, groupName);
//发消息
chatHub.server.sendMessagePopups(hubMessage, groupName);
}