//File: CosNotifyComm.idl
//Part of the Notification Service
//OMG File: 04-10-12

#ifndef _COS_NOTIFY_COMM_IDL_
#define _COS_NOTIFY_COMM_IDL_

#ifdef _PRE_3_0_COMPILER_
#include <CosNotification.idl>
#include <CosEventComm.idl>
#pragma prefix "omg.org"
#else
import ::CosNotification;
import ::CosEventComm;
#endif // _PRE_3_0_COMPILER_

module CosNotifyComm {

#ifndef _PRE_3_0_COMPILER_
typeprefix CosNotifyComm "omg.org";
#endif // _PRE_3_0_COMPILER_

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