Class QueuedMailbox<Msg extends Serializable>

All Implemented Interfaces:
Serializable, Remote, Mailbox<Msg>
Direct Known Subclasses:
SinkBox

public class QueuedMailbox<Msg extends Serializable> extends UnicastRemoteObject
A Mailbox with a specified (positive) capacity
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
     
    protected int
     
    protected boolean
     
    protected final LinkedList<Msg>
     

    Fields inherited from class java.rmi.server.RemoteObject

    ref
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    QueuedMailbox(Class<Msg> msgClass, int capacity)
    A new QueuedMailbox with given CAPACITY carrying messages of type MSGCLASS.
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    The capacity (see interface comment above) of THIS.
    <T extends Serializable>
    Mailbox<T>
    checkType(Class<T> msgClass)
    Returns THIS, assuming that THIS conveys messages of class MSGCLASS.
    void
    Short for close (0).
    void
    close(long millis)
    Performs a flush(MILLIS) and then invalidates THIS for all future use, deleting all remaining messages.
    static <Msg extends Serializable>
    QueuedMailbox<Msg>
    create(int capacity)
    A new QueuedMailbox with capacity () fixed at CAPACITY, with no type checking.
    static <Msg extends Serializable>
    QueuedMailbox<Msg>
    create(Class<Msg> msgClass, int capacity)
    A new QueuedMailbox with capacity () fixed at CAPACITY.
    void
    deposit(Msg msg)
    Deposit MSG in this Mailbox.
    boolean
    deposit(Msg msg, long millis)
    Deposit MSG in this Mailbox, if this can be done within approximately MILLIS milliseconds.
    protected void
    enqueue(Msg msg)
    Place MSG at the end of the message queue.
    boolean
    flush(long millis)
    Wait for all queued messages to be received, or MILLIS milliseconds, whichever comes first.
    protected void
    forward(Msg msg, long millis)
    Perform forwarding of MSG to all recipients, waiting for up to MILLIS milliseconds for each deposit to be accepted.
    void
    Forward copies of all messages (including any already present) to BOXES in the order received.
    void
    Forward copies of all messages (including any already present) to BOXES in the order received.
    boolean
    True iff THIS is closed.
    boolean
    True iff THIS is currently forwarding messages as a result of forwardTo.
    The (runtime) type of message sent through this box.
    protected long
    myWait(long limit)
    Wait for up to LIMIT milliseconds or the next notify or interrupt.
    Receive the next queued message in this Mailbox.
    receive(long millis)
    Receive the next queued message in this Mailbox, if one is available within MILLIS milliseconds.
    void
    Stop forwarding copies of messages.

    Methods inherited from class java.rmi.server.RemoteServer

    getClientHost, getLog, setLog

    Methods inherited from class java.rmi.server.RemoteObject

    equals, getRef, hashCode, toString, toStub

    Methods inherited from class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • queue

      protected final LinkedList<Msg extends Serializable> queue
    • capacity

      protected int capacity
    • open

      protected boolean open
    • depositBlocks

      protected int depositBlocks
  • Constructor Details

    • QueuedMailbox

      protected QueuedMailbox(Class<Msg> msgClass, int capacity) throws RemoteException
      A new QueuedMailbox with given CAPACITY carrying messages of type MSGCLASS. The factory method create, rather than this constructor, is intended for public use.
      Throws:
      RemoteException
  • Method Details

    • create

      public static <Msg extends Serializable> QueuedMailbox<Msg> create(Class<Msg> msgClass, int capacity)
      A new QueuedMailbox with capacity () fixed at CAPACITY.
    • create

      public static <Msg extends Serializable> QueuedMailbox<Msg> create(int capacity)
      A new QueuedMailbox with capacity () fixed at CAPACITY, with no type checking.
    • deposit

      public void deposit(Msg msg) throws InterruptedException, RemoteException
      Deposit MSG in this Mailbox. If the Mailbox is full, wait if necessary for space to be available. MSG must be non-null. Throws Interrupted exception and does nothing if current thread is interrupted. Throws an IllegalStateException (or RemoteException) if THIS is closed. Throws IllegalArgumentException if MSG is null.
      Throws:
      InterruptedException
      RemoteException
    • deposit

      public boolean deposit(Msg msg, long millis) throws InterruptedException, RemoteException
      Deposit MSG in this Mailbox, if this can be done within approximately MILLIS milliseconds. Returns true iff the message was deposited. Does not block if MILLIS is 0. MSG must be non-null. Throws Interrupted exception and does nothing if current thread is interrupted. Throws IllegalStateException (or RemoteException) if THIS is closed. Throws IllegalArgumentException if MSG is null.
      Throws:
      InterruptedException
      RemoteException
    • receive

      public Msg receive() throws InterruptedException
      Receive the next queued message in this Mailbox. Returns null if THIS is closed. Throws Interrupted exception and does nothing if the current thread is interrupted.
      Throws:
      InterruptedException
    • receive

      public Msg receive(long millis) throws InterruptedException
      Receive the next queued message in this Mailbox, if one is available within MILLIS milliseconds. Returns null otherwise, including if THIS is closed. Does not block if MILLIS is 0. Throws Interrupted exception and does nothing if current thread is interrupted.
      Throws:
      InterruptedException
    • forwardTo

      public void forwardTo(Mailbox<Msg> box) throws InterruptedException, RemoteException
      Forward copies of all messages (including any already present) to BOXES in the order received. Once forwarded to all destinations, messages are otherwise treated as usual. Deposit blocks until all forwarding is complete.
      Throws:
      InterruptedException
      RemoteException
    • forwardTo

      public void forwardTo(List<Mailbox<Msg>> boxes) throws InterruptedException, RemoteException
      Forward copies of all messages (including any already present) to BOXES in the order received. Once forwarded to all destinations, messages are otherwise treated as usual. Deposit blocks until all forwarding is complete.
      Throws:
      InterruptedException
      RemoteException
    • stopForwarding

      public void stopForwarding()
      Stop forwarding copies of messages.
    • flush

      public boolean flush(long millis) throws InterruptedException
      Wait for all queued messages to be received, or MILLIS milliseconds, whichever comes first. During this wait, the Mailbox acts as if full from the point of view of all threads attempting to deposit. Returns true if all messages were flushed within the time limit.
      Throws:
      InterruptedException
    • close

      public void close(long millis) throws InterruptedException
      Performs a flush(MILLIS) and then invalidates THIS for all future use, deleting all remaining messages. Any waiting threads or subsequent calls receive an immediate InvalidStateException indicating an invalid state. In general, the thread that uses a Mailbox to send messages is the one that closes it.
      Throws:
      InterruptedException
    • close

      public void close() throws InterruptedException
      Short for close (0).
      Throws:
      InterruptedException
    • isForwarding

      public boolean isForwarding()
      True iff THIS is currently forwarding messages as a result of forwardTo.
    • isClosed

      public boolean isClosed()
      True iff THIS is closed.
    • capacity

      public int capacity()
      The capacity (see interface comment above) of THIS.
    • enqueue

      protected void enqueue(Msg msg)
      Place MSG at the end of the message queue.
    • forward

      protected void forward(Msg msg, long millis) throws RemoteException, InterruptedException
      Perform forwarding of MSG to all recipients, waiting for up to MILLIS milliseconds for each deposit to be accepted.
      Throws:
      RemoteException
      InterruptedException
    • myWait

      protected long myWait(long limit) throws InterruptedException
      Wait for up to LIMIT milliseconds or the next notify or interrupt. Returns the remaining time.
      Throws:
      InterruptedException
    • messageType

      public Class<Msg> messageType()
      Description copied from interface: Mailbox
      The (runtime) type of message sent through this box.
      Specified by:
      messageType in interface Mailbox<Msg extends Serializable>
    • checkType

      public <T extends Serializable> Mailbox<T> checkType(Class<T> msgClass)
      Description copied from interface: Mailbox
      Returns THIS, assuming that THIS conveys messages of class MSGCLASS.
      Specified by:
      checkType in interface Mailbox<Msg extends Serializable>