#ifndef _MAILBOXIMPL_H
#define _MAILBOXIMPL_H

#include "MailS.h"
#include <CosNotifyChannelAdminS.h>
#include <CosNotificationS.h>

#include "ChannelUtil.h"

class MailBoxImpl
  : public POA_Mail::MailBox
{
public:

  MailBoxImpl (CORBA::ORB_ptr orb, ChannelUtil &util, const char *name);

  virtual ~MailBoxImpl (void);

  void init (void);

  virtual void sendMessage (const char *message, const Mail::StringSeq &to);

  virtual CORBA::Boolean receiveMessage (CORBA::String_out sender, CORBA::String_out message);

  virtual void destroy (void);

  virtual void offer_change (const CosNotification::EventTypeSeq &/*added*/,
                             const CosNotification::EventTypeSeq &/*removed*/);

  virtual void subscription_change (const CosNotification::EventTypeSeq &/*added*/,
                                    const CosNotification::EventTypeSeq &/*removed*/);

  virtual void disconnect_structured_pull_consumer (void);

  virtual void disconnect_structured_push_supplier (void);

private:

  CORBA::ORB_var orbVar_;

  ChannelUtil &util_;

  ACE_CString username_;

  PortableServer::POA_var poaVar_;

  PortableServer::ObjectId_var oidVar_;

  CosNotifyChannelAdmin::StructuredProxyPullSupplier_var inboxProxyVar_;

  CosNotifyChannelAdmin::StructuredProxyPushConsumer_var outboxProxyVar_;
};

#endif  // _MAILBOXIMPL_H
