Class OutgoingBTPieceMessageHandler
- java.lang.Object
-
- com.biglybt.core.peermanager.utils.OutgoingBTPieceMessageHandler
-
public class OutgoingBTPieceMessageHandler extends java.lang.Object
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
Fields Modifier and Type Field Description private java.util.Map<java.lang.Integer,int[]>
active_pieces
(package private) OutgoingBTPieceMessageHandlerAdapter
adapter
private boolean
destroyed
private java.util.ArrayList<DiskManagerReadRequest>
loading_messages
private AEMonitor
lock_mon
private OutgoingMessageQueue
outgoing_message_queue
private PEPeer
peer
private byte
piece_version
private java.util.HashMap<BTPiece,DiskManagerReadRequest>
queued_messages
private DiskManagerReadRequestListener
read_req_listener
private java.util.LinkedList<DiskManagerReadRequest>
recent_messages
private long
recent_messages_last_access
private int
request_read_ahead
private java.util.LinkedList<DiskManagerReadRequest>
requests
private OutgoingMessageQueue.MessageQueueListener
sent_message_listener
-
Constructor Summary
Constructors Constructor Description 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.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
addPieceRequest(int piece_number, int piece_offset, int length)
Register a new piece data request.void
destroy()
private void
doReadAheadLoads()
DiskManagerReadRequest[]
getRecentMessages()
int
getRequestCount()
int
getRequestedPieceNumberCount()
int[]
getRequestedPieceNumbers()
Get a list of piece numbers being requestedboolean
isStalledPendingLoad()
void
removeAllPieceRequests()
Remove all outstanding piece data requests.void
removePieceRequest(int piece_number, int piece_offset, int length)
Remove an outstanding piece data request.void
setPieceVersion(byte version)
void
setRequestReadAhead(int num_to_read_ahead)
private void
trimRecentMessages()
-
-
-
Field Detail
-
peer
private final PEPeer peer
-
outgoing_message_queue
private final OutgoingMessageQueue outgoing_message_queue
-
piece_version
private byte piece_version
-
requests
private final java.util.LinkedList<DiskManagerReadRequest> requests
-
loading_messages
private final java.util.ArrayList<DiskManagerReadRequest> loading_messages
-
queued_messages
private final java.util.HashMap<BTPiece,DiskManagerReadRequest> queued_messages
-
active_pieces
private final java.util.Map<java.lang.Integer,int[]> active_pieces
-
recent_messages
private java.util.LinkedList<DiskManagerReadRequest> recent_messages
-
recent_messages_last_access
private volatile long recent_messages_last_access
-
lock_mon
private final AEMonitor lock_mon
-
destroyed
private boolean destroyed
-
request_read_ahead
private int request_read_ahead
-
adapter
final OutgoingBTPieceMessageHandlerAdapter adapter
-
read_req_listener
private final DiskManagerReadRequestListener read_req_listener
-
sent_message_listener
private final OutgoingMessageQueue.MessageQueueListener sent_message_listener
-
-
Constructor Detail
-
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 Detail
-
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
public DiskManagerReadRequest[] getRecentMessages()
-
getRequestCount
public int getRequestCount()
-
isStalledPendingLoad
public boolean isStalledPendingLoad()
-
-