3.15.5.4. Assembly Interfaces

uses AnInterface AReceptacle;
consumes AnEvent ASink;
void connect_AReceptacle (in AnInterface connection)
  raises (AlreadyConnected, InvalidConnection);
AnInterface disconnect_AReceptacle ()
  raises (NoConnection);
AnInterface get_connection_AReceptacle ();
AnEventConsumer get_consumer_ASink ();
module Components
{
  ...

  interface Receptacles
  {
    Cookie connect (in FeatureName name, in Object connection)
      raises (InvalidName, InvalidConnection, AlreadyConnected, ExceededConnectionLimit);
    Object disconnect (in FeatureName name, in Cookie ck)
      raises (InvalidName, InvalidConnection, CookieRequired, NoConnection);
    ConnectionDescriptions get_connections (in FeatureName name)
      raises (InvalidName);

    ...
  };

  ...
  valuetype Cookie
  {
    private CORBA::OctetSeq cookieValue;
  };

  valuetype SubscriberDescription
  {
    public Cookie ck;
    public EventConsumerBase consumer;
  };
  typedef sequence<SubscriberDescription> SubscriberDescriptions;

  interface Events
  {
    void connect_consumer (in FeatureName emitter_name, in EventConsumerBase consumer)
      raises (InvalidName, AlreadyConnected, InvalidConnection);
    EventConsumerBase disconnect_consumer (in FeatureName source_name)
      raises (InvalidName, NoConnection);
    EventConsumerBase get_consumer (in FeatureName sink_name) raises (InvalidName);

    Cookie subscribe (in FeatureName publisher_name, in EventConsumerBase subscriber)
      raises (InvalidName, InvalidConnection, ExceededConnectionLimit);
    EventConsumerBase unsubscribe (in FeatureName publisher_name, in Cookie ck)
      raises (InvalidName, InvalidConnection);

    ...
  };

  ...
};