private void PrimitiveReqData(TransferReqDataSchduleInfoManager reqDataSchduleInfoManager, TransferReqDataSchduleInfo currentReqDataSchduleInfo) { var endPoint = reqDataSchduleInfoManager.NotifyMessage.SrcEndPoint; int repeatCount = 0; int mtu, rto; while (repeatCount++ < this._config.MtuRepeatMaxCount) { mtu = TransferParaManager.GetMtu(endPoint); rto = TransferParaManager.GetRto(endPoint); var ep = currentReqDataSchduleInfo.EndPostion - currentReqDataSchduleInfo.Postion; if (mtu > ep) { mtu = (int)ep; } if (mtu <= 0) { break; } var reqMessage = new ResourceRequestMessage(reqDataSchduleInfoManager.NotifyMessage.Header.Rid, currentReqDataSchduleInfo.Postion, mtu); var buffer = reqMessage.GenerateBuffer(); var eventHandleId = reqMessage.ContextId; var eventHandleInfo = AutoEventWaitHandleManager.CreateEventWaitHandle(eventHandleId, reqDataSchduleInfoManager.NotifyMessage.Timeout); try { //_ht[$"{reqMessage.Header.Rid}_{reqMessage.ContextId}"] = _watch.ElapsedMilliseconds; this._net.Send(buffer, endPoint); if (eventHandleInfo.EventWaitHandle.WaitOne(rto)) { currentReqDataSchduleInfo.UpdatePostion(mtu); if (currentReqDataSchduleInfo.IsTransferCompleted()) { //Loger.Warn($"线程[{System.Threading.Thread.CurrentThread.Name}]传输[Rid:{reqDataSchduleInfoManager.NotifyMessage.Header.Rid}],[{currentReqDataSchduleInfo.BeginPostion}-{currentReqDataSchduleInfo.EndPostion}]完成"); } } else { TransferParaManager.RecordMtuAndRto(endPoint, mtu, rto, true); mtu = TransferParaManager.AdjustDownMtu(endPoint); rto = TransferParaManager.AdjustUpRto(endPoint); } } finally { AutoEventWaitHandleManager.RemoveEventWaitHandle(eventHandleId); eventHandleInfo.EventWaitHandle.Dispose(); } } }
private bool GetReqDataSchduleInfo(int currentThreadId, out TransferReqDataSchduleInfoManager reqDataSchduleInfoManager, out TransferReqDataSchduleInfo currentReqDataSchduleInfo) { bool sendHeartFlag = false; TransferResourceManager[] resourceTransferManagers; lock (this._priorityResourceTransferManagerSortedListLock) { resourceTransferManagers = this._priorityResourceTransferManagerSortedList.Values.ToArray(); if (!this._priorityResourceTransferManagerSortedListHeartFlag) { this._priorityResourceTransferManagerSortedListHeartFlag = true; sendHeartFlag = true; } } if (sendHeartFlag) { //发送心跳数据包 this.SendHeartData(resourceTransferManagers); //重置标识 this._priorityResourceTransferManagerSortedListHeartFlag = false; } //查找本次传输项 foreach (var resourceTransferManager in resourceTransferManagers) { reqDataSchduleInfoManager = resourceTransferManager.GetReqDataSchduleInfoManager(); if (reqDataSchduleInfoManager == null) { continue; } if (reqDataSchduleInfoManager.IsTransferCompleted()) { if (reqDataSchduleInfoManager.GetSendTransferCompletedMessageLock()) { currentReqDataSchduleInfo = null; return(true); } else { continue; } } else { currentReqDataSchduleInfo = reqDataSchduleInfoManager.GetReqDataSchduleInfo(currentThreadId); if (currentReqDataSchduleInfo.IsTransferCompleted()) { continue; } else { return(false); } } } reqDataSchduleInfoManager = null; currentReqDataSchduleInfo = null; return(false); }