Source: msg/MailBox.js

/**
 * MailBox interface representing a queue where messages
 * are stored for Concerns before they are processed.
 * @interface
 */
class MailBox {

    /**
     * setEnqueueListener sets the EnqueueListener for this MailBox.
     * The EnqueueListener is expected to be a Dispatcher that will
     * react to new messages being put on the mail queue.
     * @param {EnqueueListener} listener
     */
    setEnqueListener() {

    }

    /**
     * enqueue puts a message into the queue and alerts the
     * listener of the change. Messages may be stringified for
     * remote storage.
     * @param {Concern} to
     * @param {Reference} from
     * @param {*} message
     */
    enqueue(to, from, message) {


    }

    /**
     * dequeue furnishes the next message to be processed.
     * @returns {Envelope}
     */
    dequeue() {

    }

}

/**
 * MailBoxListener is the interface of classes interested in reacting to
 * enqueue events on the MailBox.
 * @interface
 */
class EnqueueListener {

    /**
     * onEnqueue is called when a new item has been enqueued by
     * the MailBox.
     * @param {MailBox} box
     */
    onEnqueue() {

    }

}

MailBox.EnqueueListener = EnqueueListener;
export default MailBox