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);
}
相關文章
相關標籤/搜索