package org.torrent.internal.protocol.message; import java.nio.ByteBuffer; import org.torrent.internal.data.BTPart; import org.torrent.internal.util.Validator; public class Piece implements BittorrentMessage { private final ByteBuffer data; private final BTPart pieceInfo; public Piece(int index, int start, ByteBuffer data) { Validator.isTrue(index >= 0, "Invalid index: " + index); Validator.isTrue(start >= 0, "Invalid start: " + start); pieceInfo = new BTPart(index, start, data.remaining()); Validator.notNull(data, "Data is null"); this.data = data; } public Piece(BTPart pi, ByteBuffer data) { this(pi.getIndex(), pi.getStart(), data); Validator.isTrue(pi.getLength() == data.remaining(), "Length and data.length differ!"); } public ByteBuffer getData() { return data.duplicate(); } public int getLength() { return data.remaining(); } public int getIndex() { return pieceInfo.getIndex(); } public int getStart() { return pieceInfo.getStart(); } @Override public void accept(BTMessageVisitor visitor) { visitor.visitPiece(this); } public BTPart getPieceInfo() { return pieceInfo; } @Override public String toString() { return "Piece: " + pieceInfo; } }