📄 imppconn.h
字号:
*/
//##ModelId=46B5D4320153
long GetSubmitSucceedCount() const
{ return submitSucceedCountTotal; }
/**得到发送失败的SUBMIT消息数
*/
//##ModelId=46B5D432015B
long GetSubmitFailedCount() const
{ return submitFailedCountTotal; }
/**得到失败的SUBMITResponse消息数
*/
//##ModelId=46B5D432015D
long GetRespFailedCount() const
{ return respFailedCountTotal; }
/**得到成功的SUBMITResponse消息数
*/
//##ModelId=46B5D432015F
long GetRespSucceedCount() const
{ return respSucceedCountTotal; }
/**得到收到的Deliver消息数
*/
//##ModelId=46B5D4320166
long GetDeliverCount() const
{ return deliverCountTotal; }
/**得到收到的StatusReport消息数
*/
//##ModelId=46B5D4320168
long GetStatusReportCount() const
{ return sreportCountTotal; }
//@}
/**@name Main Functions */
//@{
/**初始化Client函数.
注意: 每个Client在进行所有操作之前必须调用Initialize()进行初始化操作
@param nMinWorkThreadsCount 指定线程池要启用的初始线程数
@param nMaxWorkThreadsCount 指定线程池允许使用的最大线程数
*/
//##ModelId=46B5D432016F
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=46B5D4320179
IMPPConnection * MakeConnection(
const char * _smghost,
const unsigned short & _smgport,
const unsigned char & _smgversion,
const char * _username,
const char * _password,
const int & _nActivetestInterval,
BOOL sync
);
/**停止网关服务
*/
//##ModelId=46B5D432018D
virtual void Release();
/**清除连接
*/
//##ModelId=46B5D4320197
void ClearConnection(const char * token);
/**清除当前Client中的所有连接
*/
//##ModelId=46B5D43201A1
void ClearAllConnections();
/**发送一条Submit消息
*/
//##ModelId=46B5D43201AB
int Submit(impp_submit & message);
//@}
/**@name Callback functions */
//@{
/**登录网关成功时调用
*/
//##ModelId=46B5D43201B5
virtual void OnConnectionLogined(IMPPConnection & connection)
{
return;
}
/**登录网关失败时调用
*/
//##ModelId=46B5D43201BF
virtual void OnConnectionLoginFailed(
IMPPConnection & connection,
int errorCode
)
{
return;
}
/**同网关连接断开时调用
*/
//##ModelId=46B5D43201C3
virtual void OnConnectionCleared(IMPPConnection & connection)
{
return;
}
/**发送SUBMIT消息前调用,如果返回失败,则停止发送SUBMIT消息.
在这里,只是简单地返回TRUE.
*/
//##ModelId=46B5D43201C9
virtual BOOL OnConnectionSubmiting(
IMPPConnection & connection,
impp_submit _message
)
{
return TRUE;
}
/**发送SUBMIT消息成功时调用
*/
//##ModelId=46B5D43201CD
virtual void OnConnectionSubmited(
IMPPConnection & connection,
impp_submit _message
)
{
return;
}
/**发送SUBMIT消息失败时调用
*/
//##ModelId=46B5D43201D4
virtual void OnConnectionSubmitFailed(
IMPPConnection & connection,
impp_submit _message
)
{
return;
}
/**收到CONNECT_RESPONSE时调用
*/
//##ModelId=46B5D43201D8
virtual void OnReceivedConnectionConnectResponse(
IMPPConnection & connection,
impp_connect_resp _message
)
{
return;;
}
/**收到Terminate消息时调用
*/
//##ModelId=46B5D43201DE
virtual void OnReceivedConnectionTerminate(IMPPConnection & connection)
{
return;
}
/**收到SUBMIT_RESPONSE时调用
*/
//##ModelId=46B5D43201E1
virtual void OnReceivedConnectionSubmitResponse(
IMPPConnection & connection,
impp_submit_deliver_resp _message
)
{
return;
}
/**收到Deliver消息时调用
*/
//##ModelId=46B5D43201E8
virtual void OnReceivedConnectionDeliver(
IMPPConnection & connection,
impp_deliver _message
)
{
return;
}
/**收到STATUS_REPORT时调用
*/
//##ModelId=46B5D43201EC
virtual void OnReceivedConnectionStatusReport(
IMPPConnection & connection,
impp_deliver _message
)
{
return;
}
/**收到活动测试消息时调用
*/
//##ModelId=46B5D43201F0
virtual void OnReceivedConnectionActiveTest(IMPPConnection & connection)
{
return;
}
/**收到活动测试回复消息时调用
*/
//##ModelId=46B5D43201F4
virtual void OnReceivedConnectionActiveTestResponse(IMPPConnection & connection)
{
return;
}
/**输出日志时调用
格式化输出日志,默认是把内容//TRACE出来
*/
//##ModelId=46B5D43201F7
virtual void OnConnectionLogWrite(IMPPConnection & connection, const char * str);
//@}
public:
/**@name JobProcess functions */
//@{
//##ModelId=46B5D4320206
BOOL ProcessConnectionSubmiting(
IMPPConnection & connection,
impp_submit _message
);
//##ModelId=46B5D4320210
void ProcessConnectionSubmited(
IMPPConnection & connection,
impp_submit _message
);
//##ModelId=46B5D432021A
void ProcessConnectionSubmitFailed(
IMPPConnection & connection,
impp_submit _message
);
//##ModelId=46B5D4320224
void ProcessReceivedConnectionConnectResponse(
IMPPConnection & connection,
impp_connect_resp _message
);
//##ModelId=46B5D432022E
void ProcessReceivedConnectionTerminate(IMPPConnection & connection);
//##ModelId=46B5D4320230
void ProcessReceivedConnectionSubmitResponse(
IMPPConnection & connection,
impp_submit_deliver_resp _message
);
//##ModelId=46B5D432023A
void ProcessReceivedConnectionDeliver(
IMPPConnection & connection,
impp_deliver _message
);
//##ModelId=46B5D4320242
void ProcessReceivedConnectionStatusReport(
IMPPConnection & connection,
impp_deliver _message
);
//##ModelId=46B5D432024C
void ProcessReceivedConnectionActiveTest(IMPPConnection & connection);
//##ModelId=46B5D432024E
void ProcessReceivedConnectionActiveTestResponse(IMPPConnection & connection);
protected:
/**创建一个连接token
*/
//##ModelId=46B5D4320257
const char * CreateToken() const;
/**找到第一个可用的连接
*/
//##ModelId=46B5D4320260
IMPPConnection * firstFitRouter(int start);
/**循环使用可用的连接
*/
//##ModelId=46B5D4320274
IMPPConnection * roundRobinRouter();
/**记录Client日志信息和connection日志信息,默认将所有信息发送到调试窗口(Debug模式下)
*/
//##ModelId=46B5D432027E
virtual void LogWrite(const char * pchFmt, ...);
private:
//##ModelId=46B5D4320289
CThreadPool m_pool;
//##ModelId=46B5D4320293
CWorkerImppClient m_worker;
//##ModelId=46B5D432029D
CJobImppClient * m_pJob;
//##ModelId=46B5D43202A2
aIMPPList connectionList;
//##ModelId=46B5D43202A7
MyCriticalSection listLock;
//##ModelId=46B5D43202AC
IMPPConnection * lastPick;
//##ModelId=46B5D43202B0
int m_nMinWorkThreadsCount;
//##ModelId=46B5D43202B1
int m_nMaxWorkThreadsCount;
//##ModelId=46B5D43202BA
BOOL m_fStarted;
//##ModelId=46B5D43202BB
long submitCountTotal;
//##ModelId=46B5D43202BC
long submitSucceedCountTotal;
//##ModelId=46B5D43202C4
long submitFailedCountTotal;
//##ModelId=46B5D43202C5
long respSucceedCountTotal;
//##ModelId=46B5D43202CE
long respFailedCountTotal;
//##ModelId=46B5D43202CF
long deliverCountTotal;
//##ModelId=46B5D43202D0
long sreportCountTotal;
};
//##ModelId=46B5D43202E2
struct srvthread_param {
//##ModelId=46B5D43202ED
CImppServer* csServer;
//##ModelId=46B5D43202F2
TCPSocket* tsClient;
};
//
//用于处理消息和事件的线程池
//
//##ModelId=46B5D432030A
class CJobImpp:public IJobDesc {
public:
//##ModelId=46B5D432030C
CJobImpp(IMPP_SPTOSMG css, CImppServer* imppserv);
//##ModelId=46B5D4320316
~CJobImpp();
//##ModelId=46B5D4320317
void OnCpMsg();
private:
//##ModelId=46B5D4320319
CImppServer* m_imppserv;
//##ModelId=46B5D432031F
IMPP_SPTOSMG m_cpmsg;
};
//##ModelId=46B5D4320328
class CWorkerImpp:public IWorker {
//##ModelId=46B5D4320333
virtual void ProcessJob( IJobDesc* pJobDesc );
};
/// IMPP服务端类
/** 服务端实现
*/
//##ModelId=46B5D43203A0
class CImppServer : public CImpp {
public:
//##ModelId=46B5D43203AC
TCPSocket m_TsServer;
//##ModelId=46B5D43203B0
int m_nLocalPort;
//##ModelId=46B5D43203B1
char m_sLocalAddr[16];
//##ModelId=46B5D43203B4
bool m_fStop;
//##ModelId=46B5D43203B5
int m_nSocketTimeout;
//##ModelId=46B5D43203B7
client_conn conn_list[255];
//##ModelId=46B5D43203BE
int m_nConnectTotal;
//##ModelId=46B5D43203BF
HANDLE m_hThread;
//##ModelId=46B5D43203C0
BOOL m_fStarted;
//##ModelId=46B5D43203C8
void (*m_pCpMsg)(IMPP_SPTOSMG css);
//##ModelId=46B5D43203C9
bool (*m_AuthClient)(
char *pchIcpid,
char *pchAuth,
char *pchClientAddr,
char *pchSpId
);
//##ModelId=46B5D43203CB
CThreadPool m_pool; //执行各种消息处理函数的线程池.
//##ModelId=46B5D43203D3
CWorkerImpp m_worker;
//##ModelId=46B5D43203D8
CJobImpp *m_pJob;
protected:
//##ModelId=46B5D43203DE
int LocalListen();
//##ModelId=46B5D43203DF
static DWORD WINAPI ImppServFunc(LPVOID pParam);
//##ModelId=46B5D43203E7
virtual DWORD ImppServProc();
//##ModelId=46B5D4330008
static DWORD WINAPI ImppClientFunc(LPVOID pParam);
//##ModelId=46B5D433000B
virtual DWORD ImppClientProc(TCPSocket* tsClient);
//##ModelId=46B5D4330012
SOCKET GetFromList(const char * sIcpid);
//##ModelId=46B5D4330014
void RemoveFromList(SOCKET hClient);
//##ModelId=46B5D433001C
void AddToList(SOCKET hClient, const char * sIcpid, const char * sSpid, int nVersion);
//##ModelId=46B5D4330026
bool IsLogined(const char * sSpId, SOCKET &hSock);
public:
//##ModelId=46B5D4330029
CImppServer();
//##ModelId=46B5D4330030
~CImppServer();
//##ModelId=46B5D4330031
int Start(
char *pchServip,
int nServport,
void (*OnCpMsg)(IMPP_SPTOSMG css),
bool (*OnAuthClient)(char *pchIcpid, char *pchAuth, char *pchClientAddr, char *pchSpId),
int nSocketTimeout
);
//##ModelId=46B5D4330044
void Release();
//##ModelId=46B5D4330045
int Deliver(
unsigned _int64 nMsgId,
char *pchDestId,
char *pchServiceId,
unsigned char uchMsgFmt,
char *pchSrcTerminalId,
unsigned char uchRegisteredDelivery,
unsigned char uchMsgLen,
char *pchMsgContent
);
};
#endif // !defined(AFX_IMPP_H__A4DFA71A_1AAF_4DE6_A299_3A154220E698__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -