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

📄 deliverthread.h

📁 一个用vc开发的Sgip通讯程序
💻 H
字号:
#if !defined(AFX_DELIVERTHREAD_H__ADA578ED_0DAF_410A_8566_782E74AD66A8__INCLUDED_)
#define AFX_DELIVERTHREAD_H__ADA578ED_0DAF_410A_8566_782E74AD66A8__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DeliverThread.h : header file
//
#include "TcpSocket.h"
#include "SGipPdu.h"

class CDeliverThread;

typedef struct tagClientNodeBuffer
{
	CTcpAsyncSocket  *m_pstClientSocket;
	int				 m_iSequenceId;
	BOOL			 m_bConnected;
	time_t			 m_tActiveTime;
}SClientNodeBuffer;

typedef struct tagDeliverNodeBuffer
{
	CTcpAsyncSocket  m_stListenSocket;
	int				 m_nLocalPort;
	char			 m_szUser[21];
	char			 m_szPassword[21];
	char			 m_szSourceNumber[21];
	char			 m_szLocalIP[20];
	int				 nID;
	CDeliverThread    *pstThread;
	CArray <SClientNodeBuffer*,SClientNodeBuffer*>  m_stClientNodeBuf;
}SDeliverNodeBuffer;

typedef struct tagCmdTable
{

	CString		    strSender;		//特服号
	unsigned short	iSenderType;	//
	CString		    strCmd;			//指令
	unsigned short	iMatchType;		//匹配类型	
	CString		    strMoTab;		//MO表名
	unsigned short	iMoTabNum;		//MO表个数
}SCmdTable,*PSCmdTable;

typedef struct tagDefFee
{
	int	iFeeType;			//错误指令计费类别=2
	int iMotomtFlag;		//错误指令MOTOMTFLAG=0
	int iFeeValue;			//错误指令信息费=10
	int	iGivenValue;		//错误指令赠话费=0
	CString	strServiceType;	//错误指令业务代码
}DEFFEE,*PDEFFEE;

typedef struct tagMobileCtrl{//号码段控制
    CString strStart ; //段起始号码
    CString strEnd ; //段终止号码
    // CString strCityName ; //城市名称
    // int nValidState ;//有效号码标志位:1,有效号码段;0,无效号码段
    // int nCtrlType ; //1,连续号码;0,离散号码(只用段起始号码strStart)
}SMobileCtrl,*PSMobileCtrl;

typedef struct tagGameQuit{
	CString strSrcCmd;          //业务号
	CString strGameName;        //游戏名称
	CString strMessage;         //回复语
	CString strGameSQL;         //定制
	CString strQuitSQL;         //退出定制
}SGameQuit;

/////////////////////////////////////////////////////////////////////////////
// CDeliverThread thread

class CDeliverThread : public CWinThread
{
	DECLARE_DYNCREATE(CDeliverThread)
public:
	CDeliverThread();           // protected constructor used by dynamic creation
	virtual ~CDeliverThread();

// Attributes
public:
//	char			m_szDeliverErrorLog[88];
	int				m_nNumOfGameCmd ;
	CTcpAsyncSocket m_stMoniterSocket;
	char			m_szUserName[7];
	char			m_szPassword[11];
//	char			m_szTableNames[10][101];
	char			m_szDeliverLogTableName[101];
	BOOL			m_bDeliverToEveryDayTable;
	char			m_szDSN[101];
//	BOOL			m_bWriteDeliverUseFixSPNumber;
//	char			m_szWriteDeliverSPNumber[11];
	int				m_nMoniterPort;
	int				m_nMaxIdleTimes;
//	int				m_nTableCounts;
	char            m_szErrorTable[50];
	char            m_szHelp[140];
//	int				iInvalidNumber;

	CDatabase		m_database;
	CArray <CTcpAsyncSocket*,CTcpAsyncSocket*>		m_stMoniterNodeBuf;
	CArray <SDeliverNodeBuffer*,SDeliverNodeBuffer*>  m_stDeliverNodeBuf;
	PSCmdTable		m_astCmdTab;
	CCriticalSection* m_pSection;
	DEFFEE			m_deffee;
	DEFFEE          m_canclefee;

	// add by ycf 20020825
	char m_szErrMobileMsg[140];
	PSMobileCtrl m_psValidMb ;   //有效号码段,号码段位数为11
    int m_nValidMbCount ; //有效号码段个数,号码段位数为11
 
    PSMobileCtrl m_psInvalidMb ;  //无效号码段,号码段位数为11
    int m_nInvalidMbCount ; //无效号码段个数,号码段位数为11
 
    PSMobileCtrl m_psValidScrapMb ;//有效离散零星号码段,号码段位数为11
    int m_nValidScrapMbCount ; //有效离散零星号码段个数,号码段位数为11
 
    PSMobileCtrl m_psInvdScrapMb ;//无效离散零星号码段,号码段位数为11
    int m_nInvdScrapMbCount ; //无效离散零星号码段个数,号码段位数为11
 
    CStringArray m_saValidMbHead;//有效号码段头,号码段位数状态为0时,只是段头(低于11位数)
    CStringArray m_saInvdMbHead;//无效号码段头,号码段位数状态为0时,只是段头(低于11位数)
 
    BOOL m_bMbCtrlFlag ;//号码段位数状态;0,只是段头(低于11位数);1,号码段区间控制(11位数)
    BOOL m_bEnableNumCtrl  ; //号码段功能开关

	//------------------------------
	char m_szSPNumber[21];
    BOOL m_bReport;

	char m_szCancel[10];
	char m_szEqualAll[10] ;
	
	char m_szCancelHelp1[140];
	char m_szCancelHelp2[140];

	char m_szCancelAll[10];
	char m_szEqual[10] ;
	char m_szCancelAllHelp[140];
	SGameQuit *m_sGameQuit;
	int  m_nGameQuitNum;
	BOOL m_bEnableGameQuit;

    //----------------------
	BOOL m_bMonth;
	char m_szMonthTable[50];
	BOOL m_bChat;
	int  m_nChatLen;
	char m_szChatTable[50];
    // add by ycf 2002-11-27
	BOOL m_bForbid;
	BOOL m_bForbidFlag;
	char m_szForbidTime[5];
	char m_szCurrentDate[11];
    char m_szTableName[50];

	BOOL m_bRecieve;

// Operations
public:
	void SubmitToOrderSend(const char *szMsg, const char *szSAddr, const char *szDAddr,const char *szLinkID, const  char *szServiceType);
	CString GetResMsg(CString &shortmsg,CString &servicetype,CString &csRegMobile,int iFlag);
	BOOL IsGameUser(CString strSrc);
	void	SubmitToSend(const char *szMsg,const char *szSAddr,const char *szDAddr,const char *szLinkID,BOOL bCancle);
	void	SubmitToTable(const char *szMsg,const char *szSAddr,const char *szDAddr,const char *szLinkID,const char *szTable);
	void	SubmitToMonthTable(const char *szMsg,const char *szSAddr,const char *szDAddr,const char *szLinkID,const char *szTable);
	void	LoadCmdTab();
    void    GetMoTabName(CString strMsg, CString &strMoTab, const char * szDestAddr);
    BOOL    IsFindedMoTable(int nIndex,CString strCmd, CString &strMoTab);

	void	LoadIni();
	BOOL	InitSocket();
	int		SendPacket(CTcpAsyncSocket *pstSocket,unsigned char* szSendBuf,int nSendLen);
	void	AddToMoniterList(CTcpAsyncSocket* pstClientSocket);
	int		SendSGipBindResp(SClientNodeBuffer *pstNodeBuf,const char* szRecvBuf,char cResult);
	int		SendSGipUnBindResp(SClientNodeBuffer *pstNodeBuf,const char* szRecvBuf);
	void	AddToList(SDeliverNodeBuffer *pstDeliverNodeBuf,CTcpAsyncSocket* pstClientSocket);
	void	HandleDeliverMsg(SDeliverNodeBuffer *pstDeliverNode,SClientNodeBuffer *pstNodeBuf,char *szRecvBuf,int nLen);
	void	LogMsg(const char* szMsg,int iFlag=0);
	void	Quit();
	BOOL	ConnectDB();
	BOOL	HandleDeliverPdu(SClientNodeBuffer *pstNodeBuf,const char* szRecvBuf);
	BOOL	HandleReportPdu(SClientNodeBuffer *pstNodeBuf,const char* szRecvBuf);
	BOOL    IsTimeToForbidMobile();

	void    SubmitToDeliverLog(const char *szMsg, const char *szSAddr, const char *szDAddr ,const char *szLinkID);
	int		SendSGipDeliverResp(SClientNodeBuffer *pstNodeBuf,const char* szRecvBuf,char cResult);
	int		SendSGipReportResp(SClientNodeBuffer *pstNodeBuf,const char* szRecvBuf,char cResult);
	void	HandleActiveTest();
	int		SendSGipUnBind(SClientNodeBuffer *pstNode);
	BOOL    m_bConnectDeliverDB;
	
	// add by ycf 20020825
	BOOL IsEnableMobile(const char *szSAddr);
    void LoadMobile();
    BOOL IsMobileHead(CString strMobile);
    BOOL IsScrapMobile(CString strMobile);
	BOOL IsConsecutiveMobile(CString strMobile);
    BOOL LoadMobileHead();
    BOOL LoadScrapMobile();
    BOOL LoadConsecutiveMobile();
	void LoadCmdGameQuit();
    CString GameQuitCmd(CString strMobile,CString strSrcCmd,CString &strMessage);
    CString GetQuitSQL(CString strSql,CString strSrc);
	BOOL SubmitToDatabase(const char *szSql);
    BOOL IsGameUser(CString strGameSql,CString strSrc);
    BOOL IncludeChinese(CString strMsg);

	//------------------
	void LoadInValidMobile();

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDeliverThread)
	public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	virtual int Run();
	//}}AFX_VIRTUAL

// Implementation
protected:

	// Generated message map functions
	//{{AFX_MSG(CDeliverThread)
		// NOTE - the ClassWizard will add and remove member functions here.
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DELIVERTHREAD_H__ADA578ED_0DAF_410A_8566_782E74AD66A8__INCLUDED_)

⌨️ 快捷键说明

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