Пример #1
0
 /// <summary>
 /// 清理
 /// </summary>
 public void Clear()
 {
     string[] keys = new string[dicPool.Count];
     dicPool.Keys.CopyTo(keys, 0);
     Parallel.ForEach(keys, key => {
         RecviceData recviceData = null;
         if (dicPool.TryGetValue(key, out recviceData))
         {
             //移除
             if (dicPool.TryRemove(key, out recviceData))
             {
                 recviceData.Clear();
                 recviceData.OnDataReceived -= Data_OnDataReceived;
                 recviceData.OnLossData     -= Data_OnLossData;
             }
         }
     }
                      );
     keys = null;
     dicPool.Clear();
     dicRecvice.Clear();
 }
Пример #2
0
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="token"></param>
        public void Add(AsyncUdpUserToken token)
        {
            IPEndPoint endPoint = token.Remote as IPEndPoint;

            if (null != endPoint)
            {
                string key = endPoint.Address.ToString() + endPoint.Port;
                dicRecvice[key] = DateTime.Now;
                RecviceData    data    = null;
                UDPDataPackage package = new UDPDataPackage();
                package.UnPack(token.Data, token.Offset, token.Length);
                if (dicPool.TryGetValue(key, out data))
                {
                    data.Add(package);
                }
                else
                {
                    lock (lock_obj)
                    {
                        //阻塞创建
                        if (!dicPool.TryGetValue(key, out data))
                        {
                            data                 = new RecviceData();
                            dicPool[key]         = data;
                            data.remote          = endPoint;
                            data.OnDataReceived += Data_OnDataReceived;
                            data.OnLossData     += Data_OnLossData;
                            data.Add(package);
                        }
                        else
                        {
                            data.Add(package);
                        }
                    }
                }
            }
        }
Пример #3
0
 /// <summary>
 /// 验证无效的信息
 /// </summary>
 public void Validate()
 {
     string[] keys = new string[dicRecvice.Count];
     dicRecvice.Keys.CopyTo(keys, 0);
     Parallel.ForEach(keys, key => {
         DateTime dateTime;
         RecviceData recviceData = null;
         if (dicRecvice.TryGetValue(key, out dateTime))
         {
             if ((DateTime.Now - dateTime).TotalMinutes > maxEndPointTime)
             {
                 //移除
                 if (dicPool.TryRemove(key, out recviceData))
                 {
                     recviceData.Clear();
                     recviceData.OnDataReceived -= Data_OnDataReceived;
                     recviceData.OnLossData     -= Data_OnLossData;
                 }
                 dicRecvice.TryRemove(key, out dateTime);
             }
         }
     }
                      );
 }