コード例 #1
0
        /// <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);
                }
            }
        }
コード例 #2
0
ファイル: SwarmConnect.cs プロジェクト: sora-jp/leak
 private void OnPieceCompleted(PieceCompleted data)
 {
     Notifications.Enqueue(new PieceCompletedNotification(data.Hash, new PieceInfo(data.Piece)));
 }