package org.torrent.internal.peer.connection; import java.util.Collection; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import org.torrent.internal.data.BTPart; import org.torrent.internal.protocol.message.BittorrentMessage; import org.torrent.internal.protocol.message.Cancel; import org.torrent.internal.protocol.message.Request; public class AbstractPendingRequestsHolder implements BTPendingRequestsHolder { private Queue<BTPart> pendingRequests = new ConcurrentLinkedQueue<BTPart>(); private void enqueuePendingRequest(BTPart part) { pendingRequests.add(part); } @Override public BTPart takePendingRequest() { return pendingRequests.poll(); } @Override public void clearPendingRequests() { pendingRequests.clear(); } protected void handleMessage(BittorrentMessage message) { if (message instanceof Request) { enqueuePendingRequest(((Request) message).getPieceInfo()); } else if (message instanceof Cancel) { dequeuePendingRequest(((Cancel) message).getPieceInfo()); } } @Override public void dequeuePendingRequest(BTPart pieceInfo) { pendingRequests.remove(pieceInfo); } @Override public Collection<BTPart> getPendingRequests() { return pendingRequests; } }