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