首页 > 学院 > 开发设计 > 正文

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

2019-11-17 02:33:38
字体:
来源:转载
供稿:网友

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

NetworkComms网络通信框架序言

在微风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.VEVb.com/networkcomms


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表