コード例 #1
0
ファイル: BlockManager.cs プロジェクト: fm107/WebTorrent
        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);
            }
        }
コード例 #2
0
ファイル: BlockManager.cs プロジェクト: fm107/WebTorrent
 public BlockReadState Init(Block block, BlockReadDelegate callback, int remaining, object state)
 {
     Block     = block;
     Callback  = callback;
     State     = state;
     Remaining = remaining;
     return(this);
 }
コード例 #3
0
ファイル: BlockManager.cs プロジェクト: NewFuture/BitTorrent
        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);
            }
        }
コード例 #4
0
ファイル: BlockManager.cs プロジェクト: NewFuture/BitTorrent
 public BlockReadState Init(Block block, BlockReadDelegate callback, int remaining, object state)
 {
     Block = block;
     Callback = callback;
     State = state;
     Remaining = remaining;
     return this;
 }