標籤:
在微風IM中,當某個用戶端下線後,其他用戶端能夠感知到此使用者已經下線,並把其頭像表徵圖變成灰色。
感知串連的掉線,是networkcomms架構內建的功能,伺服器通過心跳檢測得知某串連掉線,會從networkcomms內部維護的串連列表中刪除此串連,並觸發相應的委託。
我們要處理某串連掉線,只需要註冊 NetworkComms.AppendGlobalConnectionCloseHandler 方法即可
伺服器端代碼如下:
//如果某用戶端離線,觸發此方法 NetworkComms.AppendGlobalConnectionCloseHandler(HandleConnectionClosed);
用戶端某使用者離線的處理方法
//處理某可用戶端離線情況 private void HandleConnectionClosed(Connection connection) { try { var tempUserID = ""; lock (syncLocker) { //在使用者字典中找到網路連接相對應的使用者ID foreach (var kv in userManager) { //如果要關閉的網路連接,與某個使用者的網路連接相同,則找出此使用者 if (kv.Value == connection.ConnectionInfo.NetworkIdentifier) { tempUserID = kv.Key; break; } } if (tempUserID != "") { //如果找到的使用者ID不為空白,則從使用者字典中刪除此項 if (userManager.ContainsKey(tempUserID)) { //串連關閉時,從使用者管理員中刪除該使用者 userManager.Remove(tempUserID); } } } //發送通知給其他用戶端,告知其某個使用者下線 if (tempUserID != "") { UserStateNotify(tempUserID, false); } //應該發送一個訊息給所有線上的其他使用者 } catch (Exception ex) { LogTools.LogException(ex, "NetworkComms_ConnectionClosed"); } }
www.networkcomms.cn
www.cnblogs.com/networkcomms
基於Tcp通訊的聊天程式微風IM(c#開源) -技術分析(三) 用戶端下線