Signalr2_消息弹窗

工作流程:

  1. 用户每次登陆系统会产生一个“ConnectionId”,这个“ConnectionId”是随机生成的,所以每次用户进入或者刷新都要更新“ConnectionId”。
  2. 新登陆用户在前台执行以下方法(hubDbID和hubUserName都要去赋值,可以用viewData)
     $.connection.hub.start().done(function () {
            //连接用户
            chatHub.server.onConnect(hubDbID, hubUserName);
        });
    
  3. 随后后台执行以下代码
    public void OnConnect(string dbID, string userName)
    
  4. 用户点击xxx按钮或者刷新页面可以激活以下方法

    也可以用viewData,如果对应页面按钮使用Ajax异步调用,可以把把async: false,再去激活XXX按钮执行以下方法

    function registerMessagePopups(toUserIds, hubMessage, groupName) {
        //加入组
        chatHub.server.addRoom(toUserIds, groupName);
        //发消息
        chatHub.server.sendMessagePopups(hubMessage, groupName);
    }
    
  5. 随后代码会执行
    public void AddRoom(string toUserIds, string groupName)
    public void SendMessagePopups(string message, string groupName)
    
  6. 然后前台会执行
     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);
}

转载于:https://my.oschina.net/u/3728193/blog/1574102

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值