Interstage Application Server アプリケーション作成ガイド (イベントサービス編) |
目次
索引
![]() ![]() |
第6章 アプリケーションの開発(C++言語) |
C++言語でのMixedモデルのアプリケーションの開発について説明します。
MixedモデルはPushモデルとPullモデルの2つの通信モデルを使用します。サプライヤはイベントチャネルにイベントデータを送信し、コンシューマはイベントチャネルにイベントデータを要求します。その概要を以下に示します。
サプライヤはイベントチャネルにイベントデータを送信します。Pushモデルのサプライヤと同様のインタフェースを使用します。サプライヤからコンシューマにイベントデータを送信する処理の概要と流れを以下に説明します。
[C++言語によるMixedモデルのサプライヤ]
CORBA::Boolean func() { ... try { supplier = EventCh->for_suppliers( env ); /* 1 */ proxy_push = supplier->obtain_push_consumer( env ); /* 2 */ proxy_push->connect_push_supplier(CORBA_OBJECT_NIL, env); /* 3 */ proxy_push->push( data, env ); /* 4 */ proxy_push->disconnect_push_consumer( env ); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
[C++言語によるMixedモデル(StructuredEvent型)のサプライヤ]
CORBA::Boolean func() { ... try { supplier = EventCh->default_supplier_admin( env ); /* 1 */ tmp_proxy = supplier->obtain_notification_push_consumer (ctype,proxy_id, env ); /* 2 */ proxy_push = CosNotifyChannelAdmin:: StructuredProxyPushConsumer::_narrow( tmp_proxy ); proxy_push->connect_structured_push_supplier (CosNotifyComm::StructuredPushSupplier::_nil(),env); /* 3 */ proxy_push->push_structured_event(data,env); /* 4 */ proxy_push->disconnect_structured_push_consumer(env); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
[C++言語によるMixedモデル(any型)のサプライヤ]
CORBA::Boolean func() { ... try { supplier = EventCh->default_supplier_admin( env ); /* 1 */ tmp_proxy = supplier->obtain_notification_push_consumer (ctype,proxy_id, env ); /* 2 */ proxy_push = CosNotifyChannelAdmin:: ProxyPushConsumer::_narrow( tmp_proxy ); proxy_push->connect_any_push_supplier (CosEventComm::PushSupplier::_nil(),env); /* 3 */ proxy_push->push(data,env); /* 4 */ proxy_push->disconnect_push_consumer(env); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
コンシューマはイベントチャネルにイベントデータを要求します。Pullモデルのコンシューマと同様のインタフェースを使用します。コンシューマがイベントチャネルにイベントデータを要求する手続き例と処理の流れを以下に説明します。
[C++言語によるMixedモデルのコンシューマ]
CORBA::Boolean func() { ... try { consumer = EventCh->for_consumers( env ); /* 1 */ proxy_pull = consumer->obtain_pull_supplier( env ); /* 2 */ proxy_pull->connect_pull_consumer(CORBA_OBJECT_NIL, env); /* 3 */ data = proxy_pull->pull( env ); /* 4 */ proxy_pull->disconnect_pull_supplier( env ); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
[C++言語によるMixedモデル(StructuredEvent型)のコンシューマ]
CORBA::Boolean func() { ... try { consumer = EventCh->default_consumer_admin( env ); /* 1 */ tmp_proxy = consumer->obtain_notification_pull_supplier (ctype,proxy_id,env); /* 2 */ proxy_pull = CosNotifyChannelAdmin:: StructuredProxyPullSupplier::_narrow( tmp_proxy ); proxy_pull->connect_structured_pull_consumer (CosNotifyComm::StructuredPullConsumer::_nil(),env); /* 3 */ data = proxy_pull->pull_structured_event(env); /* 4 */ proxy_pull->disconnect_structured_pull_supplier(env); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
[C++言語によるMixedモデル(any型)のコンシューマ]
CORBA::Boolean func() { ... try { consumer = EventCh->default_consumer_admin( env ); /* 1 */ tmp_proxy = consumer->obtain_notification_pull_supplier (ctype,proxy_id,env); /* 2 */ proxy_pull = CosNotifyChannelAdmin:: ProxyPullSupplier::_narrow( tmp_proxy ); proxy_pull->connect_any_pull_consumer (CosEventComm::PullConsumer::_nil(),env); /* 3 */ data = proxy_pull->pull(env); /* 4 */ proxy_pull->disconnect_pull_supplier(env); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
目次
索引
![]() ![]() |