国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

NetworkComms v3 c#通信框架 處理客戶端離線

2019-11-17 02:28:43
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘洛县| 邢台县| 桐梓县| 北辰区| 上蔡县| 仲巴县| 类乌齐县| 甘南县| 九江市| 中牟县| 江北区| 当雄县| 剑川县| 辉县市| 资溪县| 吉安县| 孝义市| 鄢陵县| 宜丰县| 长顺县| 海伦市| 太康县| 久治县| 上高县| 白山市| 新安县| 晋州市| 枣庄市| 石泉县| 武鸣县| 镇赉县| 石柱| 林西县| 顺义区| 容城县| 泗洪县| 梧州市| 古田县| 仪陇县| 乌审旗| 乐都县|