Hitachi

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


付録B.4 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,
390                 recvdata, &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, comdata, 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  }