소스 검색

Z991239-3333 #comment other: 心跳关于跨机过程告警日志

翟俊伟80258120 3 년 전
부모
커밋
cb8d6c12d0
3개의 변경된 파일69개의 추가작업 그리고 13개의 파일을 삭제
  1. 36 13
      Module/mod_heartbeat/HeartBeatFSM.cpp
  2. 18 0
      Module/mod_heartbeat/HeartBeatFSM.h
  3. 15 0
      Module/mod_heartbeat/HeartBeat_UserErrorCode.h

+ 36 - 13
Module/mod_heartbeat/HeartBeatFSM.cpp

@@ -1,6 +1,8 @@
 #include "stdafx.h"
 #include <string.h>
 #include "HeartBeatFSM.h"
+#include "HeartBeat_UserErrorCode.h"
+
 #ifdef RVC_OS_WIN
 #pragma comment (lib, "Ws2_32.lib")
 #pragma comment (lib, "Mswsock.lib")
@@ -628,11 +630,13 @@ void CHeartBeatFSM::LocalPreOnline(int slot, CSimpleStringA fromTermNo,CSimpleSt
 		eErr = pCardReadAdapterClient->Connect();
 	if (pCardReadAdapterClient == NULL || eErr != Error_Succeed)
 	{
-		Dbg("pGuiConsoleClient is null or connect CardReadAdapter failed.%d",eErr);
+		CSimpleStringA errMsg = CSimpleStringA::Format("LocalPreOnline, pGuiConsoleClient is null or connect CardReadAdapter failed:%d(0x%x)", eErr, eErr);
+		LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardReader_Failed, errMsg.GetData());
 		return;
 	}
 	CardReadAdapterService_PreOnline_Req req;
 	CardReadAdapterService_PreOnline_Ans ans;
+	CSimpleStringA outParam("");
 	req.businessData = data;
 	char buf[16];
 	ZeroMemory(buf, sizeof(buf));
@@ -643,16 +647,21 @@ void CHeartBeatFSM::LocalPreOnline(int slot, CSimpleStringA fromTermNo,CSimpleSt
 	req.reserved2[0] = kaku + CSimpleStringA(buf);
 	Dbg("local:%s", (const char*)req.reserved2[0]);
 	req.reserved2[1] = account;
+	CSimpleStringA inParam = CSimpleStringA::Format("PreOnline, CardStore heartbeat invodk PreOnline, slot:%s, accountLen:%d", req.reserved2[0].GetData(), account.GetLength());
+	LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardStore_Invoke_PreOnline_Inparam, inParam.GetData());
 	eErr = pCardReadAdapterClient->PreOnline(req, ans, 65000);
-	if (eErr != Error_Succeed)
-		Dbg("local preonline failed. code:%d", eErr);
+	if (eErr != Error_Succeed) {
+		outParam = CSimpleStringA::Format("local preonline failed:%d(0x%x)", eErr, eErr);
+		LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardStore_Invoke_PreOnline_Falied, inParam.GetData());
+	}
 	CardReadAdapterService_QueryCardInfoOnStore_Req reqX;
 	CardReadAdapterService_QueryCardInfoOnStore_Ans ansX;
 	ErrorCodeEnum eErrX = Error_Unexpect;
 	eErrX = pCardReadAdapterClient->QueryCardInfoOnStore(reqX, ansX,12000);
 	if (eErrX != Error_Succeed)
 	{
-		Dbg("QueryCardInfoOnStore failed.%d",eErrX);
+		outParam = CSimpleStringA::Format("QueryCardInfoOnStore failed.%d", eErrX);
+		LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardStore_Invoke_QueryCardInfoOnStore_Falied, inParam.GetData());
 		ansX.findCard = ansX.cardPos = 9999;
 	}
 	if (m_pHandShakeConn && m_pHandShakeConn->IsConnectionOK())
@@ -1529,7 +1538,9 @@ void HeartBeatConnection::SendHandShake()
 
 void HeartBeatConnection::SendCardActive(const int type,const int slot,unsigned long errCode,const char *termNo, const char *account, const int accSize, const char *data, const int dataSize,int findCard,int cardPos)
 {
-	Dbg("type:%d,errCode:%d,termNo:%s,dataSize:%d", type, errCode, termNo, dataSize);
+	CSimpleStringA inParm = CSimpleStringA::Format("SendCardActive,type:%d, slot:%d, errCode:%d, fromTerm:%s, termNo:%s, findCard:%d, cardPos:%d, dataSize:%d",
+		type, slot, errCode, m_TerminalNo.GetData(), termNo, findCard, cardPos, dataSize);
+	LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_SendCardActive_InParam, inParm.GetData());
 	//发起跨机调用包
 	if (type == 0)
 	{
@@ -1763,6 +1774,22 @@ void HeartBeatConnection::PkgRcvProcHandAndInstruc(const CSmartPointer<IPackage>
 		delete pBuf;
 	}
 }
+
+void CHeartBeatFSM::ProcessCardActive(CardActiveReq* req)
+{
+	ProcessPreOnlineTask* ppTask = new ProcessPreOnlineTask(this, req);
+	GetEntityBase()->GetFunction()->PostThreadPoolTask(ppTask);
+}
+
+void CHeartBeatFSM::ProcessPreOnline(CardActiveReq* req)
+{
+	if (req->type == 0)
+		LocalPreOnline(req->slot, req->TerminalNo, req->FromTerminalNo, req->Account, req->Param2);
+	else if (req->type == 1)
+		ReceivePreOnlineBack(req->ErrCode, req->Param2, req->findCard, req->cardPos);
+	delete req;
+}
+
 void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pRecvPkg)
 {
 	LOG_FUNCTION();
@@ -1779,14 +1806,10 @@ void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pR
 			//for (int i = 0; i < nArrayNum; ++i)
 			if (nArrayNum > 0)
 			{
-				Dbg("type %d,from term:%s,term %s,acc(len):%d,param1(len) %d", pAns->type, pAns->FromTerminalNo, pAns->TerminalNo
-					, strlen(pAns->Account), strlen(pAns->Param2));
-				//Dbg("type %d,from term:%s,term %s,acc:%s,param1 %s", pAns->type, pAns->FromTerminalNo,pAns->TerminalNo, pAns->Account, pAns->Param2);
-				Dbg("findCard %d,cardPos %d", pAns->findCard, pAns->cardPos);
-				if (pAns->type == 0)
-					m_pFSM->LocalPreOnline(pAns->slot, pAns->TerminalNo, pAns->FromTerminalNo, pAns->Account, pAns->Param2);
-				else if (pAns->type == 1)
-					m_pFSM->ReceivePreOnlineBack(pAns->ErrCode, pAns->Param2, pAns->findCard, pAns->cardPos);
+				CSimpleStringA inParam = CSimpleStringA::Format("PkgRcvProcCardActive, type %d, from term:%s, term:%s, accLen:%d, param2Len:%d, findCard:%d,cardPos:%d",
+					pAns->type, pAns->FromTerminalNo, pAns->TerminalNo, strlen(pAns->Account), strlen(pAns->Param2), pAns->findCard, pAns->cardPos);
+				LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_PkgRcvProcCardActive_InParam, inParam.GetData());
+				m_pFSM->ProcessCardActive(pAns);
 			}
 		}
 		else {

+ 18 - 0
Module/mod_heartbeat/HeartBeatFSM.h

@@ -319,6 +319,8 @@ public:
 	int LocalProcessCrossCall(CrossCallReq* reqInfo, const int nBufSize);
 	void ILCallToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx);
 	void CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx);
+	void ProcessPreOnline(CardActiveReq* req);
+	void ProcessCardActive(CardActiveReq* req);
 
 protected:
 	void DoInstruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx);
@@ -472,6 +474,22 @@ struct LocalProcessCrossCallTask : public ITaskSp
 		fsm->PostEventFIFO(e);
 	}
 };
+
+struct ProcessPreOnlineTask : public ITaskSp
+{
+	CHeartBeatFSM* fsm;
+	CardActiveReq* cardActiveReq;
+	ProcessPreOnlineTask(CHeartBeatFSM* f, CardActiveReq* req) : fsm(f)
+	{
+		cardActiveReq = req;
+	}
+
+	void Process()
+	{
+		fsm->ProcessPreOnline(cardActiveReq);
+	}
+};
+
 class HeartBeatConnection : public SpSecureClient
 {
 public:

+ 15 - 0
Module/mod_heartbeat/HeartBeat_UserErrorCode.h

@@ -0,0 +1,15 @@
+#ifndef _HEARTBEAT_USER_ERRORCODE_H
+#define _HEARTBEAT_USER_ERRORCODE_H
+#pragma once
+
+#define HeartBeat_UserErrorCode_Start 0x50300200
+
+#define HeartBeat_UserErrorCode_SendCardActive_InParam									(HeartBeat_UserErrorCode_Start + 1)	//大机发送跨机包,SendCardActive, 必要的入参
+#define HeartBeat_UserErrorCode_PkgRcvProcCardActive_InParam							(HeartBeat_UserErrorCode_Start + 2)	//卡库心跳接收后发送给大机,必要的参数
+#define HeartBeat_UserErrorCode_Connect_CardReader_Failed								(HeartBeat_UserErrorCode_Start + 3)	//卡库心跳连接卡机功能集失败
+#define HeartBeat_UserErrorCode_Connect_CardStore_Invoke_PreOnline_Inparam				(HeartBeat_UserErrorCode_Start + 4)	//卡库心跳调用PreOnline
+#define HeartBeat_UserErrorCode_Connect_CardStore_Invoke_PreOnline_Falied				(HeartBeat_UserErrorCode_Start + 5)	//卡库心跳调用PreOnline,返回失败
+#define HeartBeat_UserErrorCode_Connect_CardStore_Invoke_QueryCardInfoOnStore_Falied	(HeartBeat_UserErrorCode_Start + 6)	//卡库心跳调用PreOnline后再调用QueryCardInfoOnStore,返回失败
+
+
+#endif