📄 cmppconn.h
字号:
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 + -