您的位置:首页 > 理论基础 > 计算机网络

基于Tcp通信的聊天程序微风IM(c#开源) -技术分析(三) 客户端下线

2015-03-03 00:00 666 查看
在微风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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐