星空网 > 软件开发 > ASP.net

NetworkComms v3 c#通信框架 处理客户端离线

原文:http://www.networkcomms.cn/Article/ViewArticle.aspx?ItemID=27833&PageID=1224

《1》处理客户端离线

在使用networkComms v3进行网络通信时,客户端离线通常我们不需要做额外的处理。

在服务器端 NetworkComms静态类用于掌控全局

所有与服务器的连接,都保存在

allConnectionsByIdentifier allConnectionsByEndPoint

这2个字典中

当有新客户单加入后,连接创建完成后,通信框架会自动把连接加入到上面2个字典中

当有客户端离线后,服务器端通过心跳检测,会探测到某客户端已经离线,之后通信框架调用 NetworkComms.RemoveConnectionReference 静态方法,把离线客户端相关的连接从上面的字典中删除即可。

客户端离线的情况,通讯框架已经帮我们处理好了,不用我们额外做工作。

《2》处理IM系统中的客户端离线

 在IM系统中,我们通常在服务器端加入用户管理器,当某用户上线时,要通知其他用户。当某客户端掉线时,也要通知其他用户。

这种情况下,我们就需要在服务器做另外的工作,用于通知其他用户某客户端用户已经离线。

方法很简单:

//注册客户端离线事件

 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");      }    }

 

《3》处理文件传输系统中的客户端离线

如果客户端正在与服务器传输文件的时候网路断开,我们需要告知服务器删除与此用户相关的缓存文件(传输了一半的文件)。

 1、注册一个客户端离线的出来方法

 NetworkComms.AppendGlobalConnectionCloseHandler(HandleConnectionClosed);

 2、具体的处理方法

 private void HandleConnectionClosed(Connection connection)    {      try      {        //通知文件发送器,客户端已经下线        this.fileManager.RemoveFileByNetworkID(connection.ConnectionInfo.NetworkIdentifier.ToString());        //通知文件接收器,客户端已经下线        this.recvManager.RemoveFileByNetworkID(connection.ConnectionInfo.NetworkIdentifier.ToString());         //遍历查看用户ID是否存在        var tempUserID = "";        //删除收文字典的相关信息         lock (syncLocker)        {          //Remove any associated data from the caches          incomingDataCache.Remove(connection.ConnectionInfo);          incomingDataInfoCache.Remove(connection.ConnectionInfo);           foreach (var kv in userManager)          {            //如果要关闭的网络连接,与某个用户的网络连接相同,则找出此用户            if (kv.Value == connection.ConnectionInfo.NetworkIdentifier)            {              tempUserID = kv.Key;              break;            }          }           if (tempUserID != "")          {             if (userManager.ContainsKey(tempUserID))            {              //连接关闭时,从用户管理器中删除该用户              userManager.Remove(tempUserID);            }          }        }       }      catch (Exception ex)      {        LogTools.LogException(ex, "NetworkComms_ConnectionClosed");      }    }

  




原标题:NetworkComms v3 c#通信框架 处理客户端离线

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

广告页面改版,竞价破新高,卖家如何求生存:https://www.ikjzd.com/articles/4286
澳大利亚或将征收5美元包裹新税:https://www.ikjzd.com/articles/429
货运百科·什么是吃泡、分泡:https://www.ikjzd.com/articles/4292
亚马逊广告4个正确的操作步骤:https://www.ikjzd.com/articles/4296
如何进行亚马逊库存清理?:https://www.ikjzd.com/articles/43
亚马逊将零售战场转移到实体店!:https://www.ikjzd.com/articles/430
连麦专家:2024年到底如何做小红书? :https://www.kjdsnews.com/a/1836446.html
9点聊电商:小米再向前:小米SU7正式发布、引领汽车“智能化”下半场 “人车家全生态 :https://www.kjdsnews.com/a/1836447.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流