//File: CosEventChannelAdmin.idl
//Part of the Event Service

#ifndef _COS_EVENT_CHANNEL_ADMIN_IDL_
#define _COS_EVENT_CHANNEL_ADMIN_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 /* ifndef _COS_EVENT_CHANNEL_ADMIN_IDL_ */
