com.aelitis.azureus.core.networkmanager
Interface OutgoingMessageQueue

All Known Implementing Classes:
OutgoingMessageQueueImpl, PeerForeignNetworkConnection.omq

public interface OutgoingMessageQueue

Priority-based outbound peer message queue.


Nested Class Summary
static interface OutgoingMessageQueue.MessageQueueListener
          Receive notification of queue events.
 
Method Summary
 void addMessage(Message message, boolean manual_listener_notify)
          Add a message to the message queue.
 void cancelQueueListener(OutgoingMessageQueue.MessageQueueListener listener)
          Cancel queue event notification listener.
 int[] deliverToTransport(int max_bytes, boolean protocol_is_free, boolean manual_listener_notify)
          Deliver (write) message(s) data to the underlying transport.
 void destroy()
          Destroy this queue; i.e.
 void doListenerNotifications()
          Manually send any unsent listener notifications.
 void flush()
          Force all pending messages to be delivered
 int getDataQueuedBytes()
           
 MessageStreamEncoder getEncoder()
           
 int getMssSize()
           
 int getPercentDoneOfCurrentMessage()
          Get the percentage of the current message that has already been sent out.
 boolean getPriorityBoost()
           
 int getProtocolQueuedBytes()
           
 java.lang.String getQueueTrace()
           
 int getTotalSize()
          Get the total number of bytes ready to be transported.
 boolean hasUrgentMessage()
          Whether or not an urgent message (one that needs an immediate send, i.e.
 boolean isBlocked()
           
 boolean isDestroyed()
           
 void notifyOfExternallySentMessage(Message message)
          Notifty the queue (and its listeners) of a message sent externally on the queue's behalf.
 Message peekFirstMessage()
           
 void registerQueueListener(OutgoingMessageQueue.MessageQueueListener listener)
          Add a listener to be notified of queue events.
 boolean removeMessage(Message message, boolean manual_listener_notify)
          Remove a particular message from the queue.
 void removeMessagesOfType(Message[] message_types, boolean manual_listener_notify)
          Remove all messages of the given types from the queue.
 void setEncoder(MessageStreamEncoder stream_encoder)
          Set the message stream encoder that will be used to encode outgoing messages.
 void setPriorityBoost(boolean boost)
           
 void setTrace(boolean on)
           
 void setTransport(Transport _transport)
           
 

Method Detail

setTransport

void setTransport(Transport _transport)

getMssSize

int getMssSize()

setEncoder

void setEncoder(MessageStreamEncoder stream_encoder)
Set the message stream encoder that will be used to encode outgoing messages.

Parameters:
stream_encoder - to use

getEncoder

MessageStreamEncoder getEncoder()

getPercentDoneOfCurrentMessage

int getPercentDoneOfCurrentMessage()
Get the percentage of the current message that has already been sent out.

Returns:
percentage complete (0-99), or -1 if no message is currently being sent

destroy

void destroy()
Destroy this queue; i.e. perform cleanup actions.


isDestroyed

boolean isDestroyed()

getTotalSize

int getTotalSize()
Get the total number of bytes ready to be transported.

Returns:
total bytes remaining

getDataQueuedBytes

int getDataQueuedBytes()

getProtocolQueuedBytes

int getProtocolQueuedBytes()

isBlocked

boolean isBlocked()

getPriorityBoost

boolean getPriorityBoost()

setPriorityBoost

void setPriorityBoost(boolean boost)

hasUrgentMessage

boolean hasUrgentMessage()
Whether or not an urgent message (one that needs an immediate send, i.e. a no-delay message) is queued.

Returns:
true if there's a message tagged for immediate write

peekFirstMessage

Message peekFirstMessage()

addMessage

void addMessage(Message message,
                boolean manual_listener_notify)
Add a message to the message queue. NOTE: Allows for manual listener notification at some later time, using doListenerNotifications(), instead of notifying immediately from within this method. This is useful if you want to invoke listeners outside of some greater synchronised block to avoid deadlock.

Parameters:
message - message to add
manual_listener_notify - true for manual notification, false for automatic

removeMessagesOfType

void removeMessagesOfType(Message[] message_types,
                          boolean manual_listener_notify)
Remove all messages of the given types from the queue. NOTE: Allows for manual listener notification at some later time, using doListenerNotifications(), instead of notifying immediately from within this method. This is useful if you want to invoke listeners outside of some greater synchronised block to avoid deadlock.

Parameters:
message_types - type to remove
manual_listener_notify - true for manual notification, false for automatic

removeMessage

boolean removeMessage(Message message,
                      boolean manual_listener_notify)
Remove a particular message from the queue. NOTE: Only the original message found in the queue will be destroyed upon removal, which may not necessarily be the one passed as the method parameter, as some messages override equals() (i.e. BTRequest messages) instead of using reference equality, and could be a completely different object, and would need to be destroyed manually. If the message does not override equals, then any such method will likely *not* be found and removed, as internal queued object was a new allocation on insertion. NOTE: Allows for manual listener notification at some later time, using doListenerNotifications(), instead of notifying immediately from within this method. This is useful if you want to invoke listeners outside of some greater synchronised block to avoid deadlock.

Parameters:
message - to remove
manual_listener_notify - true for manual notification, false for automatic
Returns:
true if the message was removed, false otherwise

deliverToTransport

int[] deliverToTransport(int max_bytes,
                         boolean protocol_is_free,
                         boolean manual_listener_notify)
                         throws java.io.IOException
Deliver (write) message(s) data to the underlying transport. NOTE: Allows for manual listener notification at some later time, using doListenerNotifications(), instead of notifying immediately from within this method. This is useful if you want to invoke listeners outside of some greater synchronised block to avoid deadlock.

Parameters:
max_bytes - maximum number of bytes to deliver
manual_listener_notify - true for manual notification, false for automatic
Returns:
number of bytes delivered as [data, protocol]
Throws:
java.io.IOException - on delivery error

doListenerNotifications

void doListenerNotifications()
Manually send any unsent listener notifications.


flush

void flush()
Force all pending messages to be delivered


setTrace

void setTrace(boolean on)

getQueueTrace

java.lang.String getQueueTrace()

registerQueueListener

void registerQueueListener(OutgoingMessageQueue.MessageQueueListener listener)
Add a listener to be notified of queue events.

Parameters:
listener -

cancelQueueListener

void cancelQueueListener(OutgoingMessageQueue.MessageQueueListener listener)
Cancel queue event notification listener.

Parameters:
listener -

notifyOfExternallySentMessage

void notifyOfExternallySentMessage(Message message)
Notifty the queue (and its listeners) of a message sent externally on the queue's behalf.

Parameters:
message - sent externally