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

📄 imppconn.h

📁 SMAL是short message abstract library的缩写,是由风起水流软件工作室(www.zealware.com)开发的一个支持短信网关系统开发的C++底层抽象接口库
💻 H
📖 第 1 页 / 共 2 页
字号:
	*/
	//##ModelId=46B5D4320153
	long GetSubmitSucceedCount() const
	{	return submitSucceedCountTotal;		}

	/**得到发送失败的SUBMIT消息数 
	*/
	//##ModelId=46B5D432015B
	long GetSubmitFailedCount() const
	{	return submitFailedCountTotal;		}

	/**得到失败的SUBMITResponse消息数 
	*/
	//##ModelId=46B5D432015D
	long GetRespFailedCount() const
	{	return respFailedCountTotal;		}

	/**得到成功的SUBMITResponse消息数 
	*/
	//##ModelId=46B5D432015F
	long GetRespSucceedCount() const
	{	return respSucceedCountTotal;		}

	/**得到收到的Deliver消息数 
	*/
	//##ModelId=46B5D4320166
	long GetDeliverCount() const
	{	return deliverCountTotal;		}

	/**得到收到的StatusReport消息数 
	*/
	//##ModelId=46B5D4320168
	long GetStatusReportCount() const
	{	return sreportCountTotal;		}
	//@}

	/**@name Main Functions */
	//@{

	/**初始化Client函数.
	注意: 每个Client在进行所有操作之前必须调用Initialize()进行初始化操作
	@param nMinWorkThreadsCount	指定线程池要启用的初始线程数
	@param nMaxWorkThreadsCount	指定线程池允许使用的最大线程数
	*/
	//##ModelId=46B5D432016F
	void Initialize(
		unsigned nMinWorkThreadsCount = 4,
		unsigned nMaxWorkThreadsCount = 8
		);

	/**建立一个连接 
	@param _smghost 要连接的网关地址
	@param _smgport	要连接的网关端口号
	@param _username 登录用户名
	@param _password 登录口令
	@param _icpid	企业代码
	@param _conntype 连接类型
	@param _isAsiaInfoSmg 是否是亚信网关
	@param _nActivetestInterval 活动测试时间间隔
	@param sync	是否同时登录网关(一般填TRUE)
	@return 如果成功连接的话,返回该连接的指针
	*/
	//##ModelId=46B5D4320179
	IMPPConnection * MakeConnection(
		const char * _smghost,
		const unsigned short & _smgport,
		const unsigned char	& _smgversion,
		const char * _username,
		const char * _password,
		const int					& _nActivetestInterval,
		BOOL								sync
		);

	/**停止网关服务
	*/
	//##ModelId=46B5D432018D
	virtual void Release();

	/**清除连接 
	*/
	//##ModelId=46B5D4320197
	void ClearConnection(const char * token);

	/**清除当前Client中的所有连接 
	*/
	//##ModelId=46B5D43201A1
	void ClearAllConnections();

	/**发送一条Submit消息 
	*/
	//##ModelId=46B5D43201AB
	int Submit(impp_submit & message);

	//@}

	/**@name Callback functions */
	//@{
	/**登录网关成功时调用 
	*/
	//##ModelId=46B5D43201B5
	virtual void OnConnectionLogined(IMPPConnection & connection)
	{
		return;
	}

	/**登录网关失败时调用 
	*/
	//##ModelId=46B5D43201BF
	virtual void OnConnectionLoginFailed(
		IMPPConnection & connection,
		int errorCode
		)
	{
		return;
	}

	/**同网关连接断开时调用 
	*/
	//##ModelId=46B5D43201C3
	virtual void OnConnectionCleared(IMPPConnection & connection)
	{
		return;
	}

	/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
	在这里,只是简单地返回TRUE.
	*/
	//##ModelId=46B5D43201C9
	virtual BOOL OnConnectionSubmiting(
		IMPPConnection & connection,
		impp_submit _message
		)
	{
		return TRUE;
	}

	/**发送SUBMIT消息成功时调用 
	*/
	//##ModelId=46B5D43201CD
	virtual void OnConnectionSubmited(
		IMPPConnection & connection,
		impp_submit _message
		)
	{
		return;
	}

	/**发送SUBMIT消息失败时调用 
	*/
	//##ModelId=46B5D43201D4
	virtual void OnConnectionSubmitFailed(
		IMPPConnection & connection,
		impp_submit _message
		)
	{
		return;
	}

	/**收到CONNECT_RESPONSE时调用 
	*/
	//##ModelId=46B5D43201D8
	virtual void OnReceivedConnectionConnectResponse(
		IMPPConnection & connection,
		impp_connect_resp _message
		)
	{
		return;;
	}

	/**收到Terminate消息时调用 
	*/
	//##ModelId=46B5D43201DE
	virtual void OnReceivedConnectionTerminate(IMPPConnection & connection)
	{
		return;
	}

	/**收到SUBMIT_RESPONSE时调用 
	*/
	//##ModelId=46B5D43201E1
	virtual void OnReceivedConnectionSubmitResponse(
		IMPPConnection & connection,
		impp_submit_deliver_resp _message
		)
	{
		return;
	}

	/**收到Deliver消息时调用 
	*/
	//##ModelId=46B5D43201E8
	virtual void OnReceivedConnectionDeliver(
		IMPPConnection & connection,
		impp_deliver _message
		)
	{
		return;
	}

	/**收到STATUS_REPORT时调用 
	*/
	//##ModelId=46B5D43201EC
	virtual void OnReceivedConnectionStatusReport(
		IMPPConnection & connection,
		impp_deliver _message
		)
	{
		return;
	}

	/**收到活动测试消息时调用 
	*/
	//##ModelId=46B5D43201F0
	virtual void OnReceivedConnectionActiveTest(IMPPConnection & connection)
	{
		return;
	}

	/**收到活动测试回复消息时调用 
	*/
	//##ModelId=46B5D43201F4
	virtual void OnReceivedConnectionActiveTestResponse(IMPPConnection & connection)
	{
		return;
	}

	/**输出日志时调用
	格式化输出日志,默认是把内容//TRACE出来
	*/
	//##ModelId=46B5D43201F7
	virtual void OnConnectionLogWrite(IMPPConnection & connection, const char * str);
	//@}

public:
	/**@name JobProcess functions */
	//@{
	//##ModelId=46B5D4320206
	BOOL ProcessConnectionSubmiting(
		IMPPConnection & connection,
		impp_submit _message
		);

	//##ModelId=46B5D4320210
	void ProcessConnectionSubmited(
		IMPPConnection & connection,
		impp_submit _message
		);

	//##ModelId=46B5D432021A
	void ProcessConnectionSubmitFailed(
		IMPPConnection & connection,
		impp_submit _message
		);

	//##ModelId=46B5D4320224
	void ProcessReceivedConnectionConnectResponse(
		IMPPConnection & connection,
		impp_connect_resp _message
		);

	//##ModelId=46B5D432022E
	void ProcessReceivedConnectionTerminate(IMPPConnection & connection);

	//##ModelId=46B5D4320230
	void ProcessReceivedConnectionSubmitResponse(
		IMPPConnection & connection,
		impp_submit_deliver_resp _message
		);

	//##ModelId=46B5D432023A
	void ProcessReceivedConnectionDeliver(
		IMPPConnection & connection,
		impp_deliver _message
		);

	//##ModelId=46B5D4320242
	void ProcessReceivedConnectionStatusReport(
		IMPPConnection & connection,
		impp_deliver _message
		);

	//##ModelId=46B5D432024C
	void ProcessReceivedConnectionActiveTest(IMPPConnection & connection);

	//##ModelId=46B5D432024E
	void ProcessReceivedConnectionActiveTestResponse(IMPPConnection & connection);

protected:
	/**创建一个连接token 
	*/
	//##ModelId=46B5D4320257
	const char * CreateToken() const;

	/**找到第一个可用的连接 
	*/
	//##ModelId=46B5D4320260
	IMPPConnection * firstFitRouter(int start);

	/**循环使用可用的连接 
	*/
	//##ModelId=46B5D4320274
	IMPPConnection * roundRobinRouter();

	/**记录Client日志信息和connection日志信息,默认将所有信息发送到调试窗口(Debug模式下) 
	*/
	//##ModelId=46B5D432027E
	virtual void LogWrite(const char * pchFmt, ...);

private:
	//##ModelId=46B5D4320289
	CThreadPool				m_pool;
	//##ModelId=46B5D4320293
	CWorkerImppClient						m_worker;
	//##ModelId=46B5D432029D
	CJobImppClient							* m_pJob;
	//##ModelId=46B5D43202A2
	aIMPPList							connectionList;
	//##ModelId=46B5D43202A7
	MyCriticalSection	listLock;
	//##ModelId=46B5D43202AC
	IMPPConnection		* lastPick;
	//##ModelId=46B5D43202B0
	int								m_nMinWorkThreadsCount;
	//##ModelId=46B5D43202B1
	int								m_nMaxWorkThreadsCount;
	//##ModelId=46B5D43202BA
	BOOL							m_fStarted;

	//##ModelId=46B5D43202BB
	long							submitCountTotal;
	//##ModelId=46B5D43202BC
	long							submitSucceedCountTotal;
	//##ModelId=46B5D43202C4
	long							submitFailedCountTotal;
	//##ModelId=46B5D43202C5
	long							respSucceedCountTotal;
	//##ModelId=46B5D43202CE
	long							respFailedCountTotal;
	//##ModelId=46B5D43202CF
	long							deliverCountTotal;
	//##ModelId=46B5D43202D0
	long							sreportCountTotal;
};

//##ModelId=46B5D43202E2
struct srvthread_param {
	//##ModelId=46B5D43202ED
	CImppServer* csServer;
	//##ModelId=46B5D43202F2
	TCPSocket*	tsClient;
};


//
//用于处理消息和事件的线程池
//
//##ModelId=46B5D432030A
class CJobImpp:public IJobDesc {
public:
	//##ModelId=46B5D432030C
	CJobImpp(IMPP_SPTOSMG css, CImppServer* imppserv);
	//##ModelId=46B5D4320316
	~CJobImpp();

	//##ModelId=46B5D4320317
	void	OnCpMsg();
private:
	//##ModelId=46B5D4320319
	CImppServer*	m_imppserv;
	//##ModelId=46B5D432031F
	IMPP_SPTOSMG	m_cpmsg;
};

//##ModelId=46B5D4320328
class CWorkerImpp:public IWorker {
	//##ModelId=46B5D4320333
	virtual void ProcessJob( IJobDesc* pJobDesc );
};

/// IMPP服务端类
/** 服务端实现
*/
//##ModelId=46B5D43203A0
class CImppServer : public CImpp {
public:
	//##ModelId=46B5D43203AC
	TCPSocket	m_TsServer;
	//##ModelId=46B5D43203B0
	int			m_nLocalPort;
	//##ModelId=46B5D43203B1
	char		m_sLocalAddr[16];
	//##ModelId=46B5D43203B4
	bool		m_fStop;
	//##ModelId=46B5D43203B5
	int			m_nSocketTimeout;
	//##ModelId=46B5D43203B7
	client_conn	conn_list[255];
	//##ModelId=46B5D43203BE
	int			m_nConnectTotal;
	//##ModelId=46B5D43203BF
	HANDLE		m_hThread;
	//##ModelId=46B5D43203C0
	BOOL		m_fStarted;

	//##ModelId=46B5D43203C8
	void (*m_pCpMsg)(IMPP_SPTOSMG  css);

	//##ModelId=46B5D43203C9
	bool (*m_AuthClient)(
		char *pchIcpid, 
		char *pchAuth, 
		char *pchClientAddr, 
		char *pchSpId
		);
	
	//##ModelId=46B5D43203CB
	CThreadPool	m_pool;				//执行各种消息处理函数的线程池.
	//##ModelId=46B5D43203D3
	CWorkerImpp		m_worker;
	//##ModelId=46B5D43203D8
	CJobImpp		*m_pJob;

protected:
	//##ModelId=46B5D43203DE
	int LocalListen();

	//##ModelId=46B5D43203DF
	static DWORD WINAPI ImppServFunc(LPVOID pParam);
	//##ModelId=46B5D43203E7
	virtual DWORD ImppServProc();

	//##ModelId=46B5D4330008
	static DWORD WINAPI ImppClientFunc(LPVOID pParam);
	//##ModelId=46B5D433000B
	virtual DWORD ImppClientProc(TCPSocket* tsClient);

	//##ModelId=46B5D4330012
	SOCKET GetFromList(const char * sIcpid);
	//##ModelId=46B5D4330014
	void RemoveFromList(SOCKET hClient);
	//##ModelId=46B5D433001C
	void AddToList(SOCKET hClient, const char * sIcpid, const char * sSpid, int nVersion);
	//##ModelId=46B5D4330026
	bool IsLogined(const char * sSpId, SOCKET &hSock);
	
public:
	//##ModelId=46B5D4330029
	CImppServer();
	//##ModelId=46B5D4330030
	~CImppServer();

	//##ModelId=46B5D4330031
	int Start(
		char *pchServip, 
		int nServport, 
		void (*OnCpMsg)(IMPP_SPTOSMG  css), 
		bool (*OnAuthClient)(char *pchIcpid, char *pchAuth, char *pchClientAddr, char *pchSpId), 
		int nSocketTimeout
		);

	//##ModelId=46B5D4330044
	void Release();
	
	//##ModelId=46B5D4330045
	int Deliver(
		unsigned _int64 nMsgId,
		char *pchDestId, 
		char *pchServiceId, 
		unsigned char uchMsgFmt, 
		char *pchSrcTerminalId, 
		unsigned char uchRegisteredDelivery, 
		unsigned char uchMsgLen,
		char *pchMsgContent
		);
};

#endif // !defined(AFX_IMPP_H__A4DFA71A_1AAF_4DE6_A299_3A154220E698__INCLUDED_)

⌨️ 快捷键说明

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