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  }