📄 cngpconn.h
字号:
{ return submitSucceedCountTotal; }
/**得到发送失败的SUBMIT消息数
*/
//##ModelId=46B5D4380006
long GetSubmitFailedCount() const
{ return submitFailedCountTotal; }
/**得到失败的SUBMITResponse消息数
*/
//##ModelId=46B5D438000F
long GetRespFailedCount() const
{ return respFailedCountTotal; }
/**得到成功的SUBMITResponse消息数
*/
//##ModelId=46B5D4380011
long GetRespSucceedCount() const
{ return respSucceedCountTotal; }
/**得到收到的Deliver消息数
*/
//##ModelId=46B5D438001A
long GetDeliverCount() const
{ return deliverCountTotal; }
/**得到收到的StatusReport消息数
*/
//##ModelId=46B5D4380024
long GetStatusReportCount() const
{ return sreportCountTotal; }
//@}
/**@name Main Functions */
//@{
/**创建一个连接token
*/
//##ModelId=46B5D4380026
const char * CreateToken() const;
//virtual void DumpStatus();
/**初始化Client函数.
注意: 每个Client在进行所有操作之前必须调用Initialize()进行初始化操作
*/
//##ModelId=46B5D438004C
void Initialize(
unsigned nMinWorkThreadsCount = 4,
unsigned nMaxWorkThreadsCount = 8,
unsigned short nListenPort = 11357
);
/**记录Client日志信息和connection日志信息,默认将所有信息发送到调试窗口(Debug模式下)
*/
//##ModelId=46B5D438006A
virtual void OnLogWrite(const char * pchFmt, ...);
/**建立一个连接
*/
//##ModelId=46B5D4380088
CNGPConnection * 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=46B5D4380100
virtual void Release();
/**清除连接
*/
//##ModelId=46B5D438011E
void ClearConnection(const char * token);
/**清除当前Client中的所有连接
*/
//##ModelId=46B5D438013C
void ClearAllConnections();
/**找到第一个可用的连接
*/
//##ModelId=46B5D4380150
CNGPConnection * firstFitRouter(int start);
/**循环使用可用的连接
*/
//##ModelId=46B5D4380164
CNGPConnection * roundRobinRouter();
/**发送一条Submit消息
*/
//##ModelId=46B5D4380182
int Submit(cngp_submit & message);
//@}
/**@name Callback functions */
//@{
/**登录网关成功时调用
*/
//##ModelId=46B5D4380196
virtual void OnConnectionLogined(CNGPConnection & connection) {
return;
}
/**登录网关失败时调用
*/
//##ModelId=46B5D43801A1
virtual void OnConnectionLoginFailed(
CNGPConnection & connection,
int errorCode
) {
return;
}
/**同网关连接断开时调用
*/
//##ModelId=46B5D43801AA
virtual void OnConnectionCleared(CNGPConnection & connection) {
return;
}
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
//##ModelId=46B5D43801B4
virtual BOOL OnConnectionSubmiting(
CNGPConnection & connection,
cngp_submit _message
) {
return TRUE;
}
/**发送SUBMIT消息成功时调用
*/
//##ModelId=46B5D43801BE
virtual void OnConnectionSubmited(
CNGPConnection & connection,
cngp_submit _message
) {
return;
}
/**发送SUBMIT消息失败时调用
*/
//##ModelId=46B5D43801C2
virtual void OnConnectionSubmitFailed(
CNGPConnection & connection,
cngp_submit _message
) {
return;
}
/**收到CONNECT_RESPONSE时调用
*/
//##ModelId=46B5D43801CB
virtual void OnReceivedConnectionConnectResponse(
CNGPConnection & connection,
cngp_login_resp _message
) {
return;;
}
/**收到Terminate消息时调用
*/
//##ModelId=46B5D43801D5
virtual void OnReceivedConnectionTerminate(CNGPConnection & connection) {
return;
}
/**收到SUBMIT_RESPONSE时调用
*/
//##ModelId=46B5D43801DD
virtual void OnReceivedConnectionSubmitResponse(
CNGPConnection & connection,
cngp_submit_deliver_resp _message
) {
return;
}
/**收到Deliver消息时调用
*/
//##ModelId=46B5D43801E6
virtual void OnReceivedConnectionDeliver(
CNGPConnection & connection,
cngp_deliver _message
) {
return;
}
/**收到STATUS_REPORT时调用
*/
//##ModelId=46B5D43801F0
virtual void OnReceivedConnectionStatusReport(
CNGPConnection & connection,
cngp_deliver _message
) {
return;
}
/**收到活动测试消息时调用
*/
//##ModelId=46B5D43801FA
virtual void OnReceivedConnectionActiveTest(CNGPConnection & connection) {
return;
}
/**收到活动测试回复消息时调用
*/
//##ModelId=46B5D43801FD
virtual void OnReceivedConnectionActiveTestResponse(CNGPConnection & connection) {
return;
}
/**输出日志时调用
格式化输出日志,默认是把内容//TRACE出来
*/
//##ModelId=46B5D4380205
virtual void OnConnectionLogWrite(CNGPConnection & connection, const char * str);
///** 当没有可用连接时调用
//*/
////##ModelId=46B5D438022C
//virtual void OnNoAvailableConnection( cngp_submit & _message ) {
// ::InterlockedIncrement((long*)&submitFailedCountTotal);
// return;
//}
//@}
BOOL IsBusy();
public:
/**@name JobProcess functions */
//@{
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
//##ModelId=46B5D4380236
BOOL ProcessConnectionSubmiting(
CNGPConnection & connection,
cngp_submit _message
);
/**发送SUBMIT消息成功时调用
*/
//##ModelId=46B5D438024A
void ProcessConnectionSubmited(
CNGPConnection & connection,
cngp_submit _message
);
/**发送SUBMIT消息失败时调用
*/
//##ModelId=46B5D438025E
void ProcessConnectionSubmitFailed(
CNGPConnection & connection,
cngp_submit _message
);
/**收到CONNECT_RESPONSE时调用
*/
//##ModelId=46B5D4380272
void ProcessReceivedConnectionConnectResponse(
CNGPConnection & connection,
cngp_login_resp _message
);
/**收到Terminate消息时调用
*/
//##ModelId=46B5D4380290
void ProcessReceivedConnectionTerminate(CNGPConnection & connection);
/**收到SUBMIT_RESPONSE时调用
*/
//##ModelId=46B5D43802A4
void ProcessReceivedConnectionSubmitResponse(
CNGPConnection & connection,
cngp_submit_deliver_resp _message
);
/**收到Deliver消息时调用
*/
//##ModelId=46B5D43802B8
void ProcessReceivedConnectionDeliver(
CNGPConnection & connection,
cngp_deliver _message
);
/**收到STATUS_REPORT时调用
*/
//##ModelId=46B5D43802CC
void ProcessReceivedConnectionStatusReport(
CNGPConnection & connection,
cngp_deliver _message
);
/**收到活动测试消息时调用
*/
//##ModelId=46B5D43802E1
void ProcessReceivedConnectionActiveTest(CNGPConnection & connection);
/**收到活动测试回复消息时调用
*/
//##ModelId=46B5D43802F5
void ProcessReceivedConnectionActiveTestResponse(CNGPConnection & connection);
//##ModelId=46B5D4380309
unsigned short GetLocalPort() {
long returnPort = ::InterlockedIncrement((long*)&ushLocalPort);
if (returnPort - ushLocalPort > 1000) {
ushLocalPort -= 1000;
}
return (unsigned short)returnPort;
}
protected:
//##ModelId=46B5D438030B
CThreadPool m_pool;
//##ModelId=46B5D4380316
CWorkerCngp m_worker;
//##ModelId=46B5D438031E
CJobCngp * m_pJob;
//##ModelId=46B5D4380332
aList connectionList;
//##ModelId=46B5D438033C
MyCriticalSection listLock;
//##ModelId=46B5D4380341
CNGPConnection * lastPick;
//##ModelId=46B5D4380345
int m_nMinWorkThreadsCount;
//##ModelId=46B5D438034F
int m_nMaxWorkThreadsCount;
//##ModelId=46B5D4380350
BOOL m_fStarted; ///< 线程池是否已经启动
//##ModelId=46B5D4380359
BOOL m_fExceeded;
//##ModelId=46B5D4380363
long submitCountTotal; ///< 提交的SUBMIT消息数
//##ModelId=46B5D438036D
long submitSucceedCountTotal; ///< SUBMIT发送成功消息数
//##ModelId=46B5D438036E
long submitFailedCountTotal; ///< SUBMIT发送失败消息数
//##ModelId=46B5D4380377
long respSucceedCountTotal; ///< 收到的成功的submitresponse消息数
//##ModelId=46B5D4380381
long respFailedCountTotal; ///< 收到的失败的submitresponse消息数
//##ModelId=46B5D438038B
long deliverCountTotal; ///< 收到的Deliver消息数
//##ModelId=46B5D438038C
long sreportCountTotal; ///< 状态报告数
//##ModelId=46B5D4380395
long ushLocalPort; ///< 本地监听起始端口
};
class CNGPServer;
/**
* CJob_CngpServer
*/
//##ModelId=46B5D43803BD
class CJob_CngpServer : public IJobDesc {
public:
//##ModelId=46B5D43803C8
CJob_CngpServer(
cngp_sptosmg _message,
CNGPServer & _server,
JobType _type
);
//##ModelId=46B5D43803D3
~CJob_CngpServer();
//##ModelId=46B5D43803DB
void OnSPMsg();
//##ModelId=46B5D43803DD
JobType type;
protected:
//##ModelId=46B5D43803E6
CNGPServer & server;
//##ModelId=46B5D4390008
cngp_sptosmg spMsg;
//##ModelId=46B5D439000C
int nResult;
};
//##ModelId=46B5D439001B
class CWorker_CngpServer : public IWorker {
//##ModelId=46B5D4390026
virtual void ProcessJob( IJobDesc* pJobDesc );
};
//##ModelId=46B5D4390039
struct cngpsrvthread_param {
//##ModelId=46B5D4390045
CNGPServer* csServer;
//##ModelId=46B5D439004E
TCPSocket* tsClient;
};
/** CNGP服务端实现
*/
//##ModelId=46B5D43900ED
class CNGPServer : public CCngp {
public:
//##ModelId=46B5D43900F8
TCPSocket m_TsServer; ///< Server端SOCKET句柄
//##ModelId=46B5D43900FC
int m_nLocalPort; ///< 本地监听端口
//##ModelId=46B5D4390101
char m_sLocalAddr[16]; ///< 本地监听地址
//##ModelId=46B5D439010B
bool m_fStop; ///< 是否停止系统
//##ModelId=46B5D439010C
int m_nSocketTimeout; ///< SOCKET超时时间
//##ModelId=46B5D4390116
client_conn conn_list[255]; ///< 客户端连接列表
//##ModelId=46B5D439011F
int m_nConnectTotal; ///< 客户端连接数
//##ModelId=46B5D4390120
HANDLE m_hThread; ///<
//##ModelId=46B5D4390129
BOOL m_fStarted; ///< 服务端是否启动
//##ModelId=46B5D4390133
virtual void OnReceivedSPMessage( CNGP_SPTOSMG css ) {
return;
}
//##ModelId=46B5D4390136
virtual BOOL OnLogin(
cngp_login & login_message, ///< 接收到的CNGP_LOGIN消息
const char * clientAddress, ///< 客户端的IP地址
char * spid ///< 如果鉴权成功,返回该用户的接入号
)
{
return TRUE;
}
//##ModelId=46B5D4390148
CThreadPool m_pool;
//##ModelId=46B5D439014D
CWorker_CngpServer m_worker;
//##ModelId=46B5D439015C
CJob_CngpServer * m_pJob;
protected:
//##ModelId=46B5D4390160
int LocalListen();
//##ModelId=46B5D439016F
static DWORD WINAPI CngpServFunc( LPVOID pParam );
//##ModelId=46B5D4390179
virtual DWORD CngpServProc();
//##ModelId=46B5D439018D
static DWORD WINAPI CngpClientFunc( LPVOID pParam );
//##ModelId=46B5D43901A1
virtual DWORD CngpClientProc( TCPSocket* tsClient );
//##ModelId=46B5D43901AC
int RecvSPMsg(
TCPSocket * tsClient,
cngp_sptosmg * css,
unsigned & nResult
);
//##ModelId=46B5D43901C0
SOCKET GetFromList( const char * sIcpid );
//##ModelId=46B5D43901CB
void RemoveFromList( SOCKET hClient );
//##ModelId=46B5D43901DE
void AddToList(
SOCKET hClient,
const char * sIcpid,
const char * sSpid,
ConnectionType type
);
//##ModelId=46B5D43901FC
bool IsLogined(
const char * sSpId,
SOCKET &hSock
);
//##ModelId=46B5D4390207
virtual void OnLogWrite( const char * fmt, ... );
public:
//##ModelId=46B5D4390224
CNGPServer();
//##ModelId=46B5D4390238
~CNGPServer();
//##ModelId=46B5D4390242
void CreateCngpMsgID( unsigned seqid, unsigned char * msgid );
//##ModelId=46B5D439024D
int Start(
const char * server_addr,
unsigned short ushServport,
int nSocketTimeout
);
//##ModelId=46B5D4390260
void Release();
//##ModelId=46B5D439026A
int Deliver(
char * sMsgId,
unsigned char isReport,
unsigned char uchMsgFmt,
char * recvTime,
char * srcTermID,
char * dstTermID,
unsigned char uchMsgLength,
char * pchMsgContent
);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -