C++言語でのPushモデルのアプリケーションの開発について説明します。
(1)概要
サプライヤがコンシューマにイベントデータを送信する場合、イベントチャネル上のCosEventChannelAdmin::ProxyPushConsumerに接続指示を出します。この後、イベントチャネルにCosEventChannelAdmin::ProxyPushConsumer::pushメソッドを発行します。イベントチャネルは、ユーザがコンシューマ上に実装するCosEventComm::PushConsumer::pushメソッドを呼び出します。
その概要を以下に示します。
(2)サプライヤの作成
サプライヤからイベントチャネルへイベントデータを送信する手続きの例、および処理の流れを以下に示します。
[C++言語によるPushモデルのサプライヤ]
CORBA::Boolean func() { ... try { supplier = EventCh->for_suppliers( env ); /* 1 */ proxy_push = supplier->obtain_push_consumer( env ); /* 2 */ proxy_push->connect_push_supplier( my_obj, env ); /* 3 */ proxy_push->push( data, env ); /* 4 */ proxy_push->disconnect_push_consumer( env ); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
イベントチャネルにCosEventChannelAdmin::ProxyPushConsumer::pushメソッドを発行します。
イベントチャネルと切断します。
サプライヤからイベントデータを送信するには、以下のメソッドを使用します。引数のdataに、イベントデータを指定して送信します。このCosEventChannelAdmin::ProxyPushConsumerは、CosEventComm::PushConsumerを継承しています。
void CosEventChannelAdmin::ProxyPushConsumer::push( CORBA::Any& data, CORBA::Environment& env );
(3)コンシューマの作成
コンシューマは、イベントチャネルから送信されるイベントデータを受け取るために、CosEventComm_PushConsumer_impl::pushメソッドを実装します。イベントチャネルは、コンシューマ上のCosEventComm::PushConsumer::pushメソッドを呼び出し、コンシューマにイベントデータを送信します。
コンシューマがイベントデータを受け取る例、および処理の流れを以下に示します。
[C++言語によるPushモデルのコンシューマ]
CORBA::Boolean func() { ... try { consumer = EventCh->for_consumers( env ); /* 1 */ proxy_push = consumer->obtain_push_supplier( env ); /* 2 */ proxy_push->connect_push_consumer( my_obj, env ); /* 3 */ } catch( CORBA::Exception &e ) { ... } ... } void CosEventComm_PushConsumer_impl::push( /* 4 */ const CORBA::Any &any_data, CORBA::Environment &env ) throw( CORBA::Exception ) { ... /* アプリケーションの処理 */ ... return; }
イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
ユーザがコンシューマ上に実装するCosEventComm_PushConsumer_impl::pushメソッドです。
注意
コンシューマ側のアプリケーションでは、アプリケーション終了時に、イベントチャネルに対して必ずCosEventChannelAdmin::ProxyPushSupplier::disconnect_push_supplierメソッドを発行してください。イベントチャネルに対してCosEventChannelAdmin::ProxyPushSupplier::disconnect_push_supplierメソッドを発行しないでアプリケーションを終了すると、アプリケーション終了後に再度アプリケーションを起動した場合に、同一のイベントデータが複数個配信されてしまいます。