?? gateway.h.bak
字號(hào):
/********************************************************************** FileName : GateWay.h Description : 網(wǎng)關(guān)系統(tǒng)頭文件 Version : 1.0 Date : 2003年6月12日 Author : 劉榮輝 Other : ***********************************************************************/#ifndef _REENTRANT#define _REENTRANT#endif#ifndef _GATEWAY_H_#define _GATEWAY_H_#include <sys/signal.h> //#include <signal.h>#include <unistd.h>#include <sched.h> #include <errno.h>#include <sys/types.h>#include <stdlib.h>#include <math.h>#include <map.h> //STL的哈希映射類#include "UpNode.h"#include "DnNode.h"//#include "SMGP_DB_Sybase.h"#define INIFILE "../config/GateWay.ini" /*系統(tǒng)配置文件名*/#define UPNODE_NUM 1 //上端節(jié)點(diǎn)(上級(jí)網(wǎng)關(guān))的數(shù)量#define MAX_DNNODE 100 //最大下節(jié)點(diǎn)數(shù)#define MAX_RELAYTIMES 3 //最大轉(zhuǎn)發(fā)嘗試次數(shù)(每次轉(zhuǎn)發(fā)都可能會(huì)嘗試重發(fā))#define CHECK_Q_TIME 2 //檢查隊(duì)列間隔時(shí)間(秒),應(yīng)小于所有的ActiveTest_Timestatic pthread_key_t ThreadKey; //線程TSD鍵class CGateWay{ public: CGateWay(); virtual ~CGateWay(); static void InitAsDaemon(); static void * Up_SentQ_Poller(void *); //上端已發(fā)送隊(duì)列定時(shí)(輪詢)線程函數(shù) static void * Up_RecvQ_Poller(void *); //上端接收隊(duì)列輪詢/調(diào)度處理線程 static void * MTForword(void *); //上端短消息分發(fā)線程 static void * DnListener(void *); //下端連接監(jiān)聽線程 static void * DnNodeLogin(void *); //下端登錄驗(yàn)證線程模塊 static void * DnReceiver(void *); //下端接收線程(所有下節(jié)點(diǎn)共用) int DnSender(void * ); //下節(jié)點(diǎn)發(fā)送(線程)模塊 static void * Dn_SentQ_Poller(void *); //下端已發(fā)送隊(duì)列定時(shí)(輪詢)線程函數(shù) static void * Dn_RecvQ_Poller(void *); //下端接收隊(duì)列輪詢/調(diào)度處理線程 static void * MOForword(void *pGateway);//從數(shù)據(jù)庫(kù)中提取MO短消息分發(fā)給各個(gè)下節(jié)點(diǎn) void * UpPackDeal(RecvQUnit *,int); //上端收到的包的路由處理(線程)模塊 int UpCMPPDeal(RecvQUnit *,int); //上端收到的CMPP包的路由處理模塊 int UpSMGPDeal(RecvQUnit *,int); //上端收到的SMGP包的路由處理模塊 void * DnCMPPDeal(RecvQUnit *, CDnNode *); //下端收到的CMPP包的路由處理(線程)函數(shù) long long GetMsgId(); //互斥獲取下節(jié)點(diǎn)共用的MsgID值 int GetParam(); //從INIFILE中讀取參數(shù)值 int Initialize(); //初始化函數(shù)(全局的文件/數(shù)據(jù)庫(kù)等對(duì)象初始化) static void * Console(void * ); //網(wǎng)關(guān)控制臺(tái)線程函數(shù) static void ExitSig(int); //網(wǎng)關(guān)系統(tǒng)退出信號(hào)處理函數(shù) static void SetTSD(int); //信號(hào)處理函數(shù),修改線程私有數(shù)據(jù) void SafeExit(); //網(wǎng)關(guān)系統(tǒng)安全退出模塊 public: static int ToExit; //網(wǎng)關(guān)退出標(biāo)識(shí),0為不退出,1為正在退出 CUpNode UpNode[UPNODE_NUM]; //定義上端節(jié)點(diǎn) CP_Info CP_Array[MAX_DNNODE]; //下節(jié)點(diǎn)信息結(jié)構(gòu)體數(shù)組 CIntPointMap Code_CP_Map; //服務(wù)代碼--下節(jié)點(diǎn)對(duì)象指針映射表 CIntPointMap Sock_CP_Map; //套接字--下節(jié)點(diǎn)對(duì)象指針映射表 IntIntMap MtRoute_Map; //號(hào)段--網(wǎng)關(guān)ID的路由映射表 FileOpr *WrSystemLog; //寫系統(tǒng)日志文件(系統(tǒng)事件/連接事件/異常錯(cuò)誤)的對(duì)象 FileOpr *WrDnSubmitLog; //下端Submit接收日志 ConnectionPool *ConnPool; //連接池 DB_MySQL *MyDB; //Mysql數(shù)據(jù)庫(kù)的連接 DB_MySQL *MtDB; //Mysql數(shù)據(jù)庫(kù)的連接 DB_MySQL *MoDB; //Mysql數(shù)據(jù)庫(kù)的連接 //SMGP_DB_Sybase *SybaseDB; int DnNodeNum; //已導(dǎo)入內(nèi)存的下節(jié)點(diǎn)信息結(jié)構(gòu)體數(shù)量 long long MsgID_Echo; //返回給所有下節(jié)點(diǎn)的Submit_Rsp中的MsgID值 pthread_mutex_t MsgID_Lock; //返回給所有下節(jié)點(diǎn)的MsgID_Echo的修改鎖 TCPsocket *DnSock; //監(jiān)聽下節(jié)點(diǎn)連接的TCP套接字對(duì)象 fd_set DnSockSet; //下端連接套接字集 int MaxSock; //Select()中的參數(shù),最大套接字值加一 pthread_mutex_t SockSetLock; //下端連接套接字集的修改鎖 //-----------將在系統(tǒng)配置文件中獲取的信息參數(shù)----------- char SystemLogFile[80]; //系統(tǒng)日志文件名(含相對(duì)路徑) char DnSubmitLogFile[80]; //下端CMPP_Submit包接收日志文件名 char GWCode[20]; //本代理網(wǎng)關(guān)節(jié)點(diǎn)代碼 char GWIp[16]; //本代理網(wǎng)關(guān)IP int GWPort; //本代理網(wǎng)關(guān)監(jiān)聽下節(jié)點(diǎn)連接的端口號(hào) int AdminPort; //本代理網(wǎng)關(guān)監(jiān)聽遠(yuǎn)程管理連接的端口號(hào) char AdminUser[30]; //本代理網(wǎng)關(guān)的遠(yuǎn)程管理用戶名 char AdminPass[30]; //本代理網(wǎng)關(guān)的遠(yuǎn)程管理密碼 char DB_ConfigFile[50]; //數(shù)據(jù)庫(kù)連接配置文件路徑名 char UpNode_IniFile[UPNODE_NUM][80]; //上節(jié)點(diǎn)的配置文件名 char DnQueueBak[50]; //下節(jié)點(diǎn)隊(duì)列數(shù)據(jù)包備份文件目錄 char DnRecvQ_File[50]; //下節(jié)點(diǎn)隊(duì)列中的數(shù)據(jù)包備份文件名后綴 char DnSendQ_File[50]; //-----------將在系統(tǒng)配置文件中獲取的性能參數(shù)----------- int Sel_Timeout; //對(duì)下節(jié)點(diǎn)套接字集select的阻塞超時(shí)時(shí)間(微秒) int RecvQ_Empty_Wait; //所有上節(jié)點(diǎn)的接收隊(duì)列為空時(shí)的等待延時(shí)(微秒) int SendQ_Empty_Wait; //下節(jié)點(diǎn)發(fā)送隊(duì)列為空時(shí)的等待延時(shí)(微秒) int MT_DB_Interval; //MT短消息分發(fā)線程讀數(shù)據(jù)庫(kù)周期(微秒) int MO_DB_Interval; //MO短消息分發(fā)線程讀數(shù)據(jù)庫(kù)周期(微秒) int Max_MO_Fetch; //從數(shù)據(jù)庫(kù)提取MO記錄的最大數(shù)量 int Max_MT_Fetch; //從數(shù)據(jù)庫(kù)提取MT記錄的最大數(shù)量 int Max_RelayTimes; //最大轉(zhuǎn)發(fā)嘗試次數(shù)(每次轉(zhuǎn)發(fā)都可能會(huì)嘗試重發(fā)) int Relay_Interval; //轉(zhuǎn)發(fā)失敗后的重試延時(shí)(秒) //================其他全局變量======================== pthread_t MainThr; //網(wǎng)關(guān)主線程號(hào) pthread_t UpSentQ_PollThr; //上端定時(shí)(輪詢)線程號(hào) pthread_t UpRecvQ_PollThr; //上端定時(shí)(輪詢)線程號(hào) pthread_t MTForwordThr; //數(shù)據(jù)庫(kù)中的MT短消息分發(fā)線程號(hào) pthread_t MOForwordThr; //數(shù)據(jù)庫(kù)中的MO短消息分發(fā)線程號(hào) pthread_t DnListenThr; //下端連接監(jiān)聽線程號(hào) pthread_t DnRecvThr; //下端接收線程號(hào) pthread_t DnSentQ_PollThr; //下端已發(fā)送隊(duì)列定時(shí)(輪詢)線程 pthread_t DnRecvQ_PollThr; //下端接收隊(duì)列輪詢/調(diào)度處理線程號(hào) pthread_t ConsoleThr; //控制臺(tái)線程號(hào) //static pthread_key_t ThreadKey; //線程TSD鍵 //CThreadPool UpMOWorker; //上端MO處理線程池 //CThreadPool DnMTWorker; //下端MT處理線程池 };#endif //_GATEWAY_H_
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -