Interstage Application Server アプリケーション作成ガイド (イベントサービス編)
目次 索引 前ページ次ページ

第5章 アプリケーションの開発(C言語)

5.3 Pullモデル

 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 ); 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. ユーザがサプライヤ上に実装する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 */
      ... 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. イベントチャネルにCosEventChannelAdmin_ProxyPullSupplier_pullメソッドを発行します。
  5. イベントチャネルと切断します。

[ 待ち合わせる場合 ]

 コンシューマはサプライヤからイベントデータを待ち合わせて引き出すには下記のメソッドを使用します。イベントチャネルからイベントデータを取り出し、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 );

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005