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

📄 handlemsg.h

📁 液晶电视完整代码可实现人机界面
💻 H
字号:
#ifndef  _HANDLEMSG_H_#define  _HANDLEMSG_H_#include "xmlparser.h"#include "errcode.h"	#include "pub_func.h"#define FUNCS int_dynfunclist.funclistvoid GetErrMsg(int , char *);struct DynFunc // 注册函数表{			 	char func_name[FUNCNAMESIZE + 1];    //  函数名 	char func_type;  		     // 函数类型:1-动态加载 2-静态加载 3-数据库类静态加载 	int (*func_addr)();                  // 函数地址 	int parano;                          // 函数参数个数 };class DynFuncList{public:	DynFuncList()	{		funclist = NULL;		funcno = 0;		sizeoflist = 0;	};	~DynFuncList()	{		delete []funclist;	};	BOOL AddFunc(struct DynFunc dynfunc);	BOOL AddFunc(char *funcname, char functype, int (*funcaddr)(), int parano);	int FuncPos(char *funcname);	struct DynFunc *funclist;	int funcno;	int sizeoflist;};class HandleData{public:	HandleData() //构造函数	{		interparser = 0;		// 内部格式及数据流		logmode = LOGERROR;		// 缺省只记录错误		strcpy(logfile, M_LOGFILE_NAME);		strcpy( rootcode, "0000" );	// 初始交易码 		db_proc = 0;	 		// 数据库指针 		indataptr = 0;		input = 0;		inputlen = 0;		outdatalen = 0;			// 输出流当前长度		output = 0;		outputsize = 0;			// 输出流最大长度		memset( errmsg, 0, MSGLEN + 1);	// 格式转换失败原因		errno = 0;	};	~HandleData()//析构函数	{		if ( parser )		{			delete parser;		}		if ( interparser )		{			delete interparser;		}	};	// 设置解析报文环境,包括,初始处理码,数据库指针,功能函数表	int SetEnv(char *transcode, char *XMLConfigFileName,const DynFuncList &dynfunclist);		void Rootcode( char *txcode );	// 设置记录日志的方式、日志文件名	void SetLog(int LogMode, char *logname="handlemsg.log"){		logmode = LogMode;		strcpy( logfile, logname );	}		// 报文处理解析, 返回: 0 成功  1 失败,此时可调用 ErrMsg() 获得失败原因	int Process( char *in_data, int in_data_len, char *out_data, int &out_data_len );	// int Process(char *XMLConfigFileName,  char *in_data, int in_data_len, char *out_data, int &out_data_len );		void PrintIntStr( );	int  GetErrno(){ return errno; }private:	char rootcode[TXCODELEN + 1];  	// 初始交易码 	void *db_proc;			// 数据库指针 	DynFuncList int_dynfunclist;	CXMLParser *parser;		// 格式流;	CXMLParser *interparser;	// 内部格式及数据流;	int  indataptr;	char *input;	int  inputlen;	int  outdatalen;		// 输出流当前长度	char *output;	int  outputsize;		// 输出流最大长度	int  errno;	char errmsg[MSGLEN + 1];	// 格式转换失败原因	int  logmode;	char logfile[FILEPATHLEN + 1];	int  status;	// 解析报文, 失败抛出异常	void UnpacketData( );			// 判断组类型,调用相应的解包函数	void UnPackGroupData( char *deli_type, CXMLParser *format , char *inter_node );	// 定长格式解包函数(格式信息,内部流当前节点)解包失败抛出异常	void UnPackFixedData( CXMLParser *format, char *inter_node );		// 分割符型解包函数(格式信息,内部流当前节点)解包失败抛出异常	void UnPackDeliData( CXMLParser *format, char *inter_node, int DeliPos=M_NO_POS_VALUE, char *DeliAscs=NULL );		// 标识型解包函数(格式信息,内部流当前节点)解包失败抛出异常	void UnPackTagData(CXMLParser *format, char *inter_node, int Tag_Pos=M_NO_POS_VALUE, char *pszDeliChars=NULL);	// 解定长格式ITEM(格式信息,内部流当前节点)解包失败抛出异常	void UnPackFixedItem( CXMLParser *format, char *inter_node, int iSeqNo);		// 解分割符型ITEM(格式信息,内部流当前节点,分割符)解包失败抛出异常	void UnPackDeliItem( CXMLParser *format, char *inter_node, int deli_pos, char *deli_ascs, int iSeqNo);	// 解标识型ITEM(格式信息,内部流当前节点,TAG 位置)解包失败抛出异常	void UnPackTagItem(CXMLParser *format, char *inter_node, int iTagPos, char *pszDeliChars, int iSeqNo);	// 生成报文, 失败抛出异常	void PacketData( );		// 判断组类型,调用相应的打包函数	void PackGroupData( char *deli_type, CXMLParser *format , char *referstr );		// 定长格式打包函数(格式串,节点路径)解包失败抛出异常	void PackFixedData( CXMLParser *format, char *referstr );		// 分割符型打包函数(格式串,节点路径)解包失败抛出异常	void PackDeliData( CXMLParser *format, char *referstr, int DeliPos=M_NO_POS_VALUE, char DeliAsc=NOASC  );		// 标识型打包函数(格式串,节点路径)解包失败抛出异常	void PackTagData( CXMLParser *format, char *referstr);	// 生成定长型ITEM信息(格式串,节点路径)	void PackFixedItem( CXMLParser *format, char *referstr, int iSeqNo);	// 生成分割符型ITEM信息(格式串,节点路径,分割类型,分割符)	void PackDeliItem( CXMLParser *format , char *referstr, int iSeqNo );	// 生成标识型ITEM信息(格式串,节点路径,TAG 位置)	void PackTagItem( CXMLParser *format , char *referstr, int iTagPos, int iSeqNo);		//格式或内容检查处理函数,输入函数名+(+参数+)、输入字符串、长度,输出串及长度	int RunFunc( char *func, char *input, int &len, char *output );		// 域处理函数,输入函数, 域值, 输出处理后的域值	void ContentFunc( char *func, char *input, char *output );	// 内容检查函数,输入函数串, 检查发现错误时抛出异常。	void CheckFunc( char *func );	// 格式预处理,输出下一处理码	void PreFunc( char *pre_func, char *transcode );	// 格式后处理,使用输出流为缺省输入	void PostFunc( char *post_func );	// 根据refer从内部数据流取数据	BOOL GetSelfData( char *refer, char *value );	BOOL GetSelfData( char refer[][NODELEN + 1], char *value );	// 构造函数调用参数,参数可以为内部流数据	void GetPara( char *func_para, int *argc, char argv[][M_MAX_PARA_LEN] );	// 向输出流输出字符,成功返回0,超过输出缓冲返回 -1	int Output( char asc )	{		if ( outdatalen < outputsize - 1 )		{			output[outdatalen++] = asc;			output[outdatalen] = 0;			return 0;		}		return -1;	}	// 向输出流输出字符串,成功返回0,超过输出缓冲返回 -1	int Output( char *str, int len )	{		if ( outdatalen < outputsize - len )		{			memcpy( output + outdatalen, str, len );			outdatalen += len;			output[outdatalen] = 0;			return 0;		}		return -1;	}		// 记录日志	void Log( int grade, char *prompt, char *msg=NULL, int errcode=0 )	{		try		{			if ( grade >= LOGERROR && grade <= logmode )			{				ofstream tfile( logfile , ios::app );					if ( msg )				       tfile<<prompt<<"["<<msg<<"]"<< endl << endl;				else					tfile << prompt <<  endl;			}		}		catch( ... )		{			cout << "Can't log infomation!"  <<  endl;		}	}};#endif

⌨️ 快捷键说明

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