C言語でのPullモデルのアプリケーションの開発について説明します。
(1)概要
コンシューマがサプライヤからイベントデータを受信する場合、イベントチャネル上のCosEventChannelAdmin_ProxyPullSupplier_pullメソッドを呼び出します。イベントチャネルは、ユーザがサプライヤ上に作成したserver_CosEventComm_PullSupplier_pullメソッドを呼び出します。
本概要を以下の図に示します。

(2)サプライヤの作成
サプライヤは、イベントチャネルからイベントデータの要求を受け取るために、server_CosEventComm_PullSupplier_pullメソッドを実装します。イベントチャネルは、サプライヤ上のserver_CosEventComm_PullSupplier_pullメソッドを呼び出し、サプライヤにイベントデータを要求します。
サプライヤのserver_CosEventComm_PullSupplier_pullメソッドを実装するまでの手続きの例、および処理の流れを以下に示します。
[C言語によるPullモデルのサプライヤ]
CORBA_Boolean func() {
...
supplier = CosEventChannelAdmin_EventChannel_for_suppliers(
object, &env ); /* 1 */
proxy_pull = CosEventChannelAdmin_SupplierAdmin_obtain_pull_consumer(
supplier, &env ); /* 2 */
CosEventChannelAdmin_ProxyPullConsumer_connect_pull_supplier(
proxy_pull, my_obj, &env ); /* 3 */
...
}
CORBA_any *
server_CosEventComm_PullSupplier_pull( /* 4 */
CosEventComm_PullSupplier obj,
CORBA_Environment *env ) {
...
/* アプリケーションの処理 */
...
return( any_data );
}イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
ユーザがサプライヤ上に実装するserver_CosEventComm_PullSupplier_pullメソッドです。
(3)コンシューマの作成
コンシューマからイベントチャネルにイベントデータを要求する手続きの例、および処理の流れを以下に示します。
[C言語によるPullモデルのコンシューマ]
CORBA_Boolean func() {
...
consumer = CosEventChannelAdmin_EventChannel_for_consumers(
object, &env ); /* 1 */
proxy_pull = CosEventChannelAdmin_ConsumerAdmin_obtain_pull_supplier(
consumer, &env ); /* 2 */
CosEventChannelAdmin_ProxyPullSupplier_connect_pull_consumer(
proxy_pull, my_obj, &env ); /* 3 */
data = CosEventChannelAdmin_ProxyPullSupplier_pull(
proxy_pull, &env ); /* 4 */
CosEventChannelAdmin_ProxyPullConsumer_disconnect_pull_supplier(
proxy_pull, &env ); /* 5 */
...
}イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
イベントチャネルにCosEventChannelAdmin_ProxyPullSupplier_pullメソッドを発行します。
イベントチャネルと切断します。
[待ち合わせる場合]
コンシューマは、サプライヤからイベントデータを待ち合わせて引き出すには、以下のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA_any型の復帰値を返します。イベントチャネルからイベントデータが取り出せるようになるか、または例外が発生するまでブロックされます。CosEventChannelAdmin_ProxyPullSupplierは、CosEventComm_PullSupplierを継承しています。
CORBA_any *CosEventChannelAdmin_ProxyPullSupplier_pull(
CosEventChannelAdmin_ProxyPullSupplier obj,
CORBA_Environment *env );[待ち合わせない場合]
コンシューマは、サプライヤからイベントデータを待ち合わせないで引き出すには、以下のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA_any型の復帰値を返します。イベントチャネルからイベントデータを取り出せない場合は、即座に復帰します。イベントデータが取り出せた場合は、has_eventにCORBA_TRUEが設定されます。イベントデータを取り出せなかった場合は、has_eventにCORBA_FALSEが設定されます。CosEventChannelAdmin_ProxyPullSupplierは、CosEventComm_PullSupplierを継承しています。
CORBA_any *CosEventChannelAdmin_ProxyPullSupplier_try_pull(
CosEventChannelAdmin_ProxyPullSupplier obj,
CORBA_Boolean *has_event,
CORBA_Environment *env );