📄 smgpconn.h
字号:
/**
* smgpconn.h
*
* Short Message Abstractive Library.(SMAL)
*
* Copyright 2003-2006 北京风起水流软件工作室
*
* http://www.zealware.com
*
* princetoad@gmail.com
*
*/
#ifndef _SMGP_CONNECTION_H
#define _SMGP_CONNECTION_H
#include <smal.h>
#include <common/util.h>
#include <list>
#include <smgp/smgp_message.h>
#include <common/tcpsocket.h>
#include <smgp/smgpbase.h>
#include <common/threadpool.h>
class SMGPClient;
/// SMGP连接类
/** 实现了一个SMGP连接,用户可以通过一个连接进行消息收发,连接本身具有活动测试,断开自动重连等功能.
*/
//##ModelId=46B5D43A00D1
class SMGPConnection : public CSmgp
{
public:
/**@name Construction */
//@{
/**构造函数
*/
//##ModelId=46B5D43A00DC
SMGPConnection(
SMGPClient & _client, ///< connection所属的client
const char * _token, ///< connection的标识
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 = "", ///< 本地绑定地址
const unsigned short & _localport = 0, ///< 本地绑定端口
BOOL sync = TRUE ///< 是否同步,知道连接结束
);
/**初始化变量
*/
//##ModelId=46B5D43A010D
void Initialize();
/**打印统计信息
*/
//##ModelId=46B5D43A0135
virtual void DumpStatus();
/**析构函数
*/
//##ModelId=46B5D43A015D
virtual ~SMGPConnection();
//@}
/**@name GetFunctions */
//@{
/**得到所属的client
*/
//##ModelId=46B5D43A017B
SMGPClient & GetClient() const
{ return client; }
/**得到连接标识
*/
//##ModelId=46B5D43A0185
const char * GetToken() const
{ return token; }
/**得到网关地址
*/
//##ModelId=46B5D43A018F
const char * GetSmgHost() const
{ return smghost; }
/**得到网关端口
*/
//##ModelId=46B5D43A0199
int GetSmgPort() const
{ return (int)smgport; }
/**得到登录用户名
*/
//##ModelId=46B5D43A019B
const char * GetUserName() const
{ return username; }
/**得到登录口令
*/
//##ModelId=46B5D43A01A4
const char * GetPassword() const
{ return password; }
/**得到连接类型
*/
//##ModelId=46B5D43A01AD
ConnectionType GetConnectionType() const
{ return conntype; }
/**得到发送的SUBMIT消息数
*/
//##ModelId=46B5D43A01B7
long GetSubmitCount() const
{ return submitCount; }
/**得到发送成功的SUBMIT消息数
*/
//##ModelId=46B5D43A01C1
long GetSubmitSucceedCount() const
{ return submitSucceedCount; }
/**得到发送失败的SUBMIT消息数
*/
//##ModelId=46B5D43A01CB
long GetSubmitFailedCount() const
{ return submitFailedCount; }
/**得到失败的SUBMITResponse消息数
*/
//##ModelId=46B5D43A01D5
long GetRespFailedCount() const
{ return respFailedCount; }
/**得到成功的SUBMITResponse消息数
*/
//##ModelId=46B5D43A01D7
long GetRespSucceedCount() const
{ return respSucceedCount; }
/**得到收到的Deliver消息数
*/
//##ModelId=46B5D43A01DF
long GetDeliverCount() const
{ return deliverCount; }
/**得到收到的StatusReport消息数
*/
//##ModelId=46B5D43A01E9
long GetStatusReportCount() const
{ return sreportCount; }
/**当前连接是否忙碌
*/
//##ModelId=46B5D43A01F3
BOOL IsBusy() const
{ return m_fBusy; }
/**设置当前连接忙闲状态
*/
//##ModelId=46B5D43A01F5
void SetBusy(BOOL status)
{ m_fBusy = status; }
/**连接是否已经启动
*/
//##ModelId=46B5D43A01FD
BOOL IsOpened()
{ return m_fLogined/* && m_fStarted*/; }
/**连接是否可用
*/
//##ModelId=46B5D43A0207
BOOL IsReady()
{ return IsOpened() && !IsBusy(); }
/**是否可以发送消息
*/
//##ModelId=46B5D43A0208
BOOL CanMakeSubmit()
{ return (conntype != e_RecvOnly) && IsReady(); }
//@}
/**@name SMGP Command Function */
//@{
/**清除连接 */
//##ModelId=46B5D43A0211
void Clear();
/**发送SUBMIT消息
*/
//##ModelId=46B5D43A0225
inline int Submit(
smgp_submit & _message
);
/**主动发活动测试包
*/
//##ModelId=46B5D43A0243
inline int ActiveTest();
//@}
/**@name Callback functions */
//@{
/**登录网关成功时调用
*/
//##ModelId=46B5D43A0257
virtual void OnLogined();
/**登录网关失败时调用
*/
//##ModelId=46B5D43A0261
virtual void OnLoginFailed( int errorCode );
/**同网关连接断开时调用
*/
//##ModelId=46B5D43A0275
virtual void OnCleared();
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
//##ModelId=46B5D43A027F
virtual BOOL OnSubmiting( smgp_submit _message );
/**发送SUBMIT消息成功时调用
*/
//##ModelId=46B5D43A0293
virtual void OnSubmited( smgp_submit _message );
/**发送SUBMIT消息失败时调用 */
//##ModelId=46B5D43A029D
virtual void OnSubmitFailed( smgp_submit _message );
/**收到CONNECT_RESPONSE时调用
*/
//##ModelId=46B5D43A02B1
virtual void OnReceivedConnectResponse( smgp_connect_resp _message );
/**收到Terminate消息时调用
*/
//##ModelId=46B5D43A02BB
virtual void OnReceivedTerminate();
/**收到SUBMIT_RESPONSE时调用
*/
//##ModelId=46B5D43A02CF
virtual void OnReceivedSubmitResponse( smgp_submit_deliver_resp _message );
/**收到Deliver消息时调用
*/
//##ModelId=46B5D43A02D9
virtual void OnReceivedDeliver( smgp_deliver _message );
/**收到STATUS_REPORT时调用
*/
//##ModelId=46B5D43A02E3
virtual void OnReceivedStatusReport( smgp_deliver _message );
/**收到活动测试消息时调用
*/
//##ModelId=46B5D43A02ED
virtual void OnReceivedActiveTest();
/**收到活动测试回复消息时调用
*/
//##ModelId=46B5D43A02F7
virtual void OnReceivedActiveTestResponse();
/**输出日志时调用
格式化输出日志,默认是把内容//TRACE出来
*/
//##ModelId=46B5D43A030B
virtual void OnLogWrite( LPCTSTR pchFmt, ... );
//@}
//##ModelId=46B5D43A030F
BOOL isOK;
protected:
/**建立网关连接,启动消息接收模块
*/
//##ModelId=46B5D43A0315
int CreateConnection();
/**连接网关,登录网关
*/
//##ModelId=46B5D43A031F
int Connect( BOOL outputdebug = TRUE );
/**断开连接
*/
//##ModelId=46B5D43A033E
void Terminate();
/**接收SMG方面的所有消息
*/
//##ModelId=46B5D43A035C
inline int RecvSmgMsg(
smgp_smgtosp * css,
unsigned int & nResult
);
/**用于接收消息
*/
//##ModelId=46B5D43A0366
static DWORD WINAPI RecvFunc( LPVOID pParam );
//##ModelId=46B5D43A037A
virtual DWORD RecvProc();
//virtual DWORD RecvProcMO();
protected:
//##ModelId=46B5D43A03A3
SMGPClient & client; ///< 所属client
//##ModelId=46B5D43A03AC
char token[MAX_PATH]; ///< 连接ID(YYMMDDhhmmsslll)
//##ModelId=46B5D43A03B6
char localhost[MAX_PATH]; ///< 本地绑定地址
//##ModelId=46B5D43A03B7
unsigned short localport; ///< 本地绑定端口
//##ModelId=46B5D43A03C0
char smghost[MAX_PATH]; ///< 网关地址
//##ModelId=46B5D43A03CA
unsigned short smgport; ///< 网关端口
//##ModelId=46B5D43A03D4
//unsigned char smgversion; ///< 网关支持的最高版本号
//##ModelId=46B5D43A03D5
char username[MAX_PATH]; ///< 网关登录用户名
//##ModelId=46B5D43A03DE
char password[MAX_PATH]; ///< 网关登录口令
//##ModelId=46B5D43B0001
ConnectionType conntype; ///< 网关连接类型
//##ModelId=46B5D43B000B
TCPSocket m_socket; ///< TCPSOCKET类
//##ModelId=46B5D43B000F
BOOL m_fStop; ///< 停止标志.
//##ModelId=46B5D43B0014
BOOL m_fLogined; ///< 是否成功登录
//##ModelId=46B5D43B001E
BOOL m_fStarted; ///< 是否成功启动
//##ModelId=46B5D43B001F
BOOL m_fBusy; ///< 是否正在发送消息
//##ModelId=46B5D43B0028
int m_RetryInterval;///< 重试时间间隔(ms)
//##ModelId=46B5D43B0029
BOOL m_fAutoResp; ///< 是否自动回复
//##ModelId=46B5D43B0033
MyCriticalSection m_socketCS; ///< socket句柄锁
//##ModelId=46B5D43B003C
HANDLE m_hRecvThread; ///< 接收线程句柄.
//##ModelId=46B5D43B0046
char connectTime[MAX_PATH]; ///< 成功连接网关的时间
//##ModelId=46B5D43B0047
char loginTime[MAX_PATH]; ///< 成功登录时间
//##ModelId=46B5D43B0050
char disconnectTime[MAX_PATH]; ///< 断开时间
//##ModelId=46B5D43B0051
long submitCount; ///< 提交的SUBMIT消息数
//##ModelId=46B5D43B005A
long submitSucceedCount; ///< SUBMIT发送成功消息数
//##ModelId=46B5D43B0064
long submitFailedCount;///< SUBMIT发送失败消息数
//##ModelId=46B5D43B0065
long respSucceedCount;///< 收到的submitresponse消息数
//##ModelId=46B5D43B006E
long respFailedCount;///< 收到的submitresponse消息数
//##ModelId=46B5D43B0078
long deliverCount; ///< 收到的Deliver消息数
//##ModelId=46B5D43B0082
long sreportCount; ///< 状态报告数
};
typedef std::list<SMGPConnection*> aList;
//
//用于处理消息和事件的线程池
//
//##ModelId=46B5D43B00F0
class CJobSmgp : public IJobDesc {
public:
//##ModelId=46B5D43B00F2
CJobSmgp(SMGPClient & _client, SMGPConnection & _connection, JobType _type);
//##ModelId=46B5D43B00FC
CJobSmgp(SMGPClient & _client, SMGPConnection & _connection, JobType _type, smgp_submit_deliver_resp _message);
//##ModelId=46B5D43B010E
CJobSmgp(SMGPClient & _client, SMGPConnection & _connection, JobType _type, smgp_deliver _message);
//##ModelId=46B5D43B0118
CJobSmgp(SMGPClient & _client, SMGPConnection & _connection, JobType _type, smgp_submit _message, int nResult = 0);
//##ModelId=46B5D43B0122
~CJobSmgp();
//##ModelId=46B5D43B012C
void OnSendSubmit();
//##ModelId=46B5D43B0136
void OnSubmitSucceed();
//##ModelId=46B5D43B0137
void OnDeliver();
//##ModelId=46B5D43B0140
void OnStatusReport();
//##ModelId=46B5D43B014A
void OnActiveTestResponse();
//##ModelId=46B5D43B0154
void OnActiveTest();
//##ModelId=46B5D43B0155
void OnCancelResponse();
//##ModelId=46B5D43B015E
void OnTerminate();
//##ModelId=46B5D43B0168
void OnConnectResponse();
//##ModelId=46B5D43B0169
void OnSubmitFailed();
//##ModelId=46B5D43B017C
void OnSubmitResponse();
//##ModelId=46B5D43B017D
void OnSubmiting();
//##ModelId=46B5D43B0191
JobType type;
protected:
//##ModelId=46B5D43B0196
SMGPClient & client;
//##ModelId=46B5D43B019B
SMGPConnection & connection;
//##ModelId=46B5D43B01A5
smgp_submit submitMsg;
//##ModelId=46B5D43B01AF
smgp_deliver deliverMsg;
//##ModelId=46B5D43B01B9
smgp_connect_resp connectRespMsg;
//##ModelId=46B5D43B01C3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -