Пример #1
0
        internal void Send()
        {
            var sendDataNotifyMessage = new SendDataNotifyMessage(this._resoucesInfo);

            byte[] buffer = sendDataNotifyMessage.GenerateBuffer();
            var    beginSendDataTimestamp = this._resoucesInfo.LastAccessTimestamp;

            this._net.Send(buffer, this._resoucesInfo.Policy.RemoteEP);

            int repeatCount = 0;

            while (this._net.Status)
            {
                repeatCount++;
                try
                {
                    if (this._transferCompletedAckEventWaitHandle.WaitOne(this._resoucesInfo.Policy.MillisecondsTimeout))
                    {
                        break;
                    }
                    else
                    {
                        //超时一次请求数据或传输完成通知都未收到过,重新发送数据
                        if (beginSendDataTimestamp == this._resoucesInfo.LastAccessTimestamp)
                        {
                            this._net.Send(buffer, this._resoucesInfo.Policy.RemoteEP);
                        }
                    }
                }
                catch (ObjectDisposedException)
                {
                    throw new TimeoutException("发送超时");
                }

                if (!this._net.Status)
                {
                    //发送取消,已停止
                    break;
                }

                if (this._resoucesInfo.IsTimeout() && repeatCount >= this._resoucesInfo.Policy.RepeatCount)
                {
                    throw new TimeoutException("发送超时");
                }
            }
        }