⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cistomb.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "CisPub.hpp"#include "Com_lzser.h"#include "Com_wzser.h"/*******************************************************************************      CisServer.bin的功能说明**      多进程管理**      接收从柜台发来的业务*****************************************************************************/#ifndef BOOL#endif#ifndef TRUE        #define TRUE 1#endif//全局数据tagMyGlobe *myglobe = new tagMyGlobe;ComSocket_wzSer *comSendSocket;BepsPub sBepsPub;SybServer m_clsSybServer;int     StrTrimChar( char *in_data ,char c){        int i,j = 0;        char tmp[1024];        memset(tmp,0,sizeof(tmp));        for(i = 0;i < strlen(in_data);i++)        {                if(in_data[i] != c)                        tmp[j++] = in_data[i];        }	strcpy( in_data , tmp);        return TRUE;}///////////////////////////////////      主函数int 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 CISInterworkMB CisToMb V002R003C010\n");        exit(0);    }        //使主进程成为守护进程    pid_t main_pid =0;    main_pid = fork();    if(0 != main_pid)    {    	exit(0);    }        printf("System verison is: Direct CISInterworkMB CisToMb V002R003C010\n");    printf("System init ......\n");    filelog(CIS_INTER_MB, "==============================[CisToMb]==============================\n" );        //调用初始全局数据函数    int iRetval;    ComSocket_wzSer comSend;     comSendSocket = &comSend;    if(!InitGlobeData())    {	filelog(CIS_INTER_MB, "[CisToMb] 初始全局失败,程序退出\n" );        printf( "[CISInterworkMB.bin] 初始全局失败,程序退出" );        exit (-1);    }           iRetval = comSendSocket->Open();    if(iRetval != 0)    {	filelog(CIS_INTER_MB, "[CisToMb]打开发送通讯端口失败, 程序退出\n");        printf( "[CISInterworkMB.bin]打开发送通讯端口失败, 程序退出");        exit(-1);    }        //连接数据库    char Password[20];    memset( Password , 0 , sizeof( Password ));    strcpy( Password , getenv("PASSWORD"));    char DBUserName[10];    memset( DBUserName , 0 , sizeof(DBUserName));    strcpy( DBUserName , getenv("DBUSERNAME"));    StrTrimChar(DBUserName, ' ');    if( strlen( DBUserName ) == 0 )    {		strcpy( DBUserName , "sa");    }    printf("DBUserName = [%s]\n", DBUserName );    int ret = connectToDB( "SYBASE" , DBUserName , Password , "DIRWAYSDB");    if( ret != 0 )    {        printf( "[CISInterworkMB.bin]连接数据库失败, 程序退出");	filelog(CIS_INTER_MB, "[CisToMb]连接数据库失败, 程序退出\n");        exit(-1);    }	filelog(CIS_INTER_MB, "[CisToMb]连接数据库成功!\n");    //初始化本地成员    char  sResDesc[MAX_MBFE_BUFFER];    char  RecvBuf[MAXBUFF];    int   RecvBufLen = 0, SendBufLen = 0;//    char  TrNo[7];    int   RetCode = 0;    char *RetMsg = 0;    char msgData[MAX_MBFE_BUFFER];    char fixData[MAX_MBFE_BUFFER];    char pkgData[MAX_MBFE_BUFFER];    char msgContent[MAX_MBFE_BUFFER];    char msgId[6+1];    int dataIdx=0;	    RetMsg = ( char *)malloc(100*sizeof(char));    memset(RecvBuf, 0, MAXBUFF*sizeof(char));    memset(RetMsg, 0, 100*sizeof(char));    memset(msgData, 0, MAX_MBFE_BUFFER);    memset(msgContent, 0, MAX_MBFE_BUFFER);    memset(fixData, 0, MAX_MBFE_BUFFER);    memset(pkgData, 0, MAX_MBFE_BUFFER);    memset(msgId, 0, sizeof(msgId));        while(1) //开始服务    {        if(0 != comSendSocket->Service())        {		printf("通讯程序Service出错\n");		filelog(CIS_INTER_MB, "[CisToMb]通讯程序Service出错\n");		errlog( "File==>[%s],Line==>[%d]\n进程[CisToMb.cpp]通讯程序Service出错", __FILE__, __LINE__);			comSendSocket->Close();		continue;        }                    dataIdx=0;            memset(msgData,    0,    sizeof(msgData));            memset(fixData,    0,    sizeof(fixData));            memset(msgContent, 0,    sizeof(msgContent));            memset(pkgData,    0,    sizeof(pkgData));            memset(sResDesc,   0,    sizeof(sResDesc));            memset(msgId,      0,    sizeof(msgId));            memset(RecvBuf,    0,    sizeof(RecvBuf));            memset(RetMsg,     0,    100*sizeof(char));            //获取要发送到内行的来报业务            if(FALSE==sBepsPub.GetSendMBData(msgData, msgId, &dataIdx))            {                sleep(1);                continue;            }                        printf("现在处理报文[%d][%s]发送行内\n", dataIdx, msgId);            filelog(CIS_INTER_MB, "[CisToMb]现在处理报文[%d][%s]发送行内\n", dataIdx, msgId);            /*            if(FALSE==sBepsPub.GetMsgContent(msgData, msgContent))            {                printf("报文内容非法\n");                sBepsPub.UpdSendMBDate(PROCESS_FAILED, &dataIdx);                continue;            }*/            //人行格转换成行内格式            if(0!=sBepsPub.DataChange(msgId, msgData, fixData, CNAPS))            {                printf("TAG格式转换成FIXED格式失败\n");            	filelog(CIS_INTER_MB, "[CisToMb]TAG格式转换成FIXED格式失败![%s][%s]\n", msgId, msgData);                sBepsPub.UpdSendMBDate(PROCESS_FAILED, &dataIdx);                continue;            }		if( strncmp( msgId , "CIS601" , 6 ) == 0 )		{			char *Begin = NULL;			char *End = NULL;			char Tmp[28*1024];			memset( Tmp , 0 , sizeof(Tmp));			Begin = strstr( msgData , ":D89:");			End = strstr( Begin , "}");			memcpy( Tmp , Begin + 5 , End - Begin - 5);			printf("D89 = [%s]\n", Tmp );			filelog("CIS601", "D89=[%d][%s]", strlen(Tmp), Tmp);			strcat( fixData , Tmp );		}printf( "msgData:[%s]\n", msgData );           printf( "fixData:[%s]\n", fixData );			            //拼写报文类型和报文内容发送到行内            strcpy(sResDesc, msgId);#if 0             //对于截留业务报文进行重构成PKG002报文            if(0==strcmp(msgId, "CIS100") || 0==strcmp(msgId, "CIS101"))            {                                  	                TCnapsTagMML *pMml = NULL;                pMml = new TCnapsTagMML();                if(NULL == pMml)                {                    filelog(CIS_INTER_MB, "Error:allocate memory failed");                    comSendSocket->msocket_id = -1;                    comSendSocket->Close();                    sBepsPub.UpdSendMBDate(PROCESS_FAILED, &dataIdx);                    exit(-1);                }                if(FALSE==sBepsPub.ParserTagToFix(msgId, msgContent, fixData, pMml))                {                    sBepsPub.UpdSendMBDate(PROCESS_FAILED, &dataIdx);                    printf("截留业务TAG转换成FIX失败");                    delete pMml;                    continue;                }                delete pMml;                                filelog(CIS_INTER_MB, "Parser TAG data=[%d][%s]", strlen(msgContent), msgContent);                filelog(CIS_INTER_MB, "Parser FIX data=[%d][%s]", strlen(fixData), fixData);                                if(FALSE==sBepsPub.FormatMsg(msgId, fixData, pkgData, sResDesc))                {                    sBepsPub.UpdSendMBDate(PROCESS_FAILED, &dataIdx);                    printf("重构截留业务失败:[%s]", sResDesc);                    continue;                }                strcat(sResDesc, pkgData);            }            else            {                   strcat(sResDesc, fixData);            }#endif                                 strcat(sResDesc, fixData);            SendBufLen = strlen(sResDesc);			            //确认消息长度大于报文类型的长度            if(SendBufLen>6)            {                //发送报文到行内                iRetval = comSendSocket->Send(sResDesc,NULL,SendBufLen, &RetCode,RetMsg);                if ( iRetval != 0 )                {                    filelog(CIS_INTER_MB, "[CisToMb]Send data failed and close socket!");                    printf("Send data failed and close socket!\n");                    comSendSocket->msocket_id = -1;                    comSendSocket->Close();                    sBepsPub.UpdSendMBDate(PROCESS_FAILED, &dataIdx);                    continue;                }                filelog(CIS_INTER_MB, "[CisToMb]sResDesc=[%d][%s]", strlen(sResDesc), sResDesc);		/*报文处理成功更新标识*/		printf("\r\n 报文处理成功更新标识");                if(FALSE==sBepsPub.UpdSendMBDate(PROCESS_SUCCESS, &dataIdx, sResDesc))                {			filelog(CIS_INTER_MB, "[CisToMb]Error:update doflag failed in file=[%d][%s]", __LINE__, __FILE__);			comSendSocket->msocket_id = -1;			comSendSocket->Close();        		disConnectToDB();			exit(-1);                }                filelog(CIS_INTER_MB, "[CisToMb]Success process filein message");            }        sleep(1);    }}//子进程的处理函数//设置SOCKET为非阻塞方式//int flag = fcntl(pMsSoket->connfd, F_GETFL, 0);//fcntl(pMsSoket->connfd, F_SETFL, O_NONBLOCK|flag);/*void ChildProcess(){	filelog(CIS_INTER_MB, "Create process and accept client!");    //开始子进程的具体处理	ComSocket_wzSer *pMsSoket = NULL;	pMsSoket = new ComSocket_wzSer;	if(NULL == pMsSoket)	{		errlog( "[CisServer.bin] 分配空间失败!");		exit(-1);	}		//保存主进程当时接收的客户端的IP和套接字	pMsSoket->connfd = comSocket->connfd;	memcpy(pMsSoket->clientIp, comSocket->clientIp, strlen(comSocket->clientIp));	int fd = pMsSoket->connfd;    memcpy(sBepsPub.m_UserIpAddr, comSocket->clientIp, strlen(comSocket->clientIp));	fd_set rfds;	timeval timeout;    timeout.tv_sec = 0;    timeout.tv_usec = 0;    pid_t pid = getpid();    pid_t pgrp = getpgrp();    pid_t ppid = getppid();    pid_t pgid = getpgid(pid);    printf("\nNew process  info:pid=[%06d],gprp=[%06d],ppid=[%06d],pgid[%06d]\n", pid, pgrp, ppid, pgid);	printf("Process ClientIP=[%s] Socket=[%d]\n", pMsSoket->clientIp, pMsSoket->connfd);    char  sResDesc[MAX_MBFE_BUFFER];    char SendBuf[10];    char  *RecvBuf = 0;    int   RecvBufLen = 0, SendBufLen = 0;    int   Lock_Ret = 0;    CURR_INF curr_inf;    CONF_VAL *conf;    int accflag,  ret;    char  TrNo[7];    int   RetCode = 0, iRetval = 0;    char *RetMsg = 0,*Result = 0;    char sysValue[21];    char resStr[100];    memset(sysValue, 0, 21);    memset(resStr, 0, 100);    accflag = 1;    ret = connectToDB( "SYBASE" , "sa", "sybase" ,"DIRWAYSDB");    if( ret != 0 )    {    	delete pMsSoket;        exit(-1);    }    if(FALSE==sBepsPub.GetSysCtlPar(NUM_CONNECT, sysValue, resStr))    {        printf("%s\n", resStr);        delete pMsSoket;        exit(-1);    }    filelog(CIS_INTER_MB, "sysValue=[%s] sysConfig=[%s]", sysValue, myglobe->chiProcCount);    if(atoi(sysValue)>atoi(myglobe->chiProcCount))    {        pMsSoket->SentHeartMsg("000009NOCONNECT");        pMsSoket->Close();        disConnectToDB();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -