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

📄 upnode.h

📁 SMS gateway. SMS protocol for CHINA mobile, unicom, lingtong. Using mysql to exchange message.
💻 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 + -