(* ---------------------------------------------------------------------- *)
(* Common Object Service 
                                                                          *)
(* ---------------------------------------------------------------------- *)
(* ICosEventChannelAdmin - Interface Module for the Common Object Service
                "Event Channel Administration Services" 
                                                                          *)
(* ---------------------------------------------------------------------- *)
(* Symbol prefixing: I - Interface Module
		     C - Class Interface
		     T - Non-class Type
		     E - Enumeration Type
		     k - constant
		     p - parameter to a method
		     a - variable
                                                                          *)
(* ---------------------------------------------------------------------- *)

INTERFACE ICosEventChannelAdmin
	IMPORTS ICosEventComm END;

TYPE TString = OPTIONAL ilu.CString;
TYPE TObjectSBH = OPTIONAL ilu.CString;
TYPE TAny = TString;

(* ---------------------------------------------------------------------- *)
(* Exception Definitions *)
(* ---------------------------------------------------------------------- *)

EXCEPTION AlreadyConnected "Already Connected";
EXCEPTION TypeError "Type Error";

(* ---------------------------------------------------------------------- *)
(*  Proxy Channel Event Services *)
(* ---------------------------------------------------------------------- *)

TYPE CProxyPushConsumer = OBJECT
  SUPERTYPES ICosEventComm.CPushConsumer END
  METHODS
    ConnectPushSupplier(pSupplier : ICosEventComm.CPushSupplier)
      RAISES AlreadyConnected END
  END;


TYPE CProxyPullSupplier = OBJECT
  SUPERTYPES ICosEventComm.CPullSupplier END
  METHODS
    ConnectPullConsumer(pConsumer : ICosEventComm.CPullConsumer)
      RAISES AlreadyConnected END
  END;

TYPE CProxyPullConsumer = OBJECT
  SUPERTYPES ICosEventComm.CPullConsumer END
  METHODS
    ConnectPullSupplier(pSupplier : ICosEventComm.CPullSupplier)
      RAISES AlreadyConnected, TypeError END
  END;


TYPE CProxyPushSupplier = OBJECT
  SUPERTYPES ICosEventComm.CPushSupplier END
  METHODS
    ConnectPushConsumer(pConsumer : ICosEventComm.CPushConsumer)
      RAISES AlreadyConnected, TypeError END
  END;


(* ---------------------------------------------------------------------- *)
(*  Event Channel Admin Objects *)
(* ---------------------------------------------------------------------- *)

TYPE CConsumerAdmin = OBJECT
  METHODS
    ObtainPushSupplier() : CProxyPushSupplier,
    ObtainPullSupplier() : CProxyPullSupplier
  END;

TYPE CSupplierAdmin = OBJECT
  METHODS
    ObtainPushConsumer() : CProxyPushConsumer,
    ObtainPullConsumer() : CProxyPullConsumer
  END;

TYPE CEventChannel = OBJECT
  METHODS
    ForConsumers() : CConsumerAdmin,
    ForSuppliers() : CSupplierAdmin,
    Destroy()
  END;