6.2.4 例: TPNOTRANフラグを設定した同期メッセージの送信

次のリストは、トランザクション・モードではない通信呼出しを示しています。この呼出しは、リソース・マネージャに関連していないサービスに対して実行され、サービスがトランザクションに参加するとエラーになります。アプリケーションは、accountsという名前のデータベースから取得した情報に基づいて生成された売掛金勘定レポートaccrcvを出力します。

サービス・ルーチンREPORTは指定されたパラメータを解釈し、完了したレポートのバイト・ストリームを応答として送信します。クライアントは、tpcall()を使用してPRINTERサービスにバイト・ストリームを送信します。PRINTERは、クライアントに近いプリンタにバイト・ストリームを送信します。そして、応答が印刷されます。最後に、PRINTERサービスはハードコピーの印刷が終了したことをクライアントに通知します。

ノート: 「TPNOTRANとTPNOREPLYフラグを設定した非同期メッセージの送信」では、同じ例を使用して非同期メッセージの呼出しを行っています。

TPNOTRANフラグを設定した同期メッセージの送信のリスト

#include <stdio.h>
#include "atmi.h"

main()

{
char *rbuf;                            /* report buffer */
long r1len, r2len, r3len;             /* buffer lengths of send, 1st reply,
                                      and 2nd reply buffers for report */ 
join application

if (rbuf = tpalloc("STRING", NULL, 0) == NULL) /* allocate space for report 
*/
    leave application and exit program
(void)strcpy(rbuf,
    "REPORT=accrcv DBNAME=accounts"); /* send parms of report */
r1len = strlen(rbuf)+1;              /* length of request */

start transaction

if (tpcall("REPORT", rbuf, r1len, &rbuf,
   &r2len, 0) == -1)                    /* get report print stream */
   error routine
if (tpcall("PRINTER", rbuf, r2len, &rbuf,
   &r3len, TPNOTRAN) == -1)             /* send report to printer */
   error routine
(void)printf("Report sent to %s printer\n",
rbuf);                                 /* indicate which printer */

terminate transaction
free buffer
leave application
}

ノート:

この例のerror routineは、エラー・メッセージの出力、トランザクションの中止、割り当てられたバッファの解放、クライアントのアプリケーションからの分離、およびプログラムの終了が行われることを示しています。