cissend.cpp
来自「液晶电视完整代码可实现人机界面」· C++ 代码 · 共 189 行
CPP
189 行
/*******************************************************************************函数说明:从send_data表获取发送报文生成报文文件到mqout/realout目录**版本号 |修改时间 |修改说明********************************************************************************/#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <sys/time.h>#include <dirent.h>#include <unistd.h>#include "MbToCis.h"#include "CisPub.hpp"/////////////////////////////////////////全局变量SybServer m_clsSybServer;BepsPub sCis;int SaveCisData( RECVDATA *sRecvData, char *retMsg );//连接数据库int connectToDB( char *dbname , char *username , char *passwd , char *wkname){ if(!m_clsSybServer.Open(dbname,username ,passwd)) { filelog(ERRLOG,"连接数据库[%s][%s][%s]失败!\n",dbname,username,passwd); return -1; } filelog(STEP,"连接数据库[%s][%s][%s]成功!\n",dbname,username,passwd); if(!m_clsSybServer.SetWrkDb(wkname)) { filelog(ERRLOG,"切换数据库[%s]失败!\n" , wkname); return -1; } filelog(STEP,"切换数据库[%s]成功\n" , wkname); return 0;}//断开数据库连接int disConnectToDB(){ m_clsSybServer.Close(); filelog(STEP,"断开数据库连接!\n"); return 0;}//程序入口void main(int argc, char* argv[]){ //显示其版本号 if(argc == 2 && (memcmp(argv[1], "-v", 2)==0||memcmp(argv[1], "-V", 2)==0)) { printf("System verison is: Direct CIS CISProc V1.1\n"); exit(0); } //使主进程成为守护进程 pid_t main_pid =0; main_pid = fork(); if(0!= main_pid) { exit(0); } int ret; char doflag[1+1],filename[100]; char CisNo[3+1]; char retMsg[255+1]; char Password[20]; RECVDATA sRecvData; memset( doflag , 0 , sizeof( doflag)); memset( CisNo , 0 , sizeof( CisNo )); memset( &sRecvData , 0 , sizeof( sRecvData )); memset( retMsg , 0 , sizeof( retMsg )); memset( Password , 0 , sizeof( Password )); sprintf( Password , "%s", getenv("PASSWORD")); char DBUserName[10]; memset( DBUserName , 0 , sizeof(DBUserName)); strcpy( DBUserName , getenv("DBUSERNAME")); StrTrim(DBUserName , ' '); if( strlen( DBUserName ) == 0 ) { strcpy( DBUserName , "sa"); } printf("DBUserName = [%s]\n", DBUserName); ret = connectToDB( "SYBASE" , DBUserName , Password , "DIRWAYSDB"); if( ret != 0 ) { filelog(ERRLOG,"连接数据库失败!\n"); printf("连接数据库失败!\n"); return ; }/*版本授权 int flag = 0; ret = sCis.CheckSerail(&flag); if( flag != 0) { printf("system not permission exit!\n"); exit(0); }*/ while(1) { //从消息中间件获取来帐报文 memset( filename , 0 ,sizeof( filename )); memset( &sRecvData , 0 , sizeof( sRecvData)); //从数据库获取待发送报文 ret = sCis.GetCisSendInfo( &sRecvData, "0"); if( ret == 0 ) { printf("无待处理发送报文......\n"); sleep(1); continue; } printf("Have get sendinfo = [%s]\n", sRecvData.msgcontent); memcpy( CisNo, sRecvData.msgid+3, 3 ); //保存发送报文到提出文件夹 ret = SaveCisData( &sRecvData, retMsg ); if( ret != 0 ) { //修改recv_data处理状态位 strcpy( doflag, "3" ); printf("解析报文[%s]出错:%s\n", sRecvData.msgid, retMsg); filelog(ERRLOG, "解析报文[%s]出错:%s\n", sRecvData.msgid, retMsg); } else strcpy( doflag, "1" ); //更改接收报文队列表报文处理状态 ret = sCis.SetDoflag( "send_data",&sRecvData.dataidx, doflag, retMsg ); if( ret < 0 ) { printf("更改报文[%s]处理状态失败:%s\n", sRecvData.msgid,retMsg ); filelog(ERRLOG, "更改报文[%s]处理状态失败:%s\n", sRecvData.msgid,retMsg ); } filelog(CISPROLOG, SIGNLIMIT); } return;}//保存发送报文到提出文件夹int SaveCisData( RECVDATA *sRecvData, char *retMsg ){ char filename[100]; FILE *fp = NULL; int ret = 0; char TmpData[500*1024]; memset( filename , 0 , sizeof(filename)); if( strncmp( sRecvData->msgid , "CIS401", 6) == 0|| strncmp( sRecvData->msgid , "CIS403", 6) == 0 ) sprintf( filename , "%s/realout/%03s%08s%08d",getenv("WORKDIR"),sRecvData->msgid+3,sRecvData->workdate,sRecvData->dataidx); else sprintf( filename , "%s/mqout/%03s%08s%08d",getenv("WORKDIR"),sRecvData->msgid+3,sRecvData->workdate,sRecvData->dataidx); printf("Create out filename = [%s]\n", filename ); fp = fopen( filename , "w+"); if( fp == NULL ) { printf("SaveCisData[Creatfile] error!\n"); strcpy( retMsg , "001SaveCisData[Creatfile] error!"); fclose(fp); return -1; } memset( TmpData , 0 , sizeof( TmpData)); sprintf( TmpData,"C%s",sRecvData->msgcontent); ret = fwrite( TmpData,strlen(TmpData) , 1,fp); if( ret < 0 ) { printf("SaveCisData[WriteFile] error!\n"); strcpy( retMsg , "001SaveCisData[WriteFile] error!"); fclose(fp); return -1; } fclose(fp); strcpy( retMsg , "000SaveCisData success!"); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?