#ifndef CosEventChannelAdmin_idl_
#define CosEventChannelAdmin_idl_

#include <coss/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);
	// MICO ext
	void notify (in any a);
    };

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

    interface ProxyPushSupplier: CosEventComm::PushSupplier {
	void connect_push_consumer(
	    in CosEventComm::PushConsumer
	    push_consumer)
	    raises(AlreadyConnected, TypeError);
	// MICO ext
	void notify (in any a);
    };

    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();
    };

};

module SimpleEventChannelAdmin {
    interface EventChannelFactory {
	CosEventChannelAdmin::EventChannel create_eventchannel ();
    };
};

#endif
