📄 cadt.cpre
字号:
/* * This is a part of the Application Preconsole * - Channel Access - DT. * Copyright (C) 2000-2000 ABC.SDC. * All rights reserved. * * This source code is only intended as a supplement to the * Application Preconsole Reference and related * electronic documentation provided with the library. * See these sources for detailed information regarding the * Application Preconsole product. * * Update record: * 2001-08-12 R.Cao - create implementation file for * DT service */#include "ap.h"#include "dt.h"typedef struct tagDTIASTRU{ char szReqId[8 + 1]; char szReqSeqNo[12 + 1]; char szTransCode[4 + 1]; char szAccNo[19 + 1]; char szAccPwd[6 + 1]; char szPhoneNo[11 + 1]; char szCollectMon[6 + 1]; char szAmt[19 + 1];} DTIASTRU;typedef DTIASTRU * PDTIASTRU;typedef const DTIASTRU CDTIASTRU;typedef const DTIASTRU * PCDTIASTRU;typedef struct tagDTOASTRU{ char szRespCode[4 + 1]; char szBal[19 + 1]; char szPhoneCost[19 + 1];} DTOASTRU;typedef DTOASTRU * PDTOASTRU;typedef const DTOASTRU CDTOASTRU;typedef const DTOASTRU * PCDTOASTRU;/* * ASSURE宏用以处理程序中发生的异常。为适用于各个阶段的异常处理,该 * 宏对整个处理过程中可能分配的资源都进行清理。 */#define ASSURE(b) \ { \ if (!VERIFY(b)) \ { \ if (nListenSock > 0) \ close(nListenSock); \ if (nSock > 0) \ close(nSock); \ return EXCEPTION; \ } \ }#define ASSURE_NORMAL(r) \ { \ RESULT rTemp = (r); \ if (!VERIFY_NORMAL(rTemp)) \ { \ if (nListenSock > 0) \ close(nListenSock); \ if (nSock > 0) \ close(nSock); \ return rTemp; \ } \ }BOOL bShutdown = FALSE;RESULT main(){ UINT nListenSock = 0, nSock = 0; UINT nSize; pid_t _pid_tChild; TIASTRU tiastru; TOASTRU toastru; DTIASTRU dtiastru; DTOASTRU dtoastru; char szProg[8 + 1] = "CADT"; memset(&tiastru, 0, sizeof(TIASTRU)); memset(&toastru, 0, sizeof(TOASTRU)); memset(&dtiastru, 0, sizeof(DTIASTRU)); memset(&dtoastru, 0, sizeof(DTOASTRU)); PrintLog(stdout, "dtservice: service is starting..."); ASSURE_NORMAL(InitServer()) /* * 建立监听套接字。 */ PrintLog(stdout, "dtservice: create listen socket..."); ASSURE_NORMAL(CreateSock(&nListenSock, 2222, 8)) PrintLog(stdout, "dtservice: service is activated."); while (!bShutdown) { if (!VERIFY_NORMAL(AcceptSock(&nSock, nListenSock))) continue; /* * 复制进程, 父进程继续监视TCP 套接字,子进程进行执行交易。 */ VERIFY((_pid_tChild = fork()) >= 0); if (_pid_tChild > 0) { close(nSock); nSock = 0; continue; } break; } close(nListenSock); nListenSock = 0; /* * 从TCP 套接字中读取DTIA。 */ nSize = sizeof(DTIASTRU); ASSURE_NORMAL(ReadFile(nSock, &dtiastru, &nSize)) ASSURE(nSize == sizeof(DTIASTRU)) nSize = 2; ASSURE_NORMAL(ReadFile(nSock, szProg + 4, &nSize)) ASSURE(nSize == 2) strcpy(tiastru.szReqId, dtiastru.szReqId); strcpy(tiastru.szReqSeqNo, dtiastru.szReqSeqNo); strcpy(tiastru.szTransCode, dtiastru.szTransCode); strcpy(tiastru.szAccNo, dtiastru.szAccNo); strcpy(tiastru.szAccPwd, dtiastru.szAccPwd); strcpy(tiastru.szPhoneNo, dtiastru.szPhoneNo); strcpy(tiastru.szCollectMon, dtiastru.szCollectMon); tiastru.dAmt = atof(dtiastru.szAmt); strcpy(toastru.szRespCode, AP_RESPCODE_SYSERR); if (VERIFY_NORMAL(CallCics("AP00", "APUSER", "APUSER", szProg, "CPMI", &tiastru, sizeof(TIASTRU)))) memcpy(&toastru, &tiastru, sizeof(TOASTRU)); strcpy(dtoastru.szRespCode, toastru.szRespCode); sprintf(dtoastru.szBal, "%19.2lf", toastru.dBal); sprintf(dtoastru.szPhoneCost, "%19.2lf", toastru.dPhoneCost); ASSURE_NORMAL(WriteFile(nSock, &dtoastru, sizeof(DTOASTRU))) close(nSock); nSock = 0; return NORMAL;}/* End of this file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -