// **********************************************************************
//
// Copyright (c) 1999
// Object Oriented Concepts, Inc.
// Billerica, MA, USA
//
// All Rights Reserved
//
// **********************************************************************
 
#ifndef CosTypedEventChannelAdmin_idl
#define CosTypedEventChannelAdmin_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
