#ifndef _COS_TYPED_EVENT_IDL_
#define _COS_TYPED_EVENT_IDL_

#pragma prefix "omg.org"

#include<CosEvent.idl>

module CosTypedEventComm {
  
  interface TypedPushConsumer : CosEventComm::PushConsumer {
    Object get_typed_consumer(); 
  };
  
  interface TypedPullSupplier : CosEventComm::PullSupplier {               
    Object get_typed_supplier();
  };
}; 

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 /* ifndef _COS_TYPED_EVENT_IDL_ */
