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

📄 cmppconn.h

📁 SMAL是short message abstract library的缩写,是由风起水流软件工作室(www.zealware.com)开发的一个支持短信网关系统开发的C++底层抽象接口库
💻 H
📖 第 1 页 / 共 2 页
字号:
	CJobCmpp(CMPPClient	& _client, CMPPConnection	& _connection, JobType _type, cmpp_submit_deliver_resp _message);

	//##ModelId=46B5D43E0036
	CJobCmpp(CMPPClient	& _client, CMPPConnection	& _connection, JobType _type, cmpp_deliver _message);

	//##ModelId=46B5D43E0040
	CJobCmpp(CMPPClient	& _client, CMPPConnection	& _connection, JobType _type, cmpp_submit _message, int nResult = 0);

	//##ModelId=46B5D43E004A
	~CJobCmpp();

	//##ModelId=46B5D43E0054
	void	OnSendSubmit();
	//##ModelId=46B5D43E005E
	void	OnSubmitSucceed();
	//##ModelId=46B5D43E0068
	void	OnDeliver();
	//##ModelId=46B5D43E0072
	void	OnStatusReport();
	//##ModelId=46B5D43E007C
	void	OnActiveTestResponse();
	//##ModelId=46B5D43E0086
	void	OnActiveTest();
	//##ModelId=46B5D43E0090
	void	OnTerminate();
	//##ModelId=46B5D43E009A
	void	OnConnectResponse();
	//##ModelId=46B5D43E009B
	void	OnSubmitFailed();
	//##ModelId=46B5D43E00A4
	void	OnSubmitResponse();
	//##ModelId=46B5D43E00AE
	void	OnSubmiting();
	//##ModelId=46B5D43E00B9
	JobType						type;

protected:
	//##ModelId=46B5D43E00C3
	CMPPClient				& client;
	//##ModelId=46B5D43E00CD
	CMPPConnection		& connection;
	//##ModelId=46B5D43E00D2
	cmpp_submit				submitMsg;
	//##ModelId=46B5D43E00D9
	cmpp_deliver			deliverMsg;
	//##ModelId=46B5D43E00E1
	cmpp_connect_resp	connectRespMsg;
	//##ModelId=46B5D43E00EB
	cmpp_submit_deliver_resp submitRespMsg;
	//##ModelId=46B5D43E00F4
	int								nResult;
};

//##ModelId=46B5D43E00FE
class CWorkerCmpp : public IWorker {
	//##ModelId=46B5D43E0109
	virtual void ProcessJob( IJobDesc* pJobDesc );
};

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

typedef std::list<CMPPConnection*> aList;

/// CMPP协议实现终端类
/** SP客户端实现,一个CMPPClient类可以创建和管理多个CMPPConnection类.用户开发短信网关程序只需要从CLIENT类派生即可.
*/
//##ModelId=46B5D43E01C7
class CMPPClient 
{
public:
	/**@name Construction */
	//@{
	//##ModelId=46B5D43E01D1
	CMPPClient();

	//##ModelId=46B5D43E01DB
	virtual ~CMPPClient();
	//@}

	/**@name GetFunctions */
	//@{
	/**得到提交的SUBMIT消息数 
	*/
	//##ModelId=46B5D43E01DD
	long GetSubmitCount() const
	{	return submitCountTotal;		}

	/**得到发送成功的SUBMIT消息数 
	*/
	//##ModelId=46B5D43E01E5
	long GetSubmitSucceedCount() const
	{	return submitSucceedCountTotal;		}

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

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

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

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

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

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

	/**初始化Client函数.
	注意: 每个Client在进行所有操作之前必须调用Initialize()进行初始化操作
	@param nMinWorkThreadsCount	指定线程池要启用的初始线程数
	@param nMaxWorkThreadsCount	指定线程池允许使用的最大线程数
	*/
	//##ModelId=46B5D43E01F9
	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=46B5D43E01FC
	CMPPConnection * MakeConnection(
		const char * _smghost,
		const unsigned short & _smgport,
		const unsigned char	& _smgversion,
		const char * _username,
		const char * _password,
		const char * _icpid,
		const ConnectionType & _conntype,
		const BOOL & _isAsiaInfoSmg,
		const int & _nActivetestInterval,
    const int & _nConnectionTimeout,
		BOOL sync
		);

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

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

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

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

  /************************************************************************/
  /*                                                                      */
  /************************************************************************/
  int Submit_LongSMS( cmpp_submit & message );

	//@}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  BOOL IsBusy();

public:
	/**@name JobProcess functions */
	//@{
	//##ModelId=46B5D43E025D
	BOOL ProcessConnectionSubmiting(
		CMPPConnection & connection,
		cmpp_submit _message
		);

	//##ModelId=46B5D43E0260
	void ProcessConnectionSubmited(
		CMPPConnection & connection,
		cmpp_submit _message
		);

	//##ModelId=46B5D43E0267
	void ProcessConnectionSubmitFailed(
		CMPPConnection & connection,
		cmpp_submit _message
		);

	//##ModelId=46B5D43E026A
	void ProcessReceivedConnectionConnectResponse(
		CMPPConnection & connection,
		cmpp_connect_resp _message
		);

	//##ModelId=46B5D43E026D
	void ProcessReceivedConnectionTerminate(CMPPConnection & connection);

	//##ModelId=46B5D43E0271
	void ProcessReceivedConnectionSubmitResponse(
		CMPPConnection & connection,
		cmpp_submit_deliver_resp _message
		);

	//##ModelId=46B5D43E0274
	void ProcessReceivedConnectionDeliver(
		CMPPConnection & connection,
		cmpp_deliver _message
		);

	//##ModelId=46B5D43E0277
	void ProcessReceivedConnectionStatusReport(
		CMPPConnection & connection,
		cmpp_deliver _message
		);

	//##ModelId=46B5D43E027B
	void ProcessReceivedConnectionActiveTest(CMPPConnection & connection);

	//##ModelId=46B5D43E027D
	void ProcessReceivedConnectionActiveTestResponse(CMPPConnection & connection);

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

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

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

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

	///**执行消息发送 
	//*/
	//void MakeSubmit(
	//	CMPPConnection & connection, 
	//	cmpp_submit & message
	//	);

private:
	//##ModelId=46B5D43E0294
	CThreadPool				m_pool;
	//##ModelId=46B5D43E029C
	CWorkerCmpp						m_worker;
	//##ModelId=46B5D43E02A4
	CJobCmpp							* m_pJob;
	//CCriticalSection	m_listCS;
	//##ModelId=46B5D43E02B8
	CMPPConnection		* lastPick;
	//##ModelId=46B5D43E02BC
	int								m_nMinWorkThreadsCount;
	//##ModelId=46B5D43E02C1
	int								m_nMaxWorkThreadsCount;
	//##ModelId=46B5D43E02C2
	BOOL							m_fStarted;
	//##ModelId=46B5D43E02C3
	BOOL							m_fExceeded;

	//##ModelId=46B5D43E02CB
	long							submitCountTotal;
	//##ModelId=46B5D43E02CC
	long							submitSucceedCountTotal;
	//##ModelId=46B5D43E02CD
	long							submitFailedCountTotal;
	//##ModelId=46B5D43E02D5
	long							respSucceedCountTotal;
	//##ModelId=46B5D43E02D6
	long							respFailedCountTotal;
	//##ModelId=46B5D43E02DF
	long							deliverCountTotal;
	//##ModelId=46B5D43E02E0
	long							sreportCountTotal;

  public:
    //##ModelId=46B5D43E02AE
    MyCriticalSection listLock;
    //##ModelId=46B5D43E02A9
    aList							connectionList;
};

#endif

⌨️ 快捷键说明

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