// $Id$ // // Copyright 2007-2008 Cisco Systems Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations // under the License. using System; using Etch.Msg; using Etch.Util; namespace Etch.Support { /// An interface used to deliver responses to a message. Support for the mechanism is somewhat /// dependent upon properties of the transport and message format. /// public interface Mailbox { /// the message id of this mailbox. long GetMessageId(); /// the next message to be read from the mailbox, or null if the mailbox is empty and closed. /// Wait forever for such a message to be delivered. /// Exception: /// throws InterruptedException thread interrupt. Element Read(); /// maxDelay the maximum amount of time in milliseconds to wait to read a message /// from an empty mailbox. 0 means wait forever, -1 means don't wait at all. /// the message read from the mailbox, or null if the mailbox is empty and closed, or if the time /// limit was exceeeded. /// Exception: /// throws InterruptedException thread interrupt. Element Read(int maxDelay); /// Closes the mailbox so that no more messages can be delivered. Queued messages remain to be read. /// Reading an empty closed mailbox returns null. /// true if this call closed the mailbox (that is, if action was taken), false if the mailbox was already closed. bool CloseDelivery(); /// Closes the mailbox so that no more messages will be delivered or read. Any remaining queued /// messages are delivered to a default handler. /// throws Exception bool CloseRead(); ///Registers a Notify interface implementation to receive a callback ///when a mailbox's status is changed. /// notify a Notify interface implementation to report the ///delivery status to. /// state a state value to pass thru to the Notify interface /// implementation. /// maxDelay the maximum amount of time in milliseconds to ///wait for delivery of a message to the mailbox. 0 means wait ///forever. The mailbox is closed upon timeout. void RegisterNotify( Notify notify, Object state, int maxDelay ); /// Unregisters a Notify interface implementation from receiving a callback /// when a mailbox's status is changed. Cancels any timeout. /// notify a Notify interface implementation which was previously ///registered. void UnregisterNotify( Notify notify ); bool Message(Who sender, Message msg); } ///The message as queued, including src and sender. public class Element : Who { /// sender the message sender. /// msg the message. public Element(Who sender, Message msg) { this.sender = sender; this.msg = msg; } /// The message sender. public Who sender; /// the message. public Message msg; } public interface Notify { /// Notifies of mailbox status change. /// mb the mailbox whose status has changed. /// state the state object passed in the register /// method. /// closed true if the mailbox timeout has expired and ///the mailbox is now closed to delivery, false if a message /// has arrived. void mailboxStatus(Mailbox mb, Object state, bool closed); } }