|
|
@@ -26,6 +26,7 @@
|
|
|
using namespace HeartBeat;
|
|
|
#include "SpSecureClient.h"
|
|
|
#include "EventCode.h"
|
|
|
+#include "IHttpFunc.h"
|
|
|
#include "CardIssuer_client_g.h"
|
|
|
//using namespace CardIssuer;
|
|
|
#include "PinPad_client_g.h"
|
|
|
@@ -40,6 +41,12 @@ using namespace ScannerSet;
|
|
|
|
|
|
typedef DWORD (__stdcall *LpRestorePerfRegistryFromFile)(LPCWSTR szFileName, LPCWSTR szLangId);
|
|
|
|
|
|
+#define LOG_EVT_HEARTBEAT_TASK_START 0x50310000 //新心跳服务启动
|
|
|
+#define LOG_EVT_HEARTBEAT_TASK_NOT_START 0x50310001 //新心跳服务未启动
|
|
|
+#define LOG_EVT_HEARTBEAT_HTTP_ERROR 0x50310002 //新心跳服务连接失败
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
#pragma pack(1)
|
|
|
// [StructName("FNTSTAT")]
|
|
|
struct HandReq
|
|
|
@@ -154,7 +161,7 @@ struct TerminalInfo
|
|
|
// Terminal Performance Information Struct[Josephus in 9:09:47 2016/4/23]
|
|
|
struct TermianlCounter
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
DWORD serverIP;
|
|
|
uint16_t totalMem; //MB
|
|
|
uint16_t freeMem; //MB
|
|
|
@@ -166,6 +173,64 @@ struct TermianlCounter
|
|
|
uint16_t cpuLoad;
|
|
|
};
|
|
|
|
|
|
+namespace HttpStruct
|
|
|
+{
|
|
|
+ //发送心跳接口
|
|
|
+ struct SendHandShakeReq : CHTTPReq {
|
|
|
+ string m_reqStr;
|
|
|
+ string ToJson() {
|
|
|
+ return m_reqStr;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ struct SendHandShakeRet : CHTTPRet {
|
|
|
+ string m_retStr;
|
|
|
+ bool Parse(string strData) {
|
|
|
+ m_retStr = strData;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+struct CShakeHandVO
|
|
|
+{
|
|
|
+ string terminalNo;
|
|
|
+ long ip;
|
|
|
+ string warningLevel;
|
|
|
+ string runState;
|
|
|
+ string customerHandle;
|
|
|
+ string callState;
|
|
|
+ string localMaintain;
|
|
|
+ string remoteMaintain;
|
|
|
+ string termStage;
|
|
|
+ string preTermStage;
|
|
|
+ string netState;
|
|
|
+ string preNetState;
|
|
|
+};
|
|
|
+struct CShakeHandSystemInfo
|
|
|
+{
|
|
|
+ long serverIP;
|
|
|
+ long totalMem;
|
|
|
+ long freeMem;
|
|
|
+ long procNum;
|
|
|
+ long threadNum;
|
|
|
+ long handleNum;
|
|
|
+ long freeDisk;
|
|
|
+ string osStartTime;
|
|
|
+ long cpuLoad;
|
|
|
+};
|
|
|
+
|
|
|
+struct CShakeHandErrorVO
|
|
|
+{
|
|
|
+ long warnLevel;
|
|
|
+ string reserved1;
|
|
|
+ string errList;
|
|
|
+};
|
|
|
+struct CHandShakeHttp
|
|
|
+{ //存储到运行时
|
|
|
+ CShakeHandVO shakehandvo;
|
|
|
+ CShakeHandSystemInfo shakeHandSystemInfo;
|
|
|
+ CShakeHandErrorVO shakeHandErrorVO;
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
enum InstructionType
|
|
|
{
|
|
|
@@ -257,7 +322,8 @@ public:
|
|
|
CHeartBeatFSM():m_initTimes(0),m_bUseBackup(false),m_testResult(Error_Succeed),
|
|
|
m_warnLevel(0), m_entErrorList(""), m_nLodCtrFlag(0), m_pHandShakeConn(NULL)
|
|
|
, m_tradeState(99),m_bJBMachine(false), m_pCRAClient(NULL), m_pIDClient(NULL) , m_pPinPadClient(NULL)
|
|
|
- , m_localDeviceNo(""), m_ILDeviceNo(""), m_tmpMultiBlob(""), m_terminalStage(""){}
|
|
|
+ , m_localDeviceNo(""), m_ILDeviceNo(""), m_tmpMultiBlob(""), m_terminalStage(""), m_strHandShakeUrl(""),m_bAlarmed(false)
|
|
|
+ ,m_longConnInterval(20000),m_handShakeConnInterval(20000){}
|
|
|
~CHeartBeatFSM(){}
|
|
|
virtual ErrorCodeEnum OnInit();
|
|
|
virtual ErrorCodeEnum OnExit();
|
|
|
@@ -283,8 +349,13 @@ public:
|
|
|
unsigned int s5_on_event(FSMEvent* pEvt);
|
|
|
|
|
|
DWORD m_dwServIP;
|
|
|
+ CSimpleStringA m_strHandShakeUrl;//心跳地址
|
|
|
int Starting();
|
|
|
int DoHandShake();
|
|
|
+ int DoNewHandShake();
|
|
|
+ bool HandShakeHttp(IHttpFunc* client,bool &isHeartBeatOk);
|
|
|
+ string HandShakeJsonStr();
|
|
|
+ static void HttpsLogCallBack(const char* logtxt);
|
|
|
void SetConnNULL(){}
|
|
|
ErrorCodeEnum SetErrorList(int warmLevel,CSimpleStringA strList);
|
|
|
void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
|
|
|
@@ -326,8 +397,11 @@ protected:
|
|
|
void DoInstruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx);
|
|
|
|
|
|
private:
|
|
|
+ ErrorCodeEnum GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore);
|
|
|
|
|
|
int m_tmpTestFlag;
|
|
|
+ int m_longConnInterval;//长连接时间间隔
|
|
|
+ int m_handShakeConnInterval;//新心跳时间间隔
|
|
|
SOCKET m_ConnSocket;
|
|
|
CSimpleStringA m_servStr,m_servIP,m_servStrB,m_servIPB,m_entErrorList,m_localDeviceNo,m_ILDeviceNo,m_tmpMultiBlob, m_terminalStage;
|
|
|
int m_port,m_portB,m_initTimes,m_warnLevel,m_tradeState;
|
|
|
@@ -341,6 +415,9 @@ private:
|
|
|
CardReadAdapter::CardReadAdapterService_ClientBase *m_pCRAClient;
|
|
|
IDCertificate::IDCertService_ClientBase *m_pIDClient;
|
|
|
PinPad::PinPadService_ClientBase *m_pPinPadClient;
|
|
|
+
|
|
|
+ bool m_bAlarmed;
|
|
|
+ bool m_isCardStore;
|
|
|
};
|
|
|
struct StartTask : public ITaskSp
|
|
|
{
|
|
|
@@ -378,7 +455,7 @@ struct LodctrTask : public ITaskSp
|
|
|
HMODULE hDll = LoadLibrary("loadperf.dll");
|
|
|
if(hDll == NULL)
|
|
|
{
|
|
|
- Dbg("Load loadperf.dll failed %d", GetLastError());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Load loadperf.dll failed %d", GetLastError());
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -387,12 +464,12 @@ struct LodctrTask : public ITaskSp
|
|
|
"RestorePerfRegistryFromFileW");
|
|
|
if(restoreFunc == NULL)
|
|
|
{
|
|
|
- Dbg("GetProcAddress of RestorePerfRegistryFromFileW failed %d", GetLastError());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetProcAddress of RestorePerfRegistryFromFileW failed %d", GetLastError());
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
DWORD dwRet = restoreFunc(NULL, NULL);
|
|
|
- Dbg("restoreFunc returned 0x%08x", dwRet);
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("restoreFunc returned 0x%08x", dwRet);
|
|
|
if(dwRet == 0)
|
|
|
{
|
|
|
fsm->SetLodCtrStatus(1);
|
|
|
@@ -464,7 +541,7 @@ struct LocalProcessCrossCallTask : public ITaskSp
|
|
|
ZeroMemory(pBuf, nBufSize + 1);
|
|
|
memcpy(pBuf, reqInfo, nBufSize);
|
|
|
xreqInfo = (CrossCallReq*)pBuf;
|
|
|
- Dbg("id:%x",xreqInfo->nEntityID);
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("id:%x",xreqInfo->nEntityID);
|
|
|
}
|
|
|
~LocalProcessCrossCallTask()
|
|
|
{
|
|
|
@@ -507,6 +584,18 @@ struct ProcessPreOnlineTask : public ITaskSp
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+struct NewHandShakeTask : public ITaskSp
|
|
|
+{
|
|
|
+ CHeartBeatFSM* fsm;
|
|
|
+
|
|
|
+ NewHandShakeTask(CHeartBeatFSM* f) : fsm(f) {}
|
|
|
+
|
|
|
+ void Process()
|
|
|
+ {
|
|
|
+ fsm->DoNewHandShake();
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
class HeartBeatConnection : public SpSecureClient
|
|
|
{
|
|
|
public:
|