//File: CosNotifyComm.idl
//Part of the Notification Service

#ifndef _COS_NOTIFY_COMM_IDL_
#define _COS_NOTIFY_COMM_IDL_
#pragma prefix "omg.org"

#include <CosNotification.idl>
#include <CosEventComm.idl>

module CosNotifyComm {

   exception InvalidEventType { CosNotification::EventType type; };

   interface NotifyPublish {

      void offer_change (
            in CosNotification::EventTypeSeq added,
            in CosNotification::EventTypeSeq removed )
         raises ( InvalidEventType );

   }; // NotifyPublish

   interface NotifySubscribe {

      void subscription_change(
            in CosNotification::EventTypeSeq added,
            in CosNotification::EventTypeSeq removed )
         raises ( InvalidEventType );

   }; // NotifySubscribe

   interface PushConsumer :
      NotifyPublish,
      CosEventComm::PushConsumer {
   }; // PushConsumer

   interface PullConsumer :
      NotifyPublish,
      CosEventComm::PullConsumer {
   }; // PullConsumer

   interface PullSupplier :
      NotifySubscribe,
      CosEventComm::PullSupplier {
   }; // PullSupplier

   interface PushSupplier :
      NotifySubscribe,
      CosEventComm::PushSupplier {
   };

   interface StructuredPushConsumer : NotifyPublish {

      void push_structured_event(
            in CosNotification::StructuredEvent notification)
         raises(CosEventComm::Disconnected);

      void disconnect_structured_push_consumer();

   }; // StructuredPushConsumer

   interface StructuredPullConsumer : NotifyPublish {
      
      void disconnect_structured_pull_consumer();

   }; // StructuredPullConsumer

   interface StructuredPullSupplier : NotifySubscribe {

      CosNotification::StructuredEvent pull_structured_event()
         raises(CosEventComm::Disconnected);

      CosNotification::StructuredEvent try_pull_structured_event(
            out boolean has_event)
         raises(CosEventComm::Disconnected);

      void disconnect_structured_pull_supplier();

   }; // StructuredPullSupplier

   interface StructuredPushSupplier : NotifySubscribe {
      
      void disconnect_structured_push_supplier();

   }; // StructuredPushSupplier

   interface SequencePushConsumer : NotifyPublish {

      void push_structured_events(
            in CosNotification::EventBatch notifications)
         raises(CosEventComm::Disconnected);

      void disconnect_sequence_push_consumer();

   }; // SequencePushConsumer

   interface SequencePullConsumer : NotifyPublish {
      
      void disconnect_sequence_pull_consumer();

   }; // SequencePullConsumer

   interface SequencePullSupplier : NotifySubscribe {

      CosNotification::EventBatch pull_structured_events(
            in long max_number )
         raises(CosEventComm::Disconnected);

      CosNotification::EventBatch try_pull_structured_events(
            in long max_number,
            out boolean has_event)
         raises(CosEventComm::Disconnected);

      void disconnect_sequence_pull_supplier();

   }; // SequencePullSupplier

   interface SequencePushSupplier : NotifySubscribe {
      
      void disconnect_sequence_push_supplier();

   }; // SequencePushSupplier

}; // CosNotifyComm

#endif /* _COS_NOTIFY_COMM_IDL_ */
