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

📄 server.h

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

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

typedef struct tagNodeBuffer
{
	CTcpAsyncSocket  m_stSocket;
	char			 m_szServerIP[101];
	int				 m_nServerPort;
	char			 m_szUser[21];
	char			 m_szPassword[21];
	char			 m_szLocalIP[20];
	unsigned long 	 m_nUnHandleNumber;
	BOOL			 m_bConnected;
	time_t			 m_tConnectServerTime; 
	time_t			 m_tServerActiveTime;
}SServerNodeBuffer;

typedef struct {
	int		 m_nTaskId; 
	SServerNodeBuffer *m_pstServerNode;
	BYTE	 m_bState;
	int		 m_bMsgType;
	time_t	 m_cTimer;
	BYTE	 m_nResendTimes;
	int		 m_iSequenceNumber1; //序列号
	int		 m_iSequenceNumber2; //序列号
	int		 m_iSequenceNumber3; //序列号
	CByteArray		m_baPduBuf;
}SESSION_ITEM;


//图片格式
typedef struct tagPID
{
	int		iTP_pid;
	int		iTP_udhi;
	CString	strMobileType;
}PICTURETYPE,*PPICTURETYPE;

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

typedef struct tagFiltrateMessage
{
	CString strFilMsg;    //过滤内容
	CString strFeedBack;  //过滤反馈
	BOOL    bFeedBack;    //是否反馈
}FiltrateMsg;


/////////////////////////////////////////////////////////////////////////////
// CServerThread thread
class CServerThread : public CWinThread
{
	DECLARE_DYNCREATE(CServerThread)
public:
	CServerThread();           // 
	virtual ~CServerThread();
	void	LogMsg(const char* szMsg);
	BOOL	InitSocket();
	void	LoadIni();
	void	AddToMoniterList(CTcpAsyncSocket* pstClientSocket);
	int		SendPacket(CTcpAsyncSocket *pstSocket,unsigned char* szSendBuf,int nSendLen);
	BOOL	ConnectDB();
	int		SeekTask(int nSequence1,int nSequence2,int nSequence3);
	void	ProcessIdle();
	BOOL	ConnectServer(SServerNodeBuffer *pstNode);
	int		SendSGipUnBind(SServerNodeBuffer *pstNode);
	int		SendSGipBind(SServerNodeBuffer *pstNode);
	int		SendSGipUnBindResp(SServerNodeBuffer *pstNode,const char* szRecvBuf);
	void	HandleTask();
	void	ResendMessage(int nTaskID);
	BOOL	CleanUnConnectSocket(CTcpAsyncSocket *pstSocket);
	void	HandleServerMsg(SServerNodeBuffer *pstNode,char *szRecvBuf,int nLen);
	void	Quit();
	void	QueryRecord();
	int		SendShortMessage(const char* szUserNumber,const char* szMessageContent,const char* szChargeNumber,
							const char* szSender,const char* szServiceType,const char *szLinkID,char cFeeType,const char *szFeeValue,const char* szGivenValue,
							const char* szScheduleTime,char cMessageCoding,char cMOrelatetoMTFlag,int iStatusRpt=0,int iPriority=0,int iMsgType=0,int iExpireTimeSpan=28800);
	//  add by ycf 20020825
	int     SendMessage(CString strMobile,CString strTempMessage,CString strChargeNumber,
		                CString  strSender,CString strServiceType,CString strLinkID,char cFeeType,CString strFeeValue,CString strGivenValue,
						const char* szScheduleTime,char cMessageCoding,int nMOtoMTFlag,int iStatusRpt=0);

	int		GetMinUnHandleServerIndex();
	BOOL	IsConnected();
	BOOL	IsAllConnected();
	void	AddToTaskList(SServerNodeBuffer *pstServerNodeBuf,unsigned char* szBuf,int nLen,int nSequence1,int nSequence2,int nSequence3,int nMsgType=0);
	void	HandleActiveTest();
	void	ProcessReceivePdu();
	void	WriteSubmitLog(int nTaskID,char cResult);
	BOOL    IncludeChinese(CString strMsg);
	void    WriteActiveFlag();

	// add by ycf 0512
	void         SubmitToSendMsgLog(const char *szMsg,const char *szMobile,const char *szSender,const char *szFeeNum,const char * szServiceType,const char * szLinkID,int cFeeType,const char * szFeeValue,const char * szGivenValue,int nMotoMtFlag);
	void         SubmitToSendFilLog(const char *szMsg,const char *szMobile,const char *szSender,const char *szFeeNum,const char * szServiceType,int cFeeType,const char * szFeeValue,const char * szGivenValue,int nMotoMtFlag);

    void         LoadFiltrateMsg();
	void         LoadFreeUser();
	BOOL         IsFiltrateMsg(CString strMessage,CString &strReBack,BOOL &bFeedBack);
	BOOL         IsFreeUser(CString strMobile);
	int          m_nFiltrateNum;
	BOOL         m_bFiltrate;
	int          m_nFilType;
	FiltrateMsg  *m_sFiltrateMsg; 
	CString      *m_pstrFreeUser;
	int          m_nFreeUserNum;
	BOOL         m_bFreeUser;

// Attributes
public:
	CTcpAsyncSocket m_stMoniterSocket;				//
	CDatabase		m_database;						//
	CSGipPdu		m_stPdu;						//
	int				m_nSourceNode;					//源节点代码
	char			m_szSPNumber[21];				//特服号
	char			m_szCorpId[21];					//企业代码
	int				m_nWaitAnsTimes;				//
	int				m_nReConnectTimes;				//
	int				m_nMaxIdleTimes;				//最大空闲时间
	int				m_nMaxRetryTimes;				//最大重发次数
	char			m_szUserName[21];				//
	char			m_szPassword[21];				//
	char			m_szDSN[101];					//
	char			m_szTableName[50];				//
	char			m_szSubmitLogTableName[101];	//
	BOOL			m_bSubmitLogToEveryDayTable;	//
	int				m_nMoniterPort;					//监控端口
	char			m_szActiveFlag[50];				//程序活动文件名
	BOOL			bLongMessageFree;				//超长段消息是否免费
	int				m_nContinueSendCount;			//自定义发送人,用于聊天类节目
	int				m_nExpireSpan ;                 //短信息有效期限(秒)
	BOOL			m_bCustomSpNumber;			

	CArray <CTcpAsyncSocket*,CTcpAsyncSocket*>		m_stMoniterNodeBuf;
	CArray <SServerNodeBuffer*,SServerNodeBuffer*>  m_stServerNodeBuf;
	SESSION_ITEM	m_stTask[MAX_TASK_SIZE];
	int				m_nTaskHead;
	int				m_nTaskTail;
	int				m_nTotalServer;
	int				m_nQuerRecordTimes;
	int				m_nContinueSendTimes;
	PPICTURETYPE	pPictureType;
	int				iMobileTypeNum;

	//add by ycf 20020825
	OVERFEE          m_overfee,m_tplsfee,m_freefee;
	int              m_nIndex;
	int              m_nPriority;  //发送优先级

	
// Operations
public:
	BOOL SubmitToDatabase(const char* szSql);
	void SendOnePicture(const char *szUserNumber, const char *szChargeNumber,const char *szSender, const char * szFileName, const char *szServiceType,const char *szLinkID, char cFeeType, const char *szFeeValue, const char *szGivenValue, char cMOrelatetoMTFlag,int iMobileType,int &iCount, int iStatusRpt=0,int iPriority=0);
	BOOL IsDigital(char cSrc);
	int GetWorsNumOfStr(CString strMsg);
	CString GetLeftTChar(CString strSrc, int iWordsNum, int iStartPos, int &iDestStrLength);
	BOOL AnalyseMessage(CString *strSrc, CString *strDest);
	BOOL	m_bConnectToDB;
    
	// add by ycf 20020825
	BOOL AnalyseMessage(CString &strSrc,CString &strDest,CString strDivision);
    BOOL AnalyseMessage(CString strMessage,CString strTmp);
    int  AnsiToEncode(char *pSrcCode, int nLen,CString &strDestCode);
	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CServerThread)
	public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	virtual int Run();
	//}}AFX_VIRTUAL

// Implementation
protected:

	// Generated message map functions
	//{{AFX_MSG(CServerThread)
		// 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_ISMGSERVER_H__E51A25DD_7414_45C7_AC68_FF1882AC70AB__INCLUDED_)

⌨️ 快捷键说明

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