public void AddChunksAvaibility(byte[] chunkStatus) { if (m_Avaibility == null) { m_Avaibility = new ushort[CHash.GetChunksCount(m_Element.File.FileSize)]; } if ((chunkStatus == null) || (chunkStatus.Length != m_Avaibility.Length)) { return; } for (int i = 0; i != chunkStatus.Length; i++) { if ((Protocol.ChunkState)chunkStatus[i] == Protocol.ChunkState.Complete) { m_Avaibility[i]++; } } }
public void UpdateChunksAvaibility() { byte[] DownFileChunks; if (m_Avaibility == null) { m_Avaibility = new ushort[CHash.GetChunksCount(m_Element.File.FileSize)]; } ushort[] avaibilitytmp = new ushort[m_Avaibility.Length]; if (m_Element == null) { return; } int nChunks = m_Element.File.NumChunks; for (int i = 0; i != avaibilitytmp.Length; i++) { avaibilitytmp[i] = 0; } lock (m_ArrayList.SyncRoot) { foreach (CClient source in m_ArrayList) { if (m_Element == null) { return; } DownFileChunks = source.DownFileChunks; if (DownFileChunks != null) { for (int i = 0; i != nChunks; i++) { if ((Protocol.ChunkState)DownFileChunks[i] == Protocol.ChunkState.Complete) { avaibilitytmp[i]++; } } } } } m_Avaibility = avaibilitytmp; }
public void RemoveChunksAvaibility(byte[] chunkStatus) { if (m_Element == null) { return; //possible when stopping the file } if (m_Avaibility == null) { m_Avaibility = new ushort[CHash.GetChunksCount(m_Element.File.FileSize)]; } if ((chunkStatus == null) || (chunkStatus.Length != m_Avaibility.Length)) { return; } for (int i = 0; i != chunkStatus.Length; i++) { if (((Protocol.ChunkState)chunkStatus[i] == Protocol.ChunkState.Complete) && (m_Avaibility[i] > 0)) { m_Avaibility[i]--; } } }