Пример #1
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);
                        }
                    }
                }
            }
        }