📄 ~cmppconn.~h
字号:
void OnActiveTest();
void OnTerminate();
void OnConnectResponse();
void OnSubmitFailed();
void OnSubmitResponse();
void OnSubmiting();
JobType type;
protected:
CMPPClient & client;
CMPPConnection & connection;
cmpp_submit submitMsg;
cmpp_deliver deliverMsg;
cmpp_connect_resp connectRespMsg;
cmpp_submit_deliver_resp submitRespMsg;
int nResult;
};
class CWorkerCmpp : public IWorker {
virtual void ProcessJob( IJobDesc* pJobDesc );
};
///////////////////////////////////////////////////////////////////////////////
//
typedef std::list<CMPPConnection*> aList;
/// CMPP协议实现终端类
/** SP客户端实现,一个CMPPClient类可以创建和管理多个CMPPConnection类.用户开发短信网关程序只需要从CLIENT类派生即可.
*/
class CMPPClient
{
public:
/**@name Construction */
//@{
CMPPClient();
virtual ~CMPPClient();
//@}
/**@name GetFunctions */
//@{
/**得到提交的SUBMIT消息数
*/
long GetSubmitCount() const
{ return submitCountTotal; }
/**得到发送成功的SUBMIT消息数
*/
long GetSubmitSucceedCount() const
{ return submitSucceedCountTotal; }
/**得到发送失败的SUBMIT消息数
*/
long GetSubmitFailedCount() const
{ return submitFailedCountTotal; }
/**得到失败的SUBMITResponse消息数
*/
long GetRespFailedCount() const
{ return respFailedCountTotal; }
/**得到成功的SUBMITResponse消息数
*/
long GetRespSucceedCount() const
{ return respSucceedCountTotal; }
/**得到收到的Deliver消息数
*/
long GetDeliverCount() const
{ return deliverCountTotal; }
/**得到收到的StatusReport消息数
*/
long GetStatusReportCount() const
{ return sreportCountTotal; }
//@}
/**@name Main Functions */
//@{
/**初始化Client函数.
注意: 每个Client在进行所有操作之前必须调用Initialize()进行初始化操作
@param nMinWorkThreadsCount 指定线程池要启用的初始线程数
@param nMaxWorkThreadsCount 指定线程池允许使用的最大线程数
*/
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 如果成功连接的话,返回该连接的指针
*/
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,
BOOL sync
);
/**停止网关服务
*/
virtual void Release();
/**清除连接
*/
void ClearConnection(const char * token);
/**清除当前Client中的所有连接
*/
void ClearAllConnections();
/**发送一条Submit消息
*/
int Submit(cmpp_submit & message);
//@}
/**@name Callback functions */
//@{
/**登录网关成功时调用
*/
virtual void OnConnectionLogined(CMPPConnection & connection)
{
return;
}
/**登录网关失败时调用
*/
virtual void OnConnectionLoginFailed(
CMPPConnection & connection,
int errorCode
)
{
return;
}
/**同网关连接断开时调用
*/
virtual void OnConnectionCleared(CMPPConnection & connection)
{
return;
}
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
virtual BOOL OnConnectionSubmiting(
CMPPConnection & connection,
cmpp_submit _message
)
{
return TRUE;
}
/**发送SUBMIT消息成功时调用
*/
virtual void OnConnectionSubmited(
CMPPConnection & connection,
cmpp_submit _message
)
{
return;
}
/**发送SUBMIT消息失败时调用
*/
virtual void OnConnectionSubmitFailed(
CMPPConnection & connection,
cmpp_submit _message
)
{
return;
}
/**收到CONNECT_RESPONSE时调用
*/
virtual void OnReceivedConnectionConnectResponse(
CMPPConnection & connection,
cmpp_connect_resp _message
)
{
return;;
}
/**收到Terminate消息时调用
*/
virtual void OnReceivedConnectionTerminate(CMPPConnection & connection)
{
return;
}
/**收到SUBMIT_RESPONSE时调用
*/
virtual void OnReceivedConnectionSubmitResponse(
CMPPConnection & connection,
cmpp_submit_deliver_resp _message
)
{
return;
}
/**收到Deliver消息时调用
*/
virtual void OnReceivedConnectionDeliver(
CMPPConnection & connection,
cmpp_deliver _message
)
{
return;
}
/**收到STATUS_REPORT时调用
*/
virtual void OnReceivedConnectionStatusReport(
CMPPConnection & connection,
cmpp_deliver _message
)
{
return;
}
/**收到活动测试消息时调用
*/
virtual void OnReceivedConnectionActiveTest(CMPPConnection & connection)
{
return;
}
/**收到活动测试回复消息时调用
*/
virtual void OnReceivedConnectionActiveTestResponse(CMPPConnection & connection)
{
return;
}
/**输出日志时调用
格式化输出日志,默认是把内容//TRACE出来
*/
virtual void OnConnectionLogWrite(CMPPConnection & connection, const char * str);
//@}
public:
/**@name JobProcess functions */
//@{
BOOL ProcessConnectionSubmiting(
CMPPConnection & connection,
cmpp_submit _message
);
void ProcessConnectionSubmited(
CMPPConnection & connection,
cmpp_submit _message
);
void ProcessConnectionSubmitFailed(
CMPPConnection & connection,
cmpp_submit _message
);
void ProcessReceivedConnectionConnectResponse(
CMPPConnection & connection,
cmpp_connect_resp _message
);
void ProcessReceivedConnectionTerminate(CMPPConnection & connection);
void ProcessReceivedConnectionSubmitResponse(
CMPPConnection & connection,
cmpp_submit_deliver_resp _message
);
void ProcessReceivedConnectionDeliver(
CMPPConnection & connection,
cmpp_deliver _message
);
void ProcessReceivedConnectionStatusReport(
CMPPConnection & connection,
cmpp_deliver _message
);
void ProcessReceivedConnectionActiveTest(CMPPConnection & connection);
void ProcessReceivedConnectionActiveTestResponse(CMPPConnection & connection);
protected:
/**创建一个连接token
*/
const char * CMPPClient::CreateToken() const;
/**找到第一个可用的连接
*/
CMPPConnection * firstFitRouter(int start);
/**循环使用可用的连接
*/
CMPPConnection * roundRobinRouter();
/**记录Client日志信息和connection日志信息,默认将所有信息发送到调试窗口(Debug模式下)
*/
virtual void LogWrite( const char * pchFmt, ... );
///**执行消息发送
//*/
//void MakeSubmit(
// CMPPConnection & connection,
// cmpp_submit & message
// );
private:
CThreadPool m_pool;
CWorkerCmpp m_worker;
CJobCmpp * m_pJob;
aList connectionList;
//CCriticalSection m_listCS;
MyCriticalSection listLock;
CMPPConnection * lastPick;
int m_nMinWorkThreadsCount;
int m_nMaxWorkThreadsCount;
BOOL m_fStarted;
BOOL m_fExceeded;
long submitCountTotal;
long submitSucceedCountTotal;
long submitFailedCountTotal;
long respSucceedCountTotal;
long respFailedCountTotal;
long deliverCountTotal;
long sreportCountTotal;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -