// **********************************************************************
//
// Copyright (c) 1998
// Object-Oriented Concepts, Inc.
// Billerica, MA, USA
//
// Copyright (c) 1998
// Object-Oriented Concepts GmbH
// Ettlingen, Germany
//
// All Rights Reserved
//
// **********************************************************************

#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();
};

};
