📄 downloadsharecontent.cs
字号:
using (TransportingFile file = new TransportingFile(base.FilePath, base.FileSize, base.FileName, base.LastTimeCompleteSize, base.First100MMd5, remotePeer))
{
while (end < (base.FileSize - 1))
{
HttpWebRequest request;
base.WaitEvent.WaitOne();
base.WaitEvent.Set();
if (base.IsCancel)
{
return;
}
this.CalculatePosition(ref start, ref end);
num3 = 0;
base._tryInterval = 500;
Label_00FF:
request = ConnectionFactory.CreateHttpWebRequest(text2 + Environment.TickCount, base.Owner, false, true);
request.ReadWriteTimeout = 0x186a0;
request.AddRange(Convert.ToInt32(start), Convert.ToInt32(end));
request.Headers.Add("Pragma", base.SessionId);
HttpWebResponse response = null;
try
{
response = request.GetResponse() as HttpWebResponse;
statusCode = (int) response.StatusCode;
time2 = DateTime.Now;
}
catch (WebException exception)
{
HttpWebResponse response2 = exception.Response as HttpWebResponse;
int num6 = (response2 == null) ? ((int) ((HttpStatusCode) 520)) : ((int) response2.StatusCode);
if (num6 <= 0x12b)
{
goto Label_03A9;
}
int num11 = num6;
if (num11 <= 0x194)
{
switch (num11)
{
case 0x191:
case 0x194:
goto Label_01EC;
}
}
else if ((num11 == 0x1a0) || (num11 == 500))
{
}
goto Label_02E7;
Label_01EC:
this.CancelShareContent();
switch (num6)
{
case 0x191:
text = string.Format("credential:{0},filesize:{1}", base.Owner.SsiCredential, base.FileSize);
break;
case 0x194:
text = string.Format("credential:{0},filesize:{1},start:{2},preHttpStatusCode{3},preBlockDateTime:{4}", new object[] { base.Owner.SsiCredential, base.FileSize, start, statusCode, time2.ToString("hh:mm ss") });
break;
}
ClientLogger.WriteGeneral("DownLoad Failed failed.." + text, "Downlad " + base.DownLoadUrl + " TO:" + base.FilePath + " Failed " + exception.ToString());
text = string.Empty;
return;
Label_02E7:
num3++;
if (num4 > (base.Owner.Configuration.SystemSetting.FileShareSetting.RelayMaxTryTime * 0x3e8))
{
ClientLogger.WriteGeneral("Downlad " + base.FilePath + " Failed" + exception.ToString() + ",重试次数:" + num3.ToString());
base.AsyncSendCancelInfo();
this.DeleteExistFile();
base.RaiseShareContentFailed("");
return;
}
int millisecondsTimeout = base._tryInterval * num3;
base._tryInterval = millisecondsTimeout;
num4 += millisecondsTimeout;
Thread.Sleep(millisecondsTimeout);
statusCode = num6;
time2 = DateTime.Now;
goto Label_00FF;
}
Label_03A9:
if ((base.LastTimeCompleteSize != 0) && (start == 0))
{
start = end = base.LastTimeCompleteSize;
}
else
{
using (Stream stream = response.GetResponseStream())
{
if (base.IsCancel)
{
return;
}
byte[] buffer = new byte[(end - start) + 1];
long num8 = start;
num3 = 0;
try
{
while (start <= end)
{
int length = stream.Read(buffer, 0, buffer.Length);
file.WriteToFile(start, buffer, length);
start += length;
}
}
catch (WebException exception2)
{
num3++;
start = num8;
if (num3 > 3)
{
ClientLogger.WriteGeneral("重试了3次,StreamRead都出现了WebExption");
throw exception2;
}
goto Label_00FF;
}
catch (Exception exception3)
{
ClientLogger.WriteGeneral("StreamRead 出现未知异常");
throw exception3;
}
base.RaiseShareContentProgress(new ShareContentProcessEventArgs(((float) end) / ((float) base.FileSize)));
}
num3 = 0;
num4 = 0;
float num10 = ((float) DateTime.Now.Subtract(now).TotalMilliseconds) / 1000f;
if (num10 != 0f)
{
if (end >= base.LastTimeCompleteSize)
{
base.Rate = (end - base.LastTimeCompleteSize) / num10;
}
else
{
base.Rate = ((float) end) / num10;
}
}
base.FinishPercent = ((float) end) / ((float) base.FileSize);
if (response != null)
{
response.Close();
}
}
}
}
base.Complete = true;
base.RaiseShareContentComplete();
}
catch (Exception exception4)
{
if (!base.IsCancel)
{
ClientLogger.WriteException("Downlad " + base.FilePath + " Failed ", exception4);
base.RaiseShareContentFailed("");
}
}
}
protected override void OnBlockTransported(BlockTranEventArgs e)
{
try
{
base.Owner.TransportManager.UpdateCompletedSize(base.TransportingFile.Id, e.Current);
}
catch
{
}
finally
{
base.OnBlockTransported(e);
}
}
protected override void OnTransportFailed()
{
this.CloseP2PTransport();
ClientLogger.WriteGeneral("P2P下载文件失败,等待发送方转Relay " + base.FileName);
GlobalTimer.Register(new EventHandler(this.WaitP2pToRelayEventHandler), 0x4b0);
}
private void WaitP2pToRelayEventHandler(object sender, EventArgs e)
{
try
{
GlobalTimer.Unregister(new EventHandler(this.WaitP2pToRelayEventHandler));
if (base.Transmittype != ShareContentTransmitType.Relay)
{
this.CancelShareContent();
}
}
catch (Exception exception)
{
ClientLogger.WriteGeneral("", exception.ToString());
}
}
public Contact From
{
get
{
return this._from;
}
internal set
{
this._from = value;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -