📄 smgpconn.h
字号:
smgp_submit_deliver_resp submitRespMsg;
//##ModelId=46B5D43B01CC
int nResult;
};
//##ModelId=46B5D43B01D6
class CWorkerSmgp : public IWorker {
//##ModelId=46B5D43B01E1
virtual void ProcessJob( IJobDesc* pJobDesc );
};
/// SMGP客户端实现类
/** SP客户端实现,一个SMGPClient类可以创建和管理多个SMGPConnection类.用户开发短信网关程序只需要从CLIENT类派生即可.
*/
//##ModelId=46B5D43B02BD
class SMGPClient
{
public:
/**@name Construction */
//@{
//##ModelId=46B5D43B02C7
SMGPClient();
//##ModelId=46B5D43B02D1
virtual ~SMGPClient();
//@}
/**@name GetFunctions */
//@{
/**得到提交的SUBMIT消息数
*/
//##ModelId=46B5D43B02D3
long GetSubmitCount() const
{ return submitCountTotal; }
/**得到发送成功的SUBMIT消息数
*/
//##ModelId=46B5D43B02DB
long GetSubmitSucceedCount() const
{ return submitSucceedCountTotal; }
/**得到发送失败的SUBMIT消息数
*/
//##ModelId=46B5D43B02DD
long GetSubmitFailedCount() const
{ return submitFailedCountTotal; }
/**得到失败的SUBMITResponse消息数
*/
//##ModelId=46B5D43B02E5
long GetRespFailedCount() const
{ return respFailedCountTotal; }
/**得到成功的SUBMITResponse消息数
*/
//##ModelId=46B5D43B02E7
long GetRespSucceedCount() const
{ return respSucceedCountTotal; }
/**得到收到的Deliver消息数
*/
//##ModelId=46B5D43B02EF
long GetDeliverCount() const
{ return deliverCountTotal; }
/**得到收到的StatusReport消息数
*/
//##ModelId=46B5D43B02F1
long GetStatusReportCount() const
{ return sreportCountTotal; }
//@}
/**@name Main Functions */
//@{
///**创建一个连接token
//*/
//CString CreateToken() const;
//virtual void DumpStatus();
/**初始化Client函数.
注意: 每个Client在进行所有操作之前必须调用Initialize()进行初始化操作
*/
//##ModelId=46B5D43B02F3
void Initialize(
unsigned nMinWorkThreadsCount = 4,
unsigned nMaxWorkThreadsCount = 8,
unsigned short nListenPort = 11357
);
/**记录Client日志信息和connection日志信息,默认将所有信息发送到调试窗口(Debug模式下)
*/
//##ModelId=46B5D43B02FC
virtual void OnLogWrite(
const char * pchFmt,
...
);
/**建立一个连接
*/
//##ModelId=46B5D43B0304
SMGPConnection * MakeConnection(
const char * _smghost,
const unsigned short & _smgport,
const unsigned char & _smgversion,
const char * _username,
const char * _password,
const ConnectionType & _conntype,
const int & _nActivetestInterval,
const char * _localhost = NULL,
const unsigned short & _localport = 0,
BOOL sync = TRUE
);
/**停止网关服务
*/
//##ModelId=46B5D43B0317
virtual void Release();
/**清除连接
*/
//##ModelId=46B5D43B0319
void ClearConnection(
const char * token
);
/**清除当前Client中的所有连接
*/
//##ModelId=46B5D43B0321
void ClearAllConnections();
/**找到第一个可用的连接
*/
//##ModelId=46B5D43B0322
SMGPConnection * firstFitRouter(
int start
);
/**循环使用可用的连接
*/
//##ModelId=46B5D43B0324
SMGPConnection * roundRobinRouter();
/**发送一条Submit消息
*/
//##ModelId=46B5D43B032B
int Submit(
smgp_submit & message
);
//@}
/**@name Callback functions */
//@{
/**登录网关成功时调用
*/
//##ModelId=46B5D43B032D
virtual void OnConnectionLogined(
SMGPConnection & connection
)
{
return;
}
/**登录网关失败时调用
*/
//##ModelId=46B5D43B0336
virtual void OnConnectionLoginFailed(
SMGPConnection & connection,
int errorCode
)
{
return;
}
/**同网关连接断开时调用
*/
//##ModelId=46B5D43B033A
virtual void OnConnectionCleared(
SMGPConnection & connection
)
{
return;
}
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
//##ModelId=46B5D43B033F
virtual BOOL OnConnectionSubmiting(
SMGPConnection & connection,
smgp_submit _message
)
{
return TRUE;
}
/**发送SUBMIT消息成功时调用
*/
//##ModelId=46B5D43B0343
virtual void OnConnectionSubmited(
SMGPConnection & connection,
smgp_submit _message
)
{
return;
}
/**发送SUBMIT消息失败时调用
*/
//##ModelId=46B5D43B0349
virtual void OnConnectionSubmitFailed(
SMGPConnection & connection,
smgp_submit _message
)
{
return;
}
/**收到CONNECT_RESPONSE时调用
*/
//##ModelId=46B5D43B034D
virtual void OnReceivedConnectionConnectResponse(
SMGPConnection & connection,
smgp_connect_resp _message
)
{
return;;
}
/**收到Terminate消息时调用
*/
//##ModelId=46B5D43B0353
virtual void OnReceivedConnectionTerminate(
SMGPConnection & connection
)
{
return;
}
/**收到SUBMIT_RESPONSE时调用
*/
//##ModelId=46B5D43B0356
virtual void OnReceivedConnectionSubmitResponse(
SMGPConnection & connection,
smgp_submit_deliver_resp _message
)
{
return;
}
/**收到Deliver消息时调用
*/
//##ModelId=46B5D43B035A
virtual void OnReceivedConnectionDeliver(
SMGPConnection & connection,
smgp_deliver _message
)
{
return;
}
/**收到STATUS_REPORT时调用
*/
//##ModelId=46B5D43B035F
virtual void OnReceivedConnectionStatusReport(
SMGPConnection & connection,
smgp_deliver _message
)
{
return;
}
/**收到活动测试消息时调用
*/
//##ModelId=46B5D43B0363
virtual void OnReceivedConnectionActiveTest(
SMGPConnection & connection
)
{
return;
}
/**收到活动测试回复消息时调用
*/
//##ModelId=46B5D43B0367
virtual void OnReceivedConnectionActiveTestResponse(
SMGPConnection & connection
)
{
return;
}
/**输出日志时调用
格式化输出日志,默认是把内容//TRACE出来
*/
//##ModelId=46B5D43B036A
virtual void OnConnectionLogWrite(
SMGPConnection & connection,
const char * str
);
//@}
BOOL IsBusy();
protected:
/**创建一个连接token
*/
//##ModelId=46B5D43B0371
const char * CreateToken() const;
public:
/**@name JobProcess functions */
//@{
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
//##ModelId=46B5D43B0373
BOOL ProcessConnectionSubmiting(
SMGPConnection & connection,
smgp_submit _message
);
/**发送SUBMIT消息成功时调用
*/
//##ModelId=46B5D43B037B
void ProcessConnectionSubmited(
SMGPConnection & connection,
smgp_submit _message
);
/**发送SUBMIT消息失败时调用
*/
//##ModelId=46B5D43B037E
void ProcessConnectionSubmitFailed(
SMGPConnection & connection,
smgp_submit _message
);
/**收到CONNECT_RESPONSE时调用
*/
//##ModelId=46B5D43B0381
void ProcessReceivedConnectionConnectResponse(
SMGPConnection & connection,
smgp_connect_resp _message
);
/**收到Terminate消息时调用
*/
//##ModelId=46B5D43B0387
void ProcessReceivedConnectionTerminate(
SMGPConnection & connection
);
/**收到SUBMIT_RESPONSE时调用
*/
//##ModelId=46B5D43B0389
void ProcessReceivedConnectionSubmitResponse(
SMGPConnection & connection,
smgp_submit_deliver_resp _message
);
/**收到Deliver消息时调用
*/
//##ModelId=46B5D43B038C
void ProcessReceivedConnectionDeliver(
SMGPConnection & connection,
smgp_deliver _message
);
/**收到STATUS_REPORT时调用
*/
//##ModelId=46B5D43B0391
void ProcessReceivedConnectionStatusReport(
SMGPConnection & connection,
smgp_deliver _message
);
/**收到活动测试消息时调用
*/
//##ModelId=46B5D43B0394
void ProcessReceivedConnectionActiveTest(SMGPConnection & connection);
/**收到活动测试回复消息时调用
*/
//##ModelId=46B5D43B0399
void ProcessReceivedConnectionActiveTestResponse(SMGPConnection & connection);
//##ModelId=46B5D43B039B
unsigned short GetLocalPort()
{
long returnPort = ::InterlockedIncrement((long*)&ushLocalPort);
if (returnPort - ushLocalPort > 1000) {
ushLocalPort -= 1000;
}
return (unsigned short)returnPort;
}
protected:
//##ModelId=46B5D43B039D
CThreadPool m_pool;
//##ModelId=46B5D43B03A4
CWorkerSmgp m_worker;
//##ModelId=46B5D43B03A9
CJobSmgp * m_pJob;
//##ModelId=46B5D43B03AE
aList connectionList;
//##ModelId=46B5D43B03B8
MyCriticalSection listLock;
//##ModelId=46B5D43B03BD
SMGPConnection * lastPick;
//##ModelId=46B5D43B03C1
int m_nMinWorkThreadsCount;
//##ModelId=46B5D43B03C2
int m_nMaxWorkThreadsCount;
//##ModelId=46B5D43B03CB
BOOL m_fStarted;
//##ModelId=46B5D43B03CC
BOOL m_fExceeded;
//##ModelId=46B5D43B03D5
long submitCountTotal; ///< 提交的SUBMIT消息数
//##ModelId=46B5D43B03D6
long submitSucceedCountTotal; ///< SUBMIT发送成功消息数
//##ModelId=46B5D43B03DF
long submitFailedCountTotal; ///< SUBMIT发送失败消息数
//##ModelId=46B5D43B03E0
long respSucceedCountTotal; ///< 收到的成功的submitresponse消息数
//##ModelId=46B5D43B03E1
long respFailedCountTotal; ///< 收到的失败的submitresponse消息数
//##ModelId=46B5D43C0001
long deliverCountTotal; ///< 收到的Deliver消息数
//##ModelId=46B5D43C0002
long sreportCountTotal; ///< 状态报告数
//##ModelId=46B5D43C000B
long ushLocalPort; ///< 本地监听起始端口
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -