Hitachi

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


7.3.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  }