com.aelitis.azureus.core.networkmanager.impl
Class OutgoingMessageQueueImpl

java.lang.Object
  extended by com.aelitis.azureus.core.networkmanager.impl.OutgoingMessageQueueImpl
All Implemented Interfaces:
OutgoingMessageQueue

public class OutgoingMessageQueueImpl
extends Object
implements OutgoingMessageQueue

Priority-based outbound peer message queue.


Nested Class Summary
 
Nested classes/interfaces inherited from interface com.aelitis.azureus.core.networkmanager.OutgoingMessageQueue
OutgoingMessageQueue.MessageQueueListener
 
Constructor Summary
OutgoingMessageQueueImpl(MessageStreamEncoder stream_encoder)
          Create a new outgoing message queue.
 
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()
           
 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)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OutgoingMessageQueueImpl

public OutgoingMessageQueueImpl(MessageStreamEncoder stream_encoder)
Create a new outgoing message queue.

Parameters:
stream_encoder - default message encoder
Method Detail

setTransport

public void setTransport(Transport _transport)
Specified by:
setTransport in interface OutgoingMessageQueue

getMssSize

public int getMssSize()
Specified by:
getMssSize in interface OutgoingMessageQueue

setEncoder

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

Specified by:
setEncoder in interface OutgoingMessageQueue
Parameters:
stream_encoder - to use

getEncoder

public MessageStreamEncoder getEncoder()
Specified by:
getEncoder in interface OutgoingMessageQueue

getPercentDoneOfCurrentMessage

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

Specified by:
getPercentDoneOfCurrentMessage in interface OutgoingMessageQueue
Returns:
percentage complete (0-99), or -1 if no message is currently being sent

destroy

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

Specified by:
destroy in interface OutgoingMessageQueue

getTotalSize

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

Specified by:
getTotalSize in interface OutgoingMessageQueue
Returns:
total bytes remaining

getDataQueuedBytes

public int getDataQueuedBytes()
Specified by:
getDataQueuedBytes in interface OutgoingMessageQueue

getProtocolQueuedBytes

public int getProtocolQueuedBytes()
Specified by:
getProtocolQueuedBytes in interface OutgoingMessageQueue

getPriorityBoost

public boolean getPriorityBoost()
Specified by:
getPriorityBoost in interface OutgoingMessageQueue

setPriorityBoost

public void setPriorityBoost(boolean boost)
Specified by:
setPriorityBoost in interface OutgoingMessageQueue

isBlocked

public boolean isBlocked()
Specified by:
isBlocked in interface OutgoingMessageQueue

hasUrgentMessage

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

Specified by:
hasUrgentMessage in interface OutgoingMessageQueue
Returns:
true if there's a message tagged for immediate write

peekFirstMessage

public Message peekFirstMessage()
Specified by:
peekFirstMessage in interface OutgoingMessageQueue

addMessage

public 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.

Specified by:
addMessage in interface OutgoingMessageQueue
Parameters:
message - message to add
manual_listener_notify - true for manual notification, false for automatic

removeMessagesOfType

public 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.

Specified by:
removeMessagesOfType in interface OutgoingMessageQueue
Parameters:
message_types - type to remove
manual_listener_notify - true for manual notification, false for automatic

removeMessage

public 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.

Specified by:
removeMessage in interface OutgoingMessageQueue
Parameters:
message - to remove
manual_listener_notify - true for manual notification, false for automatic
Returns:
true if the message was removed, false otherwise

deliverToTransport

public int[] deliverToTransport(int max_bytes,
                                boolean protocol_is_free,
                                boolean manual_listener_notify)
                         throws 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.

Specified by:
deliverToTransport in interface OutgoingMessageQueue
Parameters:
max_bytes - maximum number of bytes to deliver
manual_listener_notify - true for manual notification, false for automatic
Returns:
number of bytes delivered
Throws:
IOException - on delivery error

flush

public void flush()
Description copied from interface: OutgoingMessageQueue
Force all pending messages to be delivered

Specified by:
flush in interface OutgoingMessageQueue

isDestroyed

public boolean isDestroyed()
Specified by:
isDestroyed in interface OutgoingMessageQueue

doListenerNotifications

public void doListenerNotifications()
Manually send any unsent listener notifications.

Specified by:
doListenerNotifications in interface OutgoingMessageQueue

setTrace

public void setTrace(boolean on)
Specified by:
setTrace in interface OutgoingMessageQueue

getQueueTrace

public String getQueueTrace()
Specified by:
getQueueTrace in interface OutgoingMessageQueue

registerQueueListener

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

Specified by:
registerQueueListener in interface OutgoingMessageQueue
Parameters:
listener -

cancelQueueListener

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

Specified by:
cancelQueueListener in interface OutgoingMessageQueue
Parameters:
listener -

notifyOfExternallySentMessage

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

Specified by:
notifyOfExternallySentMessage in interface OutgoingMessageQueue
Parameters:
message - sent externally