protected override void HandlePiece(PieceMessage piece, PeerState peer) { }
protected override void HandlePiece(PieceMessage piece, PeerState peer) { var blockInfo = new BlockInfo(piece.Index, piece.Offset, piece.Data.Length); //съобщаваме на BlockStrategistът, че сме получили блок, а той ни казва дали ни е нужен if(BlockStrategist.Received(blockInfo)) { //ако блока е нужен, записваме го WriteBlock(piece); } //понижаване на брояча за блоковете в изчакване peer.PendingBlocks--; //изпращане на нова заявка за блок към пиъра SendBlockRequests(peer); }
protected abstract void HandlePiece(PieceMessage piece, PeerState peer);
private void WriteBlock(PieceMessage piece) { try { var block = new Block(piece.Data, piece.Index, piece.Offset, piece.Data.Length); BlockManager.AddBlock(block, BlockWritten, block); Interlocked.Add(ref pendingWrites, piece.Data.Length); } catch(Exception e) { HandleException(e); } }