#ifndef _COS_NOTIFYCHANNELADMIN_IDL_ #define _COS_NOTIFYCHANNELADMIN_IDL_ #pragma prefix "omg.org" #include<cosNotificationAppComm.idl> #include<CosNotifyFilter.idl> #include<CosNotifyComm.idl> #include<CosNotification.idl> module CosNotifyChannelAdmin { exception ConnectionAlreadyActive {}; exception ConnectionAlreadyInactive {}; exception NotConnected {}; // Forward declarations interface ConsumerAdmin; interface SupplierAdmin; interface EventChannel; interface EventChannelFactory; enum ProxyType { PUSH_ANY, PULL_ANY, PUSH_STRUCTURED, PULL_STRUCTURED, PUSH_SEQUENCE, PULL_SEQUENCE}; enum ObtainInfoMode { ALL_NOW_UPDATES_OFF, ALL_NOW_UPDATES_ON, NONE_NOW_UPDATES_OFF, NONE_NOW_UPDATES_ON}; interface ProxyConsumer : CosNotification::QoSAdmin, CosNotifyFilter::FilterAdmin { readonly attribute ProxyType MyType; readonly attribute SupplierAdmin MyAdmin; CosNotification::EventTypeSeq obtain_subscription_types(in ObtainInfoMode mode); void validate_event_qos (in CosNotification::QoSProperties required_qos, out CosNotification::NamedPropertyRangeSeq available_qos) raises (CosNotification::UnsupportedQoS); }; // ProxyConsumer interface ProxySupplier : CosNotification::QoSAdmin, CosNotifyFilter::FilterAdmin { readonly attribute ProxyType MyType; readonly attribute ConsumerAdmin MyAdmin; attribute CosNotifyFilter::MappingFilter priority_filter; attribute CosNotifyFilter::MappingFilter lifetime_filter; CosNotification::EventTypeSeq obtain_offered_types(in ObtainInfoMode mode); void validate_event_qos (in CosNotification::QoSProperties required_qos, out CosNotification::NamedPropertyRangeSeq available_qos) raises (CosNotification::UnsupportedQoS); }; // ProxySupplier interface ProxyPushConsumer : ProxyConsumer, CosNotifyComm::PushConsumer, CosEventChannelAdmin::ProxyPushConsumer { void connect_any_push_supplier (in CosEventComm::PushSupplier push_supplier) raises(CosEventChannelAdmin::AlreadyConnected); }; // ProxyPushConsumer interface StructuredProxyPushConsumer : ProxyConsumer, CosNotifyComm::StructuredPushConsumer { void connect_structured_push_supplier (in CosNotifyComm::StructuredPushSupplier push_supplier) raises(CosEventChannelAdmin::AlreadyConnected); }; // StructuredProxyPushConsumer interface SequenceProxyPushConsumer : ProxyConsumer, CosNotifyComm::SequencePushConsumer { void connect_sequence_push_supplier (in CosNotifyComm::SequencePushSupplier push_supplier) raises(CosEventChannelAdmin::AlreadyConnected); }; // SequenceProxyPushConsumer interface ProxyPullSupplier : ProxySupplier, CosNotifyComm::PullSupplier, CosEventChannelAdmin::ProxyPullSupplier, oe_CosNotificationComm::Event { void connect_any_pull_consumer (in CosEventComm::PullConsumer pull_consumer) raises(CosEventChannelAdmin::AlreadyConnected); }; // ProxyPullSupplier interface StructuredProxyPullSupplier : ProxySupplier, CosNotifyComm::StructuredPullSupplier, oe_CosNotificationComm::Event { void connect_structured_pull_consumer (in CosNotifyComm::StructuredPullConsumer pull_consumer) raises(CosEventChannelAdmin::AlreadyConnected); }; // StructuredProxyPullSupplier interface SequenceProxyPullSupplier : ProxySupplier, CosNotifyComm::SequencePullSupplier, oe_CosNotificationComm::Event { void connect_sequence_pull_consumer (in CosNotifyComm::SequencePullConsumer pull_consumer) raises(CosEventChannelAdmin::AlreadyConnected); }; // SequenceProxyPullSupplier interface ProxyPullConsumer : ProxyConsumer, CosNotifyComm::PullConsumer, CosEventChannelAdmin::ProxyPullConsumer { void connect_any_pull_supplier (in CosEventComm::PullSupplier pull_supplier) raises(CosEventChannelAdmin::AlreadyConnected, CosEventChannelAdmin::TypeError); void suspend_connection() raises(ConnectionAlreadyInactive, NotConnected); void resume_connection() raises(ConnectionAlreadyActive, NotConnected); }; // ProxyPullConsumer interface StructuredProxyPullConsumer : ProxyConsumer, CosNotifyComm::StructuredPullConsumer { void connect_structured_pull_supplier (in CosNotifyComm::StructuredPullSupplier pull_supplier) raises(CosEventChannelAdmin::AlreadyConnected, CosEventChannelAdmin::TypeError); void suspend_connection() raises(ConnectionAlreadyInactive, NotConnected); void resume_connection() raises(ConnectionAlreadyActive, NotConnected); }; // StructuredProxyPullConsumer interface SequenceProxyPullConsumer : ProxyConsumer, CosNotifyComm::SequencePullConsumer { void connect_sequence_pull_supplier (in CosNotifyComm::SequencePullSupplier pull_supplier) raises(CosEventChannelAdmin::AlreadyConnected, CosEventChannelAdmin::TypeError); void suspend_connection() raises(ConnectionAlreadyInactive, NotConnected); void resume_connection() raises(ConnectionAlreadyActive, NotConnected); }; // SequenceProxyPullConsumer interface ProxyPushSupplier : ProxySupplier, CosNotifyComm::PushSupplier, CosEventChannelAdmin::ProxyPushSupplier, oe_CosNotificationComm::Event { void connect_any_push_consumer (in CosEventComm::PushConsumer push_consumer) raises(CosEventChannelAdmin::AlreadyConnected, CosEventChannelAdmin::TypeError); void suspend_connection() raises(ConnectionAlreadyInactive, NotConnected); void resume_connection() raises(ConnectionAlreadyActive, NotConnected); }; // ProxyPushSupplier interface StructuredProxyPushSupplier : ProxySupplier, CosNotifyComm::StructuredPushSupplier, oe_CosNotificationComm::Event { void connect_structured_push_consumer (in CosNotifyComm::StructuredPushConsumer push_consumer) raises(CosEventChannelAdmin::AlreadyConnected, CosEventChannelAdmin::TypeError); void suspend_connection() raises(ConnectionAlreadyInactive, NotConnected); void resume_connection() raises(ConnectionAlreadyActive, NotConnected); }; // StructuredProxyPushSupplier interface SequenceProxyPushSupplier : ProxySupplier, CosNotifyComm::SequencePushSupplier, oe_CosNotificationComm::Event { void connect_sequence_push_consumer (in CosNotifyComm::SequencePushConsumer push_consumer) raises(CosEventChannelAdmin::AlreadyConnected, CosEventChannelAdmin::TypeError); void suspend_connection() raises(ConnectionAlreadyInactive, NotConnected); void resume_connection() raises(ConnectionAlreadyActive, NotConnected); }; // SequenceProxyPushSupplier typedef long ProxyID; typedef sequence <ProxyID> ProxyIDSeq; enum ClientType { ANY_EVENT, STRUCTURED_EVENT, SEQUENCE_EVENT}; enum InterFilterGroupOperator { AND_OP, OR_OP }; typedef long AdminID; typedef sequence<AdminID> AdminIDSeq; exception AdminNotFound {}; exception ProxyNotFound {}; struct AdminLimit { CosNotification::PropertyName name; CosNotification::PropertyValue value; }; exception AdminLimitExceeded { AdminLimit admin_property_err; }; interface ConsumerAdmin : CosNotification::QoSAdmin, CosNotifyComm::NotifySubscribe, CosNotifyFilter::FilterAdmin, CosEventChannelAdmin::ConsumerAdmin, oe_CosNotificationComm::Event { readonly attribute AdminID MyID; readonly attribute EventChannel MyChannel; readonly attribute InterFilterGroupOperator MyOperator; attribute CosNotifyFilter::MappingFilter priority_filter; attribute CosNotifyFilter::MappingFilter lifetime_filter; readonly attribute ProxyIDSeq pull_suppliers; readonly attribute ProxyIDSeq push_suppliers; ProxySupplier get_proxy_supplier (in ProxyID proxy_id) raises (ProxyNotFound); ProxySupplier obtain_notification_pull_supplier (in ClientType ctype, out ProxyID proxy_id) raises (AdminLimitExceeded); ProxySupplier obtain_notification_push_supplier (in ClientType ctype, out ProxyID proxy_id) raises (AdminLimitExceeded); void destroy(); }; // ConsumerAdmin interface SupplierAdmin : CosNotification::QoSAdmin, CosNotifyComm::NotifyPublish, CosNotifyFilter::FilterAdmin, CosEventChannelAdmin::SupplierAdmin , oe_CosNotificationComm::Event { readonly attribute AdminID MyID; readonly attribute EventChannel MyChannel; readonly attribute InterFilterGroupOperator MyOperator; readonly attribute ProxyIDSeq pull_consumers; readonly attribute ProxyIDSeq push_consumers; ProxyConsumer get_proxy_consumer (in ProxyID proxy_id) raises (ProxyNotFound); ProxyConsumer obtain_notification_pull_consumer (in ClientType ctype, out ProxyID proxy_id) raises (AdminLimitExceeded); ProxyConsumer obtain_notification_push_consumer (in ClientType ctype, out ProxyID proxy_id) raises (AdminLimitExceeded); void destroy(); }; // SupplierAdmin interface EventChannel : CosNotification::QoSAdmin, CosNotification::AdminPropertiesAdmin, CosEventChannelAdmin::EventChannel, oe_CosNotificationComm::Event { readonly attribute EventChannelFactory MyFactory; readonly attribute ConsumerAdmin default_consumer_admin; readonly attribute SupplierAdmin default_supplier_admin; readonly attribute CosNotifyFilter::FilterFactory default_filter_factory; ConsumerAdmin new_for_consumers(in InterFilterGroupOperator op, out AdminID id); SupplierAdmin new_for_suppliers(in InterFilterGroupOperator op, out AdminID id); ConsumerAdmin get_consumeradmin (in AdminID id) raises (AdminNotFound); SupplierAdmin get_supplieradmin (in AdminID id) raises (AdminNotFound); AdminIDSeq get_all_consumeradmins(); AdminIDSeq get_all_supplieradmins(); }; // EventChannel typedef long ChannelID; typedef sequence<ChannelID> ChannelIDSeq; exception ChannelNotFound {}; interface EventChannelFactory { EventChannel create_channel (in CosNotification::QoSProperties initial_qos, in CosNotification::AdminProperties initial_admin, out ChannelID id) raises(CosNotification::UnsupportedQoS, CosNotification::UnsupportedAdmin); ChannelIDSeq get_all_channels(); EventChannel get_event_channel (in ChannelID id) raises (ChannelNotFound); }; // EventChannelFactory }; // CosNotifyChannelAdmin #endif /* ifndef _COS_NOTIFYCHANNELADMIN_IDL_ */