Interstage Application Server アプリケーション作成ガイド (イベントサービス編) |
目次
索引
![]() ![]() |
第6章 アプリケーションの開発(C++言語) |
C++言語でのPullモデルのアプリケーションの開発について説明します。
イベントチャネル上のコンシューマがサプライヤからイベントデータを受信する場合、イベントチャネルのCosEventChannelAdmin::ProxyPullSupplierに接続指示を出します。イベントチャネルは、ユーザがサプライヤに実装したCosEventComm::PullSupplier::pull(またはtry_pull)メソッドを呼び出します。その概要を以下に示します。
サプライヤはイベントチャネルからイベントデータの要求を受け取るために、CosEventComm_PullSupplier_impl::pullメソッドを実装します。イベントチャネルはサプライヤ上のCosEventComm::PullSupplier::pullメソッドを呼び出し、サプライヤにイベントデータを要求します。その手続き例と処理の流れを以下に説明します。
[C++言語によるPullモデルのサプライヤ]
CORBA::Boolean func() { ... try { supplier = EventCh->for_suppliers( env ); /* 1 */ proxy_pull = supplier->obtain_pull_consumer( env ); /* 2 */ proxy_pull->connect_pull_supplier( my_obj, env ); /* 3 */ } catch( CORBA::Exception &e ) { ... } ... } CORBA::Any * CosEventComm_PullSupplier_impl::pull( /* 4 */ CORBA::Environment &env ) throw( CORBA::Exception ) { CORBA::Any *any_data; /* アプリケーションの処理 */ ... return( any_data ); }
コンシューマからイベントチャネルにイベントデータを要求する手続き例と処理の流れを以下に説明します。
[C++言語によるPullモデルのコンシューマ]
CORBA::Boolean func() { ... try { consumer = EventCh->for_consumers( env ); /* 1 */ proxy_pull = consumer->obtain_pull_supplier( env ); /* 2 */ proxy_pull->connect_pull_consumer( my_obj, env ); /* 3 */ data = proxy_pull->pull( env ); /* 4 */ proxy_pull->disconnect_pull_supplier( env ); /* 5 */ } catch( CORBA::Exception &e ) { ... } ... }
コンシューマはサプライヤからイベントデータを待ち合わせて引き出すには下記のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA::Any型のreturn値を返します。イベントチャネルからイベントデータの取り出しが可能になるか、または例外が発生するまでブロックされます。CosEventChannelAdmin::ProxyPullSupplierはCosEventComm::PullSupplierを継承しています。
CORBA::Any *CosEventChannelAdmin::ProxyPullSupplier::pull( CORBA::Environment& env );
コンシューマはサプライヤからイベントデータを待ち合わせないで引き出すには下記のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA::Any型のreturn値を返します。イベントチャネルからイベントデータが取り出せない場合は即座に復帰します。イベントデータが取り出せた場合は、has_eventにCORBA_TRUEが設定されます。イベントデータが取り出せなかった場合はhas_eventにCORBA_FALSEが設定されます。CosEventChannelAdmin::ProxyPullSupplierはCosEventComm::PullSupplierを継承しています。
CORBA::Any *CosEventChannelAdmin::ProxyPullSupplier::try_pull( CORBA::Boolean& has_event, CORBA::Environment& env );
目次
索引
![]() ![]() |