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

#ifndef _COS_NOTIFY_COMM_IDL_
#define _COS_NOTIFY_COMM_IDL_

// omniORB specific pragmas to insert extra includes into the stub header.
#pragma hh #include "COS_sysdep.h"

#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_ */
