/// <summary> /// Writes pending blocks that make up a full piece. /// </summary> void WriteCompletedPieces() { var completed = GetCompletedPieces(_pendingBlocks); foreach (var piece in completed) { byte[] data; if (VerifyPiece(piece.Key, piece.Value, out data)) { _logger.LogDebug($"Writing piece #{piece.Key.Index}"); // Write piece long pieceOffset = Metainfo.PieceOffset(piece.Key); _baseHandler.WriteBlockData(pieceOffset, data); _completedPieces.Add(piece.Key); // Notify of completed piece PieceCompleted?.Invoke(piece.Key); } else { _logger.LogInformation($"Piece #{piece.Key.Index} is corrupted"); // Notify of corrupted piece PieceCorrupted?.Invoke(piece.Key); } } }
private void OnPieceCompleted(PieceCompleted data) { Notifications.Enqueue(new PieceCompletedNotification(data.Hash, new PieceInfo(data.Piece))); }