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