
//=============================================================================
/**
*  @file  CosTypedEventChannelAdmin.idl
*
*  @brief Part of the Event Service
*          See https://www.omg.org/spec/EVNT
*/
//=============================================================================

#ifndef _COS_TYPED_EVENT_CHANNEL_ADMIN_IDL_
#define _COS_TYPED_EVENT_CHANNEL_ADMIN_IDL_

#include "CosEventChannelAdmin.idl"
#include "CosTypedEventComm.idl"

#pragma prefix "omg.org"

module CosTypedEventChannelAdmin {

  exception InterfaceNotSupported {};
  exception NoSuchImplementation {};
  typedef string Key;

  interface TypedProxyPushConsumer :
  CosEventChannelAdmin::ProxyPushConsumer,
    CosTypedEventComm::TypedPushConsumer  { };

  interface TypedProxyPullSupplier :
  CosEventChannelAdmin::ProxyPullSupplier,
    CosTypedEventComm::TypedPullSupplier { };

  interface TypedSupplierAdmin :
  CosEventChannelAdmin::SupplierAdmin {
    TypedProxyPushConsumer obtain_typed_push_consumer(
      in Key supported_interface)
      raises(InterfaceNotSupported);
    CosEventChannelAdmin::ProxyPullConsumer obtain_typed_pull_consumer (
      in Key uses_interface)
      raises(NoSuchImplementation);
  };

  interface TypedConsumerAdmin :
  CosEventChannelAdmin::ConsumerAdmin {
    TypedProxyPullSupplier obtain_typed_pull_supplier(
      in Key supported_interface)
      raises (InterfaceNotSupported);
    CosEventChannelAdmin::ProxyPushSupplier obtain_typed_push_supplier(
      in Key uses_interface)
      raises(NoSuchImplementation);
  };

  interface TypedEventChannel {
    TypedConsumerAdmin for_consumers();
    TypedSupplierAdmin for_suppliers();
    void destroy ();
  };
};

#endif /* _COS_TYPED_EVENT_CHANNEL_ADMIN_IDL_ */
