Class OutgoingBTPieceMessageHandler
java.lang.Object
com.biglybt.core.peermanager.utils.OutgoingBTPieceMessageHandler
Front-end manager for handling requested outgoing bittorrent Piece messages.
Peers often make piece requests in batch, with multiple requests always
outstanding, all of which won't necessarily be honored (i.e. we choke them),
so we don't want to waste time reading in the piece data from disk ahead
of time for all the requests. Thus, we only want to perform read-aheads for a
small subset of the requested data at any given time, which is what this handler
does, before passing the messages onto the outgoing message queue for transmission.
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) final OutgoingBTPieceMessageHandlerAdapterprivate booleanprivate final ArrayList<DiskManagerReadRequest> private final AEMonitorprivate final OutgoingMessageQueueprivate final PEPeerprivate byteprivate final HashMap<BTPiece, DiskManagerReadRequest> private final DiskManagerReadRequestListenerprivate LinkedList<DiskManagerReadRequest> private longprivate intprivate final LinkedList<DiskManagerReadRequest> private final OutgoingMessageQueue.MessageQueueListener -
Constructor Summary
ConstructorsConstructorDescriptionOutgoingBTPieceMessageHandler(PEPeer _peer, OutgoingMessageQueue _outgoing_message_q, OutgoingBTPieceMessageHandlerAdapter _adapter, byte _piece_version) Create a new handler for outbound piece messages, reading piece data from the given disk manager and transmitting the messages out the given message queue. -
Method Summary
Modifier and TypeMethodDescriptionbooleanaddPieceRequest(int piece_number, int piece_offset, int length) Register a new piece data request.voiddestroy()private voidintintint[]Get a list of piece numbers being requestedbooleanvoidRemove all outstanding piece data requests.voidremovePieceRequest(int piece_number, int piece_offset, int length) Remove an outstanding piece data request.voidsetPieceVersion(byte version) voidsetRequestReadAhead(int num_to_read_ahead) private void
-
Field Details
-
peer
-
outgoing_message_queue
-
piece_version
private byte piece_version -
requests
-
loading_messages
-
queued_messages
-
active_pieces
-
recent_messages
-
recent_messages_last_access
private volatile long recent_messages_last_access -
lock_mon
-
destroyed
private boolean destroyed -
request_read_ahead
private int request_read_ahead -
adapter
-
read_req_listener
-
sent_message_listener
-
-
Constructor Details
-
OutgoingBTPieceMessageHandler
public OutgoingBTPieceMessageHandler(PEPeer _peer, OutgoingMessageQueue _outgoing_message_q, OutgoingBTPieceMessageHandlerAdapter _adapter, byte _piece_version) Create a new handler for outbound piece messages, reading piece data from the given disk manager and transmitting the messages out the given message queue.- Parameters:
disk_manager-outgoing_message_q-
-
-
Method Details
-
setPieceVersion
public void setPieceVersion(byte version) -
trimRecentMessages
private void trimRecentMessages() -
addPieceRequest
public boolean addPieceRequest(int piece_number, int piece_offset, int length) Register a new piece data request.- Parameters:
piece_number-piece_offset-length-
-
removePieceRequest
public void removePieceRequest(int piece_number, int piece_offset, int length) Remove an outstanding piece data request.- Parameters:
piece_number-piece_offset-length-
-
removeAllPieceRequests
public void removeAllPieceRequests()Remove all outstanding piece data requests. -
setRequestReadAhead
public void setRequestReadAhead(int num_to_read_ahead) -
destroy
public void destroy() -
doReadAheadLoads
private void doReadAheadLoads() -
getRequestedPieceNumbers
public int[] getRequestedPieceNumbers()Get a list of piece numbers being requested -
getRequestedPieceNumberCount
public int getRequestedPieceNumberCount() -
getRecentMessages
-
getRequestCount
public int getRequestCount() -
isStalledPendingLoad
public boolean isStalledPendingLoad()
-