在微風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