package org.torrent.internal.io; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.merapi.helper.handlers.BarUpdateRequestHandler; import org.merapi.helper.messages.BarUpdateRespondMessage; import org.torrent.internal.data.TorrentMetaInfo; import org.torrent.internal.util.BTUtil; import org.torrent.internal.util.Validator; public abstract class PieceVerifier { public interface PieceVerifierEventListener { void verified(PieceEvent evt); void falsified(PieceEvent evt); void caughtException(PieceEvent evt); } private List<PieceVerifierEventListener> listeners = new CopyOnWriteArrayList<PieceVerifierEventListener>(); public abstract void checkPiece(TorrentMetaInfo.Piece piece); protected void firePieceVerified(final PieceEvent evt) { BTUtil.invokeLater(new Runnable() { @Override public void run() { for (PieceVerifierEventListener l : listeners) { l.verified(evt); } } }); } protected void firePieceFalsified(final PieceEvent evt) { BTUtil.invokeLater(new Runnable() { @Override public void run() { for (PieceVerifierEventListener l : listeners) { l.falsified(evt); } } }); } protected void fireCaughtException(final PieceEvent evt) { BTUtil.invokeLater(new Runnable() { @Override public void run() { for (PieceVerifierEventListener l : listeners) { l.caughtException(evt); } } }); } public void addPieceVerifierEventListener( PieceVerifierEventListener listener) { Validator.nonNull(listener); listeners.add(listener); } public void removePieceVerifierEventListener( PieceVerifierEventListener listener) { Validator.nonNull(listener); listeners.remove(listener); } }