public void GetBlock(byte[] buffer, int pieceIndex, int offset, int length, BlockReadDelegate callback, object state) { try { var parts = GetParts(pieceIndex, offset, length, false); var block = new Block(buffer, pieceIndex, offset, length); var data = _readCache.Get().Init(block, callback, length, state); if (parts.Count() > 1) { Console.WriteLine(pieceIndex + " is split between " + parts.Count() + " files."); } foreach (var part in parts) { if (part.FileStream != null) { DiskIo.QueueRead(part.FileStream, buffer, part.DataOffset, part.FileOffset, part.Length, EndGetBlock, data); } else { OnRaisedException(new TorrentException("Stream is null.")); callback(false, null, state); return; } } } catch (Exception e) { OnRaisedException(new TorrentException(e.Message, e)); callback(false, null, state); } }
public BlockReadState Init(Block block, BlockReadDelegate callback, int remaining, object state) { Block = block; Callback = callback; State = state; Remaining = remaining; return(this); }
public void GetBlock(byte[] buffer, int pieceIndex, int offset, int length, BlockReadDelegate callback, object state) { try { IEnumerable<BlockPartInfo> parts = GetParts(pieceIndex, offset, length, false); var block = new Block(buffer, pieceIndex, offset, length); BlockReadState data = readCache.Get().Init(block, callback, length, state); if(parts.Count() > 1) Trace.WriteLine(pieceIndex + " is split between " + parts.Count() + " files."); foreach(BlockPartInfo part in parts) { if (part.FileStream != null) DiskIO.QueueRead(part.FileStream, buffer, part.DataOffset, part.FileOffset, part.Length, EndGetBlock, data); else { OnRaisedException(new TorrentException("Stream is null.")); callback(false, null, state); return; } } } catch(Exception e) { OnRaisedException(new TorrentException(e.Message, e)); callback(false, null, state); } }
public BlockReadState Init(Block block, BlockReadDelegate callback, int remaining, object state) { Block = block; Callback = callback; State = state; Remaining = remaining; return this; }