本文整理汇总了C#中Source.Report78Sent方法的典型用法代码示例。如果您正苦于以下问题:C# Source.Report78Sent方法的具体用法?C# Source.Report78Sent怎么用?C# Source.Report78Sent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Source
的用法示例。
在下文中一共展示了Source.Report78Sent方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SetSectorData
public bool SetSectorData(long sector, byte[] data, byte[] hashCodeResult, Source source)
{
if (sector < 0)
throw new ArgumentOutOfRangeException("sector");
if (data == null)
throw new ArgumentNullException("data");
if (hashCodeResult == null)
throw new ArgumentNullException("hashCodeResult");
if (source == null)
throw new ArgumentNullException("source");
try
{
m_Sources.Lock();
// 2007-06-14 T.Norad
// set current time as last reception in this download
m_LastReception = DateTime.Now;
if ((m_SectorsMap[sector / 8] & (1 << (int)(sector % 8))) == 0)
{
// Sicherer Hash-Vergleich ANFANG
byte[] hash = ComputeHashes.SHA512Compute(data);
byte[] hashCode = new byte[64];
for (int n = 0; n < 64; n++)
hashCode[n] = (byte)(hash[n] ^ m_FileHash[n]);
hashCode = ComputeHashes.SHA512Compute(hashCode);
hashCode = ComputeHashes.SHA512Compute(hashCode);
hashCode = ComputeHashes.SHA512Compute(hashCode);
hashCode = ComputeHashes.SHA512Compute(hashCode);
if (!Core.CompareByteArray(hashCode, hashCodeResult))
{
m_Logger.Log("A manipulated sector was received!");
return false;
}
// Sicherer Hash-Vergleich ENDE
// Sicherer Sektor-Vergleich ANFANG
if (sector != source.LastRequestedSector || m_IsHashing)
{
m_Logger.Log("An unrequested command was received!");
return false;
}
// Sicherer Sektor-Vergleich ENDE
// Filestream.Position setzen
m_FileStream.Position = sector * 32768;
int count;
if (m_FileStream.Position + 32768 <= m_FileSize)
count = 32768;
else
count = (int)(m_FileSize - m_FileStream.Position);
m_FileStream.Write(data, 0, count);
m_FileStream.Flush();
m_ReceivedSectors++;
//Update SectorsMap
m_SectorsMap[(int)(sector / 8)] |= (byte)(1 << (int)(sector % 8));
m_Downloaded += 32768;
source.Report79Received(sector);
}
else
return false;
if (m_ReceivedSectors < m_Sectors)
{
RList<long> sectorsToRequest = new RList<long>(m_SectorsMap.Length);
long sectorToRequest = -1;
if (!source.IsComplete)
{
bool sectorCanBeRequested = false;
for (int t = 0; t < 10 && !sectorCanBeRequested; t++)
{
for (long i = 0; i < m_SectorsMap.Length; i++)
if ((~m_SectorsMap[i] & source.SectorsMap[i]) != 0)
sectorsToRequest.Add(i);
if (sectorsToRequest.Count > 0)
{
long d = sectorsToRequest[Randomizer.GenerateNumber(0, sectorsToRequest.Count)];
byte e = m_SectorsMap[d];
byte f = source.SectorsMap[d];
int g;
for (g = 0; g < 8; g++)
if (((~e & f) & (1 << g)) != 0)
break;
sectorToRequest = d * 8 + g;
sectorCanBeRequested = true;
foreach (Source activeSource in m_Sources.Values)
if (activeSource.State == SourceState.Active && activeSource.LastRequestedSector == sectorToRequest)
{
sectorCanBeRequested = false;
break;
}
}
else
sectorCanBeRequested = false;
}
if (sectorToRequest != -1)
{
source.Report78Sent(sectorToRequest);
Core.SendCommand78(m_DownloadPeerID, source.PeerID, m_DownloadID, sectorToRequest);
//.........这里部分代码省略.........