// CosEventChannelAdmin Module, p 4-15 CORBAservices, Event
// Service V1.0, 3/94

#ifndef _COS_EventChannelAdmin_IDL
#define _COS_EventChannelAdmin_IDL

#include <CosEventComm.idl>

#pragma prefix "omg.org"

module CosEventChannelAdmin 
{

    exception AlreadyConnected {};
    exception TypeError {};

    interface ProxyPushConsumer: CosEventComm::PushConsumer {
	void connect_push_supplier(
				   in CosEventComm::PushSupplier push_supplier)
	    raises(AlreadyConnected);
    };

    interface ProxyPullSupplier: CosEventComm::PullSupplier {
	void connect_pull_consumer(
				   in CosEventComm::PullConsumer pull_consumer)
	    raises(AlreadyConnected);
    };

    interface ProxyPullConsumer: CosEventComm::PullConsumer {
	void connect_pull_supplier(
				   in CosEventComm::PullSupplier pull_supplier)
	    raises(AlreadyConnected,TypeError);
    };

    interface ProxyPushSupplier: CosEventComm::PushSupplier {
	void connect_push_consumer(
				   in CosEventComm::PushConsumer push_consumer)
	    raises(AlreadyConnected, TypeError);
    };


    interface ConsumerAdmin {
	ProxyPushSupplier obtain_push_supplier();
	ProxyPullSupplier obtain_pull_supplier();
    };

    interface SupplierAdmin {
	ProxyPushConsumer obtain_push_consumer();
	ProxyPullConsumer obtain_pull_consumer();
    };

    interface EventChannel {
	ConsumerAdmin for_consumers();
	SupplierAdmin for_suppliers();
	void destroy();
    };

};
#endif
