//
// The Event Service IDL Description
// 

#ifndef _COS_TYPED_EVENT_CHANNEL_ADMIN_
#define _COS_TYPED_EVENT_CHANNEL_ADMIN_

#include <CosEventChannelAdmin.idl>
#include <CosTypedEventComm.idl>

module CosTypedEventChannelAdmin
{
  typePrefix CosTypedEventChannelAdmin "omg.org";
  
  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
