Class OutgoingMessageQueueImpl

    • Field Detail

      • queue

        private final java.util.LinkedList<RawMessage> queue
      • queue_mon

        private final AEMonitor queue_mon
      • delayed_notifications

        private final java.util.ArrayList delayed_notifications
      • delayed_notifications_mon

        private final AEMonitor delayed_notifications_mon
      • listeners

        private volatile java.util.ArrayList listeners
      • listeners_mon

        private final AEMonitor listeners_mon
      • total_size

        private int total_size
      • total_data_size

        private int total_data_size
      • priority_boost

        private boolean priority_boost
      • urgent_message

        private RawMessage urgent_message
      • destroyed

        private boolean destroyed
      • percent_complete

        private int percent_complete
      • prev_sent

        private final java.util.LinkedList<RawMessage> prev_sent
      • trace

        private boolean trace
      • rawBufferCache

        private java.lang.ref.WeakReference rawBufferCache
      • origPositionsCache

        private java.lang.ref.WeakReference origPositionsCache
    • Constructor Detail

      • OutgoingMessageQueueImpl

        public OutgoingMessageQueueImpl​(MessageStreamEncoder stream_encoder)
        Create a new outgoing message queue.
        Parameters:
        stream_encoder - default message encoder
    • Method Detail

      • 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
      • 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
      • 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
      • 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 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.
        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:
        java.io.IOException - on delivery error
      • 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