📄 sgipapi.h
字号:
/// 或"8613312345670-8613312345679",或"8613312345670,8613312345675-8613312345689",或"8613012345678,8613012345679-8613012345688,8613312312312"。
///
int AddUserNumber(
sgipg_submit* ss, ///< 要群发的消息包
const char* sUserNumber ///< 要增加的群发手机号
);
///
/// 得到下一条要发submit消息的序列号
///
unsigned int GetSubmitSeqId();
///
/// 得到当前网关到SP的连接信息
///
void GetSmgConnInfo(
cList & _connList
) {
_connList = connList;
return;
}
///
/// 得到当前网关到SP的连接数
//
unsigned GetSmgConnCount() { return (unsigned)connList.size(); }
//@}
/**@name 消息处理虚函数 */
//@{
/**
* 收到DELIVER上行消息时调用该函数
*/
virtual int OnDeliver(DeliverStr & deliver) {
return 0;
}
/**
* 收到状态报告时调用该函数
*/
virtual int OnReport(ReportStr & report) {
return 0;
}
/**
* 收到Submit应答消息时调用此函数
*/
virtual int OnResponse(MTRespStr & response) {
return 0;
}
/**
* 发送SUBMIT消息失败时调用该函数
*
* MT_Error的错误码描述:
* 1:因为连接不上SMG网关系统 2:登录网关失败 3:包发送失败且超过重发次数 4.超时无应答 5.消息长度为零 6.没有可用的连接
*/
virtual int OnMTError(MTErrorStr mterror) {
return 0;
}
/**
* 记录日志函数
*/
virtual int OnLogWrite(const char* pchFmt, ...) {
char buffer[1024] = "";
va_list arglist;
va_start( arglist, pchFmt );
_vsnprintf( buffer, 1024, pchFmt, arglist );
va_end(arglist);
TRACE(buffer);
return 0;
}
//@}
/**@name GetFunctions */
//@{
/**得到提交的SUBMIT消息数
*/
long GetSubmitCount() const
{ return submitCountTotal; }
/**得到发送成功的SUBMIT消息数
*/
long GetSubmitSucceedCount() const
{ return submitSucceedCountTotal; }
/**得到发送失败的SUBMIT消息数
*/
long GetSubmitFailedCount() const
{ return submitFailedCountTotal; }
/**得到失败的SUBMITResponse消息数
*/
long GetRespFailedCount() const
{ return respFailedCountTotal; }
/**得到成功的SUBMITResponse消息数
*/
long GetRespSucceedCount() const
{ return respSucceedCountTotal; }
/**得到收到的Deliver消息数
*/
long GetDeliverCount() const
{ return deliverCountTotal; }
/**得到收到的StatusReport消息数
*/
long GetStatusReportCount() const
{ return sreportCountTotal; }
//@}
protected:
int SubmitFunc(sgipg_submit ss, unsigned int nSeq, unsigned int nDateTime);
/**@name SetFunctions */
//@{
/**递增提交的SUBMIT消息数
*/
long AddSubmitCount() {
return ::InterlockedIncrement((long*)&submitCountTotal);
}
/**递增发送成功的SUBMIT消息数
*/
long AddSubmitSucceedCount() {
return ::InterlockedIncrement((long*)&submitSucceedCountTotal);
}
/**递增发送失败的SUBMIT消息数
*/
long AddSubmitFailedCount() {
return ::InterlockedIncrement((long*)&submitFailedCountTotal);
}
/**递增失败的SUBMITResponse消息数
*/
long AddRespFailedCount() {
return ::InterlockedIncrement((long*)&respFailedCountTotal);
}
/**递增成功的SUBMITResponse消息数
*/
long AddRespSucceedCount() {
return ::InterlockedIncrement((long*)&respSucceedCountTotal);
}
/**递增收到的Deliver消息数
*/
long AddDeliverCount() {
return ::InterlockedIncrement((long*)&deliverCountTotal);
}
/**递增收到的StatusReport消息数
*/
long AddStatusReportCount() {
return ::InterlockedIncrement((long*)&sreportCountTotal);
}
//@}
private:
bool LocalListen();
bool IsValidIPAddr(LPCTSTR sIPAddr);
bool CreateLogFile();
sgip_conn* GetSubmitConn(int &nConnIndex);
void ChangeStatus(int nConnIndex, bool fBusy);
int LoginSmg(sgip_conn *pConn);
void LogoutSmg(sgip_conn *pConn);
bool CreateConn();
bool ReleaseConn();
void AddSmgConn(unsigned socketHandle, unsigned port);
void RemoveSmgConn(unsigned socketHandle);
CString GetDateTime();
unsigned GetMaxSmgConnections() { return m_nMaxSmgConn; }
private:
static DWORD WINAPI SgipServFunc(LPVOID pParam);
virtual DWORD SgipServProc();
//int (*m_PDeliver)(DeliverStr deliver);
//int (*m_PReport)(ReportStr report);
//int (*m_PResponse)(MTRespStr response);
/////
///// MT_Error的错误码描述:
///// 1:因为连接不上SMG网关系统 2:登录网关失败 3:包发送失败且超过重发次数 4.超时无应答 5.消息长度为零 6.没有可用的连接
/////
//int (*m_PMTError)(MTErrorStr mterror);
//int (*OnLogWrite)(const char* pchFmt, ...);
CString GetPeerName() { return m_sPeerName; }
CString GetPeerPwd() { return m_sPeerPwd; }
private:
CString m_sPeerAddr; ///< 网关IP地址
int m_nPeerPort; ///< 网关端口
CString m_sUserName; ///< 登录用户名
CString m_sPwd; ///< 登录口令
int m_nConnType; ///< 连接类型
int m_nSubmitConn; ///< SP到网关连接数
CString m_sSrcNum; ///< 原节点号码
CString m_sLocalIPAddr; ///< 本机地址
int m_nLocalPort; ///< 本地监听端口
CString m_sPeerName; ///< 网关登录SP的用户名
CString m_sPeerPwd; ///< 网关登录SP的口令
unsigned m_nMaxSmgConn; ///< 允许的网关到SP的最大连接数
CString m_sLogPath; ///< 日志文件路径
//BOOL m_fLogEvent; ///< 是否记录系统日志
CThreadPool pool; ///< 线程池
CWorkerSgip m_worker;
CJobSgip *m_pJob;
unsigned m_nMinWorkThreadsCount; ///< 线程池初始线程数
unsigned m_nMaxWorkThreadsCount; ///< 允许的线程池最大线程数
BOOL m_fStarted; ///< 是否已经启动
BOOL m_fStop; ///< 系统停止标志
SOCKET serverSocket; ///< 本地监听套接字
HANDLE m_hThread; ///< 本地监听线程的句柄
unsigned m_nCounter; ///< 消息的数量
sgip_conn SubmitConn[MAX_PATH]; ///< SP到网关连接池
CCriticalSection m_arrayCs; ///< 队列临界区
int m_nConnIndex; ///< 连接索引
CCriticalSection m_listCs;
cList connList; ///< 网关连接队列
long submitCountTotal;
long submitSucceedCountTotal;
long submitFailedCountTotal;
long respSucceedCountTotal;
long respFailedCountTotal;
long deliverCountTotal;
long sreportCountTotal;
};
#endif // SGIP_API_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -