private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (this._firstAdd)
                {
                    MemoryCacheEx.Add(1, TimeEx.GetTimestamp());
                    this._firstAdd = false;
                }

                MemoryCacheEx.Add(2, TimeEx.GetTimestamp(), this._expiration, this.CacheItemRemovedCallback);
                MemoryCacheEx.Add(3, TimeEx.GetTimestamp(), TimeSpan.FromMilliseconds(this._expiration), this.CacheItemRemovedCallback);
                MemoryCacheEx.Add(4, TimeEx.GetTimestamp(), (t) => { return((DateTimeOffset.Now - t.AddTime).TotalMilliseconds > this._expiration * 2); }, this.CacheItemRemovedCallback);

                CacheItem cacheItem = new CacheItem(5, TimeEx.GetTimestamp());
                cacheItem.AbsoluteExpiration = DateTimeOffset.Now.AddMilliseconds(this._expiration);
                //cacheItem.SlidingExpiration = slidingExpiration;
                //cacheItem.CustomerExpiration = customerExpiration;
                cacheItem.RemovedCallback = this.CacheItemRemovedCallback;
                //cacheItem.InnerRemovedCallback = true;
                MemoryCacheEx.Add(cacheItem);
            }
            catch (Exception ex)
            {
                Loger.Error(ex);
            }
        }
예제 #2
0
 public void Update(int mtu, int rto, bool isTimeout)
 {
     Timestamp      = TimeEx.GetTimestamp();
     HasValue       = true;
     this.IsTimeout = isTimeout;
     Mtu            = mtu;
     Rto            = rto;
 }
예제 #3
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="rid"></param>
        /// <param name="position"></param>
        /// <param name="size"></param>
        public ResourceRequestMessage(Int32 rid, Int64 position, Int32 size)
            : base(new CommonHeader(TransferCommands.ResourceRequest, TimeEx.GetTimestamp(), rid))
        {
            this.ContextId = GUIDEx.GetGUIDHashCode();

            this.Position = position;
            this.Size     = size;
        }
예제 #4
0
        private void SetValue(DotnetWinFormApp.DB.IStu stu, long id = -1)
        {
            if (id == -1)
            {
                id = TimeEx.GetTimestamp();
            }

            stu.ID   = id;
            stu.Age  = _rnd.Next(0, 120);
            stu.Name = "yf" + id;
            //stu.Bir = new DateTime(1988, 11, 30, 2, 22, 45);
            stu.Bir = DateTime.Now;
        }
예제 #5
0
        internal void ProResourceResponse(ResourceResponseMessage message, byte[] revData)
        {
            try
            {
                if (message.Size == ResourceResponseMessage.RESOURCE_NOT_EXIST)
                {
                    //资源不存在,发送超时,将接收数据移除
                    Loger.Warn("请求资源不存在");
                }
                else
                {
                    int mtu = message.Size + ResourceResponseMessage.HEAD_SIZE;
                    int rto = (int)(TimeEx.GetTimestamp() - message.Header.Timestamp);
                    TransferParaManager.RecordMtuAndRto(message.SrcEndPoint, mtu, rto, false);

                    ReceiveDataItem receiveDataItem;
                    if (this._revItemDic.TryGetValue(message.Header.Rid, out receiveDataItem))
                    {
                        //发送收到响应数据通知
                        EventWaitHandle eventHandle = AutoEventWaitHandleManager.GetEventWaitHandle(message.ContextId);
                        if (eventHandle != null)
                        {
                            try
                            {
                                receiveDataItem.UpdateLastAccessTimestamp();
                                if (message.Size == ResourceResponseMessage.RESOURCE_NOT_EXIST)
                                {
                                    return;
                                }

                                receiveDataItem.Write(message.Position, revData, ResourceResponseMessage.HEAD_SIZE, message.Size);
                                eventHandle.Set();
                            }
                            catch (ObjectDisposedException)
                            { }
                        }
                    }
                    else
                    {
                        //var tt = TimeEx.GetTimestamp();
                        //Loger.Warn($"未知的资源ID:{message.Header.Rid},[ContextId:{message.ContextId}],[请求响应时长:{tt - message.Header.Timestamp}],[请求数据Position:{message.Position},Size:{message.Size}],[线程:{Thread.CurrentThread.Name}]");
                    }
                }
            }
            catch (Exception ex)
            {
                Loger.Error(ex, "ProResourceResponse发生异常");
            }
        }
        private void btnSet_Click(object sender, RoutedEventArgs e)
        {
            MemoryCacheEx.Set(1, TimeEx.GetTimestamp());
            MemoryCacheEx.Set(2, TimeEx.GetTimestamp(), this._expiration, this.CacheItemRemovedCallback);
            MemoryCacheEx.Set(3, TimeEx.GetTimestamp(), TimeSpan.FromMilliseconds(this._expiration), this.CacheItemRemovedCallback);
            MemoryCacheEx.Set(4, TimeEx.GetTimestamp(), (t) => { return((DateTimeOffset.Now - t.AddTime).TotalMilliseconds > this._expiration * 2); }, this.CacheItemRemovedCallback);

            CacheItem cacheItem = new CacheItem(5, TimeEx.GetTimestamp());

            cacheItem.AbsoluteExpiration = DateTimeOffset.Now.AddMilliseconds(this._expiration);
            //cacheItem.SlidingExpiration = slidingExpiration;
            //cacheItem.CustomerExpiration = customerExpiration;
            cacheItem.RemovedCallback = this.CacheItemRemovedCallback;
            //cacheItem.InnerRemovedCallback = true;
            MemoryCacheEx.Set(cacheItem);
        }
예제 #7
0
        private void SendTransferCompletedMessage(SendDataNotifyMessage notifyMessage)
        {
            var transferCompletedMessage = new TransferCompletedMessage(notifyMessage);
            var buffer          = transferCompletedMessage.GenerateBuffer();
            var id              = CacheKeyGenerator.GenerateWaitTransferCompletedAckMessageEventWaitHandleId(notifyMessage.Header.Rid);
            var eventHandleInfo = AutoEventWaitHandleManager.CreateEventWaitHandle(id);

            try
            {
                long beginTs = TimeEx.GetTimestamp();
                long endTs   = beginTs;

                while (!notifyMessage.IsTimeout(beginTs, endTs))
                {
                    try
                    {
                        int rto = TransferParaManager.GetRto(notifyMessage.SrcEndPoint);
                        this._net.Send(buffer, notifyMessage.SrcEndPoint);
                        if (eventHandleInfo.EventWaitHandle.WaitOne(rto))
                        {
                            break;
                        }
                        else
                        {
                            TransferParaManager.AdjustUpRto(notifyMessage.SrcEndPoint);
                        }
                    }
                    catch (SendDataException)
                    {
                        break;
                    }
                    catch (Exception ex)
                    {
                        Loger.Error(ex, "发送传输完成消息异常");
                    }

                    endTs = TimeEx.GetTimestamp();
                }
            }
            finally
            {
                AutoEventWaitHandleManager.RemoveEventWaitHandle(id);
                eventHandleInfo.EventWaitHandle.Dispose();
            }

            //注:如果一直都没有收到确认消息,则超时线程处理
        }
예제 #8
0
        /// <summary>
        /// 初始化文件流
        /// </summary>
        /// <param name="dir"></param>
        /// <param name="fileName"></param>
        protected void InitFileStream(string dir, string fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                fileName = $"{TimeEx.GetTimestamp()}.dat";
            }

            string filePath = Path.Combine(dir, fileName);

            this._filePath = filePath;
            this._flag     = false;
            for (int i = 0; i < this._streamArr.Length; i++)
            {
                this._streamArr[i] = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
                this._streams.Add(this._streamArr[i]);
            }
        }
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="resoucesInfo"></param>
        public SendDataNotifyMessage(ResoucesInfo resoucesInfo)
            : base(new CommonHeader(TransferCommands.SendNotify, TimeEx.GetTimestamp(), resoucesInfo.Rid))
        {
            this.Priority = resoucesInfo.Policy.Priority;
            byte sendMode;

            if (resoucesInfo.Length <= TransferConstant.MESSAGE_MAX_SIZE)
            {
                var data = new byte[resoucesInfo.Length];
                Array.Copy(resoucesInfo.Data, resoucesInfo.Postion, data, 0, data.Length);
                this.Data = data;
                sendMode  = ResourceTypeConstant.Message;
            }
            else
            {
                switch (resoucesInfo.ResoucesType)
                {
                case TransferDataType.Data:
                    sendMode = ResourceTypeConstant.ResourceData;
                    break;

                case TransferDataType.Stream:
                    sendMode = ResourceTypeConstant.ResourceStream;
                    break;

                case TransferDataType.File:
                    sendMode      = ResourceTypeConstant.ResourceFile;
                    this.FileName = Path.GetFileName(resoucesInfo.FilePath);
                    break;

                default:
                    throw new NotImplementedException($"未实现的资源类型:{resoucesInfo.ResoucesType.ToString()}");
                }
            }

            this.ResourceType = sendMode;
            this.Timeout      = resoucesInfo.Policy.MillisecondsTimeout;
            this.Size         = resoucesInfo.Length;
        }
예제 #10
0
 public ConfigChildItem2(bool flag)
 {
     this.ID  = TimeEx.GetTimestamp();
     this.Bir = DateTime.Now;
 }
예제 #11
0
 /// <summary>
 /// 创建
 /// </summary>
 /// <param name="sendDataNotifyMessage"></param>
 public TransferCompletedMessage(SendDataNotifyMessage sendDataNotifyMessage)
     : base(new CommonHeader(TransferCommands.TransferCompleted, TimeEx.GetTimestamp(), sendDataNotifyMessage.Header.Rid))
 {
 }