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