分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編

[目次][索引][前へ][次へ]

7.3 メッセージ送受信形態のUAPのコーディング例(MHP)

メッセージ送受信形態のUAPの例を次の図に示します。

図7-3 メッセージ送受信形態のUAPの例(MHP)

[図データ]

ここでは,図に示した構成例のコーディング例を示します。

<この節の構成>
(1) MHPの例(メイン関数)
(2) MHPの例(サービス関数)

(1) MHPの例(メイン関数)

MHPのメイン関数のコーディング例を次に示します。

  10  /*
  20   * MHP メイン関数
  30   */
  40  #include <stdio.h>
  45  #include <stdlib.h>
  50  #include <dcrpc.h>
  60  #include <dcmcf.h>
  70  
  80  main()
  90  {
 100     int rtn_cod ;
 110  
 120     printf("******  RPC OPEN   *****\n") ;
 130  /*
 140   * RPC-OPEN (UAPの開始)
 150   */
 160     rtn_cod = dc_rpc_open(DCNOFLAGS) ;
 170     if(rtn_cod != DC_OK) {
 180       printf("dc_rpc_open 失敗 !! CODE = %d \n", rtn_cod) ;
 190       goto PROG_END ;
 200     }
 210  
 220     printf("******  MCF OPEN   *****\n") ;
 230  /*
 240   * MCF-OPEN (MCF環境のオープン)
 250   */
 260     rtn_cod = dc_mcf_open(DCNOFLAGS) ;
 270     if(rtn_cod != DC_OK) {
 280       printf("dc_mcf_open 失敗 !! CODE = %d \n", rtn_cod) ;
 290       goto PROG_END ;
 300     }
 310  
 320     printf("******  MCF MAINLOOP   *****\n") ;
 330  /*
 340   * MCF-MAINLOOP (MHPサービスの開始)
 350   */
 360     rtn_cod = dc_mcf_mainloop(DCNOFLAGS) ;
 370     if(rtn_cod != DC_OK) {
 380       printf("dc_mcf_mainloop 失敗 !! CODE = %d \n", rtn_cod) ;
 390     }
 400  
 410     printf("******  MCF CLOSE   *****\n") ;
 420  /*
 430   * MCF-CLOSE (MCF環境のクローズ)
 440   */
 450     dc_mcf_close(DCNOFLAGS) ;
 460  
 470  PROG_END :
 480     printf("******  RPC CLOSE   *****\n") ;
 490  /*
 500   * RPC-CLOSE (UAPの終了) 
 510   */
 520     dc_rpc_close(DCNOFLAGS) ;
 530     exit(0) ;
 540  }

(2) MHPの例(サービス関数)

MHPのサービス関数のコーディング例を次に示します。

  10  /*
  20   * MHP サービス関数
  30   */
  40  #include <stdio.h>
  50  #include <sys/types.h>
  60  #include <dcmcf.h>
  70  #include <dcrpc.h>
  80  
  90  void svrA() 
 100  {
 110       DCLONG action ;
 120       DCLONG commform ;
 130       DCLONG opcd ;
 140       DCLONG active ;
 150       char recvdata[1024] ;
 160       DCLONG rdataleng ;
 170       DCLONG time ;
 180       DCLONG inbufleng ;
 190       int  rtn_cod ;
 200       DCLONG cdataleng ;
 210       char termnam[10] ;
 220       static char execdata[32] = "        SVRA EXECAP DATA" ;
 230       static char senddata[32] = "        SVRA REPLY DATA1" ;
 240       static char resv01[9] = "\0" ;
 250       static char resv02[9] = "\0" ;
 260       static char resv03[9] = "\0" ;
 270       static char apnam[9] = "aprepB" ;
 280  
 290       printf("*****   UAP START   *****\n") ;
 300  
 310       printf("*****   MCF RECEIVE   *****\n") ;
 320  /*
 330   * MCF-RECEIVE (メッセージの受信)
 340   */
 350       action = DCMCFFRST ; 
 360       commform = DCNOFLAGS ;
 370       inbufleng = sizeof(recvdata) ;
 380       rtn_cod = dc_mcf_receive(action, commform, termnam, resv01, recvdata,
 390                  &rdataleng, inbufleng, &time) ;
 400       if(rtn_cod != DCMCFRTN_00000) {
 410  /*
 420   * MCF-ROLLBACK (エラー処理)
 430   */
 440       printf("dc_mcf_receive 失敗 !! CODE = %d \n", rtn_cod) ;
 450       rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
 460       }
 470  
 480       printf("*****   MCF EXECAP   *****\n") ;
 490  /*
 500   * MCF-EXECAP (アプリケーションプログラム起動)
 510   */
 520       action = DCMCFEMI|DCMCFJUST ;
 530       commform = DCNOFLAGS ;
 540       active = 0 ;
 550       cdataleng = 16 ;
 560       rtn_cod = dc_mcf_execap(action, commform, resv01, active,
 570                 apnam, execdata, cdataleng) ;
 580       if(rtn_cod != DCMCFRTN_00000) {
 590  /*
 600   * MCF-ROLLBACK (エラー処理)
 610   */
 620       printf("dc_mcf_execap 失敗 !! CODE = %d \n", rtn_cod) ;
 630       rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
 640       }
 650  
 660       printf("*****   MCF REPLY   *****\n") ;
 670  /*
 680   * MCF-REPLY (応答メッセージの送信)
 690   */
 700       action = DCMCFEMI ;
 710       commform = DCNOFLAGS ;
 720       opcd = DCNOFLAGS ;
 730       cdataleng = 16 ;
 740       rtn_cod = dc_mcf_reply(action, commform, resv01, resv02, 
 750                senddata, cdataleng, resv03, opcd) ;
 760       if(rtn_cod != DCMCFRTN_00000) {
 770  /*
 780   * MCF-ROLLBACK (エラー処理)
 790   */
 800       printf("dc_mcf_reply 失敗 !! CODE = %d \n", rtn_cod) ;
 810       rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
 820       }
 830  }