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 + -
显示快捷键?