📄 upnode.h
字号:
/********************************************************************** FileName : UpNode.h Description : 上节点类头文件 Version : 1.0 Date : 2003年6月12日 Author : 刘荣辉 Other : ***********************************************************************/#ifndef _UPNODE_H_#define _UPNODE_H_#include <pthread.h>#include "socket.h"#include "FileOpr.h"#include "DB_MySQL.h"#include "ConnectionPool.h"#include "md5.h"//#define WINDOW_SIZE 331 //滑动窗口大小,(哈希表大小:163,673,1361,2729)#define DEFAULT_RESEND 3 //协议无指定时(SMGP)的默认的重发次数#define SEND_TIMEOUT 60 //协议无指定时(SMGP)的默认的等待应答时间(秒)#define MAX_PACK_SIZE 2400 //最大的包长度#define CONNECT_WAIT 1 //重连初始延时(秒)#define CMCCTEST "CMCCTEST"class CUpNode{ public: //构造、析构函数 CUpNode(); virtual ~CUpNode(); int GetParam(char *FileName); //从配置文件中读取参数值 int NodeInit(); //初始化(队列参数) //通信主模块,连接/登陆/接收,产生发送线程 static void * NodeCom(void * ); int RspPackDeal(RecvQUnit *); //应答包处理模块 //从接收队列中取Deliver包 int GetDeliver(CMPP_Deliver *); int GetDeliver(SMGP_Deliver *); //往发送队列中放ActiveTest包,不负责接收应答 int PutActiveTest(); //往发送队列中放Submit包,Origin_Seq为被转发的源请求包流水号,若非转发包则为0 int PutSubmit(void * pSubmit, int SrcNode, int Origin_Seq); int SendLogout(); //直接发送Logout包 //int NodeLogout(); //断开与上节点的连接(发送注销请求、收注销应答、关闭套接字),队列仍保留 int CMCCTestRsp(CMPP_Deliver *); //对统一业务测试指令的回复 int NodeClear(); //清除队列、彻底与上节点绝交 int UpSentQCheck(DB_MySQL *, int); //检查已发送队列,确定是否重发 int GetSequence(); //互斥地获得当前流水号,并加1 int LoadQueue(); //上节点数据装载恢复模块???????????????? int NodeExit(); //上节点安全退出模块(数据保护)???????????? private: void * UpReceiver(void * ); //上节点接收(线程)函数 static void * UpSender(void * ); //上节点发送线程函数 int SentQReset(); //重置已发送队列的等待时间标识 int NodeLogin(int mode); //上节点登录模块 int MakeRspPack(void *ReqPack, void **RspPack); //根据请求包形成应答包 int CMPPLogin(int mode); //CMPP登录模块,返回0为成功,返回1为失败 int SMGPLogin(int mode); //SMGP登录模块,返回0为成功,返回1为失败 int MakeCMPPRsp(void *ReqPack, void **RspPack); //形成CMPP应答包,返回值为状态码 int MakeSMGPRsp(void *ReqPack, void **RspPack); //形成SMGP应答包,返回值为状态码 //int GotRspPack(void *RspPack); //从接收队列中获得应答包后的处理 //int GotCMPPSubmitRsp(CMPP_Submit_Resp *); //收到CMPPSubmitRsp后的处理函数 //int GotCMPPActiveRsp(CMPP_Active_Test *); //收到CMPPActiveRsp后的处理函数 //int GotSMGPSubmitRsp(SMGP_SubmitResp *); //收到SMGPSubmitRsp后的处理函数 //int GotSMGPActiveRsp(SMGP_Head *); //收到SMGPActiveRsp后的处理函数 //收到注销请求后的处理函数,返回应答、退出收发线程、关闭套接字 //int GotLogout(CMPP_Terminate *); //int GotLogout(SMGP_Head *); public: TCPsocket TcpSock; //TCP套接字对象 int State; //节点状态:0表示连接正常,1表示正在建立连接,2表示暂时不连接 int ToExit; //节点退出标识,0为不退出,1为正在退出 int SeqId; //流水号 //Map_SentQ::iterator SentQ_Pos; //已发送队列的位置指针 FileOpr *WrSystemLog; //写系统日志文件(系统事件/连接事件/异常错误)的对象 FileOpr *WrDeliverLog; //写Deliver日志的文件操作对象 FileOpr *WrReportLog; FileOpr *WrSubmitLog; FileOpr *WrSubmit_FailLog; //DB_MySQL *MysqlDb; //MySQL操作对象 FIFO_RecvQ *RecvQ; //请求包接收缓冲队列 FIFO_RecvQ *RspQ; //应答包接收缓冲队列 FIFO_SendQ *SendQ; //发送缓冲队列 CIntStructMap SentQ; //已发送队列,等待应答/重发,滑动窗口 pthread_t ReadThr; //接收、发送线程号 pthread_t WriteThr; pthread_mutex_t SentQ_Lock; //已发送队列互斥锁 pthread_mutex_t SeqId_Lock; //流水号互斥锁 /*-----------在配置文件中获取的参数-----------*/ char DeliverLogFile[80]; //Deliver日志文件名 char SubmitLogFile[80]; char ReportLogFile[80]; char Submit_FailFile[80]; char UpQueueBak[50]; //队列数据包备份文件目录 char UpRecvQ_File[50]; //上节点队列中的数据包备份文件名后缀 char UpSendQ_File[50]; int NodeID; //上节点编号,CGateWay::Console()中已假定其小于1000。 int Protocol; //0,CMPP; 1,SMGP; 2,SMPP char NodeCode[15]; //上节点代码 char SP_Name[50]; //本代理网关的(公司)名称 char SP_Id[10]; //本网关登录时的企业代码 char SP_Code[10]; //服务代码(接入号) char NodeIp[16]; int Port; char Secret[16]; //登陆密码 //短消息收发记录显示标识,为0表示不显示,为1显示接收日志,为2显示发送日志,为3同时显示收发日志 int ShowLog; int Sent_Window_Size; //(已发送)滑动窗口大小,(哈希表大小:163,673,1361,2729) int ActiveTest_Time; //发送ActiveTest请求的周期(秒) int Recv_Queue_Size; //上节点收、发队列大小 int Send_Queue_Size; int Recv_Q_Full_Wait; //收、发队列满的等待延时 int Send_Q_Full_Wait; int Send_Q_Empty_Wait; };#endif //_UPNODE_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -