Эх сурвалжийг харах

Z991239-4590 #comment 去掉简版跨机的逻辑、修改跨机激活的逻辑

oilyang 2 жил өмнө
parent
commit
ef59b6da30

+ 87 - 708
Module/mod_heartbeat/HeartBeatFSM.cpp

@@ -93,9 +93,9 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 	
 	//网络字节序
 	//由于双活改造,改成固定ip,分行服务有处理
-	m_servIP = "99.1.100.215";
-	m_dwServIP = inet_addr(m_servIP);
-	m_csServerIP = m_servIP;
+	//m_servIP = "99.1.100.215";
+	m_dwServIP = inet_addr("99.1.100.215");
+	//m_csServerIP = m_servIP;
 
 	CSimpleStringA csRunDiskName("C:\\");
 	Error = GetEntityBase()->GetFunction()->GetPath("Run", csRunDiskName);
@@ -104,7 +104,6 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 	if(arrays.GetCount() > 0)
 	{
 		m_csRunDiskName = arrays[0] + "\\";
-		Dbg("m_csRunDiskName is %s", (LPCTSTR)m_csRunDiskName);
 	}
 	else
 	{
@@ -275,37 +274,6 @@ unsigned int CHeartBeatFSM::s2_on_event(FSMEvent* pEvt)
 	case USER_EVT_CARD_ACTIVE_FINISHED:
 		pEvt->SetHandled();
 		break;
-	case USER_EVT_CROSS_TERM_CALL:
-	{
-		pEvt->SetHandled();
-		CrossTermCallEvent* pCTCE = dynamic_cast<CrossTermCallEvent*>(pEvt);
-		CrossTermCallTask *pTask = new CrossTermCallTask(this);
-		pTask->ctx = pCTCE->ctx;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s2 cross call,type %x.",pCTCE->ctx->Req.type);
-		GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
-	}
-	break;
-	case USER_EVT_CROSS_TERM_CALL_FINISHED:
-		pEvt->SetHandled();
-		break;
-	case USER_EVT_ILCallToRVC:
-	{
-		pEvt->SetHandled();
-		ILCallToRVCEvent* pCTCE = dynamic_cast<ILCallToRVCEvent*>(pEvt);
-		ILCallToRVCTask *pTask = new ILCallToRVCTask(this);
-		pTask->ctx = pCTCE->ctx;
-		GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
-	}
-	break;
-	case USER_EVT_CallResultToIL:
-	{
-		pEvt->SetHandled();
-		CallResultToILEvent* pCTCE = dynamic_cast<CallResultToILEvent*>(pEvt);
-		CallResultToILTask *pTask = new CallResultToILTask(this);
-		pTask->ctx = pCTCE->ctx;
-		GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
-	}
-	break;
 	default:
 		break;
 	}
@@ -622,6 +590,8 @@ void CHeartBeatFSM::HttpsLogCallBack(const char* logtxt)
 {
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("HttpsLogCallBack")("http dbg: %s", logtxt);
 }
+
+
 int CHeartBeatFSM::CardActive(SpReqAnsContext<HeartBeatService_CardActive_Req, HeartBeatService_CardActive_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
@@ -666,7 +636,6 @@ ErrorCodeEnum CHeartBeatFSM::SetErrorList(int warmLevel,CSimpleStringA strList)
 {
 	m_warnLevel = warmLevel;
 	m_entErrorList = strList;
-	Dbg("strList[%s]",(LPCTSTR)strList);
 	return Error_Succeed;
 }
 void CHeartBeatFSM::SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
@@ -677,17 +646,29 @@ void CHeartBeatFSM::SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransaction
 void CHeartBeatFSM::LocalPreOnline(int slot, CSimpleStringA fromTermNo,CSimpleStringA termNo, CSimpleStringA account, CSimpleStringA data)
 {
 	LOG_FUNCTION();
-	CardReadAdapterService_ClientBase *pCardReadAdapterClient = NULL;
-	ErrorCodeEnum eErr = Error_Unexpect;
-	pCardReadAdapterClient = new CardReadAdapterService_ClientBase(GetEntityBase());
-	eErr = pCardReadAdapterClient->Connect();
-	if (eErr != Error_Succeed)
+	DWORD dwUserCode = 0;
+	if (!CheckCRASessionOrToConnect())
 	{
-		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());
-		pCardReadAdapterClient->SafeDelete();
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("to call local preonline, but can't connect to CardReadAdapter.");
 		return;
 	}
+
+	//oilyang@20230316 check CardIssuer state first
+	CardReadAdapterService_GetDevInfo_Req reqInfo;
+	CardReadAdapterService_GetDevInfo_Ans ansInfo;
+	reqInfo.module = 1;//Module_CardIssuer
+	ErrorCodeEnum eErr = m_pCRAClient->GetDevInfo(reqInfo, ansInfo, 3000, dwUserCode);
+	if (eErr != Error_Succeed || ansInfo.ModuleSN.GetCount() == 0 ||(ansInfo.ModuleSN.GetCount() == 1 && ansInfo.state[0] == 3))//3 for DEVICE_STATUS_FAULT defined in DevBaseClass.h
+	{
+		if (m_pHandShakeConn && m_pHandShakeConn->IsConnectionOK())
+		{
+			m_pHandShakeConn->SendCardActive(1, slot, Error_Hardware, (const char*)termNo, (const char*)account,
+				account.GetLength(), "CardIssuer in fault state", 26, 9999, 9999, HeartBeat_UserErrorCode_CardIssuer_In_Fault_State);
+		}
+		LogWarn(Severity_Middle, Error_Unexpect, HeartBeat_UserErrorCode_CardIssuer_In_Fault_State, "CardIssuer in fault state");
+		return;
+	}
+	Sleep(500);//oilyang@20230328 wait for entity CardReadAdapter to change back to normal state
 	CardReadAdapterService_PreOnline_Req req;
 	CardReadAdapterService_PreOnline_Ans ans;
 	CSimpleStringA outParam("");
@@ -703,22 +684,21 @@ void CHeartBeatFSM::LocalPreOnline(int slot, CSimpleStringA fromTermNo,CSimpleSt
 	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) {
-		outParam = CSimpleStringA::Format("local preonline failed:%d(0x%x)", eErr, eErr);
+	eErr = m_pCRAClient->PreOnline(req, ans, 65000, dwUserCode);
+	if (eErr != Error_Succeed){
+		outParam = CSimpleStringA::Format("local preonline failed:%d(0x%x),dwUserCode:%d(0x%x)", eErr, eErr, dwUserCode, dwUserCode);
 		if (eErr == Error_Duplication)
 		{
 			ReceivePreOnlineBack(Error_Duplication, "", 0, 0);
-			pCardReadAdapterClient->GetFunction()->CloseSession();
 			return;
 		}
-		LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardStore_Invoke_PreOnline_Falied, outParam.GetData());
+		LogWarn(Severity_Middle, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardStore_Invoke_PreOnline_Falied, outParam.GetData());
 	}
 	Sleep(500);
 	CardReadAdapterService_QueryCardInfoOnStore_Req reqX;
 	CardReadAdapterService_QueryCardInfoOnStore_Ans ansX;
 	ErrorCodeEnum eErrX = Error_Unexpect;
-	eErrX = pCardReadAdapterClient->QueryCardInfoOnStore(reqX, ansX,12000);
+	eErrX = m_pCRAClient->QueryCardInfoOnStore(reqX, ansX,12000);
 	if (eErrX != Error_Succeed)
 	{
 		outParam = CSimpleStringA::Format("QueryCardInfoOnStore failed.%d",eErrX);
@@ -727,455 +707,28 @@ void CHeartBeatFSM::LocalPreOnline(int slot, CSimpleStringA fromTermNo,CSimpleSt
 	}
 	if (m_pHandShakeConn && m_pHandShakeConn->IsConnectionOK())
 	{
-		m_pHandShakeConn->SendCardActive(1,slot,eErr, (const char*)termNo, (const char*)account,
-			account.GetLength(), (const char*)ans.result, ans.result.GetLength(),ansX.findCard,ansX.cardPos);
+		m_pHandShakeConn->SendCardActive(1, slot, eErr, (const char*)termNo, (const char*)account,
+			account.GetLength(), (const char*)ans.result, ans.result.GetLength(), ansX.findCard, ansX.cardPos, dwUserCode);
 	}
-	pCardReadAdapterClient->GetFunction()->CloseSession();
 }
-void CHeartBeatFSM::ReceivePreOnlineBack(unsigned long errCode,CSimpleStringA data, unsigned long findCard, unsigned long cardPos)
+void CHeartBeatFSM::ReceivePreOnlineBack(unsigned long errCode,CSimpleStringA data, unsigned long findCard, unsigned long cardPos, unsigned long userErrCode)
 {
-	LOG_FUNCTION();
-	CardIssuerService_ClientBase *pCardIssuerClient = NULL;
-	ErrorCodeEnum eErr = Error_Unexpect;
-	pCardIssuerClient = new CardIssuerService_ClientBase(GetEntityBase());
-	eErr = pCardIssuerClient->Connect();	
-	if (eErr != Error_Succeed)
+	if (!CheckCRASessionOrToConnect())
 	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("pGuiConsoleClient is null or connect to cardissuer failed.%d", eErr);
-		pCardIssuerClient->SafeDelete();
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("while receive preonline result, but can't connect to CardReadAdapter.");
 		return;
 	}
-	CardIssuerService_NotifyPreonline_Req req;
-	CardIssuerService_NotifyPreonline_Ans ans;
+
+	CardReadAdapterService_NotifyPreonline_Req req;
+	CardReadAdapterService_NotifyPreonline_Ans ans;
 	req.data = data;
 	req.findCard = findCard;
 	req.cardPos = cardPos;
 	req.errCode = errCode;
-	eErr = pCardIssuerClient->NotifyPreonline(req, ans, 10000);
+	req.reserved1.Init(1);
+	req.reserved1[0] = userErrCode;
+	ErrorCodeEnum eErr = m_pCRAClient->NotifyPreonline(req, ans, 10000);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("NotifyPreonline ret:%d",eErr);
-	pCardIssuerClient->GetFunction()->CloseSession();
-}
-int CHeartBeatFSM::CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx)
-{
-	int ret = 0;
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cross term call,type:%x, entity: 0x%x",ctx->Req.type, ctx->Req.nEntityID);
-	switch (ctx->Req.nEntityID)
-	{
-	case 0x206:
-	case 0x201:
-	case 0x218:
-	case 0x21B:
-		ret = ProcessCrossCallToHBService(ctx->Req.type,ctx);
-		break;
-	default:
-		break;
-	}
-	return ret;
-}
-int CHeartBeatFSM::ProcessCrossCallToHBService(int callType, SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx)
-{
-	LOG_FUNCTION();
-	ctx->Answer(Error_Succeed);
-	return SendToHeartBeatService(ctx->Req,ctx->Ans);
-}
-void CHeartBeatFSM::DoLocalProcessCrossCallTask(CrossCallReq *reqInfo, const int nBufSize)
-{
-	if (GetTerminalStageState().Compare("A"))
-	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Terminal havn't been auth suc,forbid cross call.");
-		return;
-	}
-
-	LocalProcessCrossCallTask *pTask = new LocalProcessCrossCallTask(this, reqInfo, nBufSize);
-	GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
-}
-int CHeartBeatFSM::LocalProcessCrossCall(CrossCallReq* reqInfo, const int nBufSize)
-{
-	LOG_FUNCTION();
-
-	if(reqInfo == NULL) {
-		return -1;
-	}
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("entity sn:%x,is RVC.IL:%d,bTwoWay:%d", reqInfo->nEntityID, m_bJBMachine, reqInfo->bTwoWay);
-	if(m_bJBMachine) { //简版心跳逻辑,那么接收到的应该是回收包
-		switch(reqInfo->nEntityID) //实体ID
-		{
-		case 0x201:
-		{
-			ErrorCodeEnum ec = Error_Succeed;
-			IDCertService_ClientBase* pClient = new IDCertService_ClientBase(GetEntityBase());
-			ec = pClient->Connect();
-			if (ec == Error_Succeed) {
-				IDCertService_CrossTermInvokeInfo_Info info;
-				info.type = reqInfo->CallType;
-				info.nEntityID = reqInfo->nEntityID;
-				info.result = reqInfo->ErrorCode;
-				SpBuffer spbuf2;
-				int xSize = nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX);
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset %d, %d", FIELD_OFFSET(CrossCallReq, StrParamX), xSize);
-				bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), xSize);
-				if (bBuf) {
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset succ.");
-					if (xSize > 0)
-						info.paramX = spbuf2.ToBlob();
-				}
-
-				ec = pClient->CrossTermInvokeInfo(info);
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CrossTermInvokeInfo return %d", ec);
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Connect to IDCertificate failed %d", ec);
-			}
-		}
-			break;
-		case 0x206://pinpad
-		{
-			ErrorCodeEnum ec = Error_Succeed;
-			PinPadService_ClientBase* pClient = new PinPadService_ClientBase(GetEntityBase());
-			ec = pClient->Connect();
-			if (ec == Error_Succeed) {
-				PinPadService_CrossTermInvokeInfo_Info info;
-				info.type = reqInfo->CallType;
-				info.nEntityID = reqInfo->nEntityID;
-				info.result = reqInfo->ErrorCode;
-				SpBuffer spbuf2;
-				int xSize = nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX);
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset %d, %d", FIELD_OFFSET(CrossCallReq, StrParamX), xSize);
-				bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), xSize);
-				if (bBuf) {
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset succ.");
-					if (xSize > 0)
-						info.paramX = spbuf2.ToBlob();
-				}
-
-				ec = pClient->CrossTermInvokeInfo(info);
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CrossTermInvokeInfo return %d", ec);
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Connect to PinPad failed %d", ec);
-			}
-		}
-		break;
-		case 0x218:
-			{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Scanner set");
-				ErrorCodeEnum ec = Error_Succeed;
-				ScannerService_ClientBase* pClient = new ScannerService_ClientBase(GetEntityBase());
-				ec = pClient->Connect();
-				if(ec == Error_Succeed) {
-					ScannerService_CrossTermInvokeInfo_Info info;
-					info.type = reqInfo->CallType;
-					info.nEntityID = reqInfo->nEntityID;
-					info.result = reqInfo->ErrorCode;
-					SpBuffer spbuf2;
-					int size = nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX);
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset %d, %d", FIELD_OFFSET(CrossCallReq, StrParamX) , size);
-					bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), size);
-					if(bBuf) {
-						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset succ.");
-						if(size > 0) {
-							info.paramX = spbuf2.ToBlob();
-						}
-					}
-					ec = pClient->CrossTermInvokeInfo(info);
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CrossTermInvokeInfo return %d", ec);
-				} else {
-					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Connect to scanner failed %d", ec);
-				}
-			}
-			break;
-		case 0x21B:
-		{
-			ErrorCodeEnum ec = Error_Succeed;
-			CardReadAdapterService_ClientBase* pClient = new CardReadAdapterService_ClientBase(GetEntityBase());
-			ec = pClient->Connect();
-			if (ec == Error_Succeed) {
-				CardReadAdapterService_CrossTermInvokeInfo_Info info;
-				info.type = reqInfo->CallType;
-				info.nEntityID = reqInfo->nEntityID;
-				info.result = reqInfo->ErrorCode;
-				SpBuffer spbuf2;
-				int xSize = nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX);
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset %d, %d", FIELD_OFFSET(CrossCallReq, StrParamX), xSize);
-				bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), xSize);
-				if (bBuf) {
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("offset succ.");
-					if (xSize > 0)
-						info.paramX = spbuf2.ToBlob();
-				}
-
-				ec = pClient->CrossTermInvokeInfo(info);
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CrossTermInvokeInfo return %d", ec);
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Connect to CardReadAdapter failed %d", ec);
-			}
-		}
-		break;
-		case 0x999:
-		{
-			if (reqInfo->numOfBlobInParamX == 1)
-			{
-				NotifyIECallResult resultNote;
-				resultNote.ans_context = reqInfo->StrParamX;
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("oiltest %s", (const char*)resultNote.ans_context.SubString(0, 512));
-				resultNote.error = reqInfo->ErrorCode;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("notify result to IE:error %d,len of ans_context %d", resultNote.error, reqInfo->lensOfBlobInParamX[0]);
-				SpSendBroadcast(GetEntityBase()->GetFunction(), SP_MSG_OF(NotifyIECallResult), SP_MSG_SIG_OF(NotifyIECallResult), resultNote);
-			}
-			else
-			{//oiltest 需要改成按照序号组包
-				m_tmpMultiBlob += reqInfo->StrParamX;
-				if (reqInfo->blobSN == reqInfo->numOfBlobInParamX-1)
-				{
-					NotifyIECallResult resultNote;
-					resultNote.ans_context = m_tmpMultiBlob;
-					if (resultNote.ans_context.GetLength() > 512)
-						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("oiltest substr %s", (const char*)resultNote.ans_context.SubString(0, 512));
-					else
-						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("oiltest %s", (const char*)resultNote.ans_context);
-					if (resultNote.ans_context.GetLength() > 100)
-						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("oiltest the last 100 str %s", (const char*)resultNote.ans_context.SubString(resultNote.ans_context.GetLength()-100, 100));
-					resultNote.error = reqInfo->ErrorCode;
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("notify result to IE:error %d,len of ans_context %d", resultNote.error, resultNote.ans_context.GetLength());
-					SpSendBroadcast(GetEntityBase()->GetFunction(), SP_MSG_OF(NotifyIECallResult), SP_MSG_SIG_OF(NotifyIECallResult), resultNote);
-					m_tmpMultiBlob = "";
-				}
-			}
-		}
-		break;
-		default:
-			break;
-		}
-	} else { //常规机型,连接适配器
-		switch(reqInfo->nEntityID) //实体ID
-		{
-		case 0x201:
-		{
-			ErrorCodeEnum ec = Error_Succeed;
-			if (m_pIDClient == NULL)
-			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("creat IDCertService_ClientBase client");
-				m_pIDClient = new IDCertService_ClientBase(GetEntityBase());
-			}
-			if (m_pIDClient != NULL)
-			{
-				if (m_pIDClient->QuerySessionClosed())
-				{
-					m_pIDClient->SafeDelete();
-					m_pIDClient = new IDCertService_ClientBase(GetEntityBase());
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to connect to IDCertificate...");
-					if (m_pIDClient != NULL)
-						ec = m_pIDClient->Connect();
-				}
-			}
-			if (ec == Error_Succeed) {
-				IDCertService_CrossTermCall_Req reqX;
-				IDCertService_CrossTermCall_Ans ansX;
-				reqX.type = reqInfo->CallType;
-				//这个应该不用存储
-				reqX.fromTerminalNo = reqInfo->ToTerminalNo;
-				reqX.toTerminalNo = reqInfo->FromTerminalNo;
-
-				SpBuffer spbuf2;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("offset %d", FIELD_OFFSET(CrossCallReq, StrParamX));
-				bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX) + 1);
-				if (bBuf) {
-					reqX.paramX = spbuf2.ToBlob();
-				}
-				ec = m_pIDClient->CrossTermCall(reqX, ansX, 20000);
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("local term call ret:%x", ec);
-				if (reqInfo->bTwoWay)//if one way call, no need to feed back
-				{
-					HeartBeatService_CrossTermCall_Req reqY;
-					HeartBeatService_CrossTermCall_Ans ansY;
-					reqY.type = reqInfo->CallType;
-					reqY.nEntityID = reqInfo->nEntityID;
-					//做返回
-					ansY.retCode = ec;
-					reqY.fromTerminalNo = reqInfo->ToTerminalNo;
-					reqY.toTerminalNo = reqInfo->FromTerminalNo;
-					reqY.paramX = ansX.retParamX;
-					//reqY. = ansX.retParamY.m_iLength;//oiltest 暂时用来传递blob长度
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send pkg to client: %d,Y len:%d", ec, reqY.paramX.m_iLength);
-					SendToHeartBeatService(reqY, ansY);
-				}
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Connect to IDCertificate failed %d", ec);
-				m_pIDClient->SafeDelete();
-				m_pIDClient = NULL;
-			}
-		}
-		break;
-		case 0x206://pinpad
-		{
-			ErrorCodeEnum ec = Error_Succeed;
-			if (m_pPinPadClient == NULL)
-			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("creat PinPadService_ClientBase client");
-				m_pPinPadClient = new PinPadService_ClientBase(GetEntityBase());
-			}
-			if (m_pPinPadClient != NULL)
-			{
-				if (m_pPinPadClient->QuerySessionClosed())
-				{
-					m_pPinPadClient->SafeDelete();
-					m_pPinPadClient = new PinPadService_ClientBase(GetEntityBase());
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to connect to PinPad...");
-					if (m_pPinPadClient != NULL)
-						ec = m_pPinPadClient->Connect();
-				}
-			}
-			if (ec == Error_Succeed) {
-				PinPadService_CrossTermCall_Req reqX;
-				PinPadService_CrossTermCall_Ans ansX;
-				reqX.type = reqInfo->CallType;
-				//这个应该不用存储
-				reqX.fromTerminalNo = reqInfo->ToTerminalNo;
-				reqX.toTerminalNo = reqInfo->FromTerminalNo;
-
-				SpBuffer spbuf2;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("offset %d", FIELD_OFFSET(CrossCallReq, StrParamX));
-				bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX) + 1);
-				if (bBuf) {
-					reqX.paramX = spbuf2.ToBlob();
-				}
-				ec = m_pPinPadClient->CrossTermCall(reqX, ansX, 20000);
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("local term call ret:%x", ec);
-				if (reqInfo->bTwoWay)//if one way call, no need to feed back
-				{
-					HeartBeatService_CrossTermCall_Req reqY;
-					HeartBeatService_CrossTermCall_Ans ansY;
-					reqY.type = reqInfo->CallType;
-					reqY.nEntityID = reqInfo->nEntityID;
-					//做返回
-					ansY.retCode = ec;
-					reqY.fromTerminalNo = reqInfo->ToTerminalNo;
-					reqY.toTerminalNo = reqInfo->FromTerminalNo;
-					reqY.paramX = ansX.retParamX;
-					//reqY. = ansX.retParamY.m_iLength;//oiltest 暂时用来传递blob长度
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send pkg to client: %d,Y len:%d", ec, reqY.paramX.m_iLength);
-					SendToHeartBeatService(reqY, ansY);
-				}
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Connect to PinPad failed %d", ec);
-			}
-		}
-		break;
-		case 0x218: // 高拍仪功能集
-			{
-				ErrorCodeEnum ec = Error_Succeed;
-				ScannerService_ClientBase* pClient = new ScannerService_ClientBase(GetEntityBase());
-				ec = pClient->Connect();
-				if(ec == Error_Succeed) {
-					ScannerService_CrossTermCall_Req reqX;
-					ScannerService_CrossTermCall_Ans ansX;
-					reqX.type = reqInfo->CallType;
-					//这个应该不用存储
-					reqX.fromTerminalNo = reqInfo->ToTerminalNo;
-					reqX.toTerminalNo = reqInfo->FromTerminalNo;
-
-					SpBuffer spbuf2;
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("offset %d", FIELD_OFFSET(CrossCallReq, StrParamX) );
-					bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX) + 1 );
-					if(bBuf) {
-						reqX.paramX = spbuf2.ToBlob();
-					}
-					 ec = pClient->CrossTermCall(reqX, ansX, 20000);
-					 DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("local term call ret:%x",ec);
-					 if (reqInfo->bTwoWay)//if one way call, no need to feed back
-					 {
-						 HeartBeatService_CrossTermCall_Req reqY;
-						 HeartBeatService_CrossTermCall_Ans ansY;
-						 reqY.type = reqInfo->CallType;
-						 reqY.nEntityID = reqInfo->nEntityID;
-						 //做返回
-						 ansY.retCode = ec;
-						 reqY.fromTerminalNo = reqInfo->ToTerminalNo;
-						 reqY.toTerminalNo = reqInfo->FromTerminalNo;
-						 reqY.paramX = ansY.retParamX;
-						 DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send pkg to client: %d", ec);
-						 SendToHeartBeatService(reqY, ansY);
-					 }
-				} else {
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Connect to scanner failed %d", ec);
-				}
-			}
-			break;
-		case 0x21B:
-		{
-			ErrorCodeEnum ec = Error_Succeed;
-			if (m_pCRAClient == NULL)
-			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("creat CardReadAdapterService_ClientBase client");
-				m_pCRAClient = new CardReadAdapterService_ClientBase(GetEntityBase());
-			}
-			if (m_pCRAClient != NULL)
-			{
-				if (m_pCRAClient->QuerySessionClosed())
-				{
-					m_pCRAClient = NULL;
-					m_pCRAClient = new CardReadAdapterService_ClientBase(GetEntityBase());
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to connect to CardReadAdapter");
-					ec = m_pCRAClient->Connect();
-				}
-			}
-			if (ec == Error_Succeed) {
-				CardReadAdapterService_CrossTermCall_Req reqX;
-				CardReadAdapterService_CrossTermCall_Ans ansX;
-				reqX.type = reqInfo->CallType;
-				//这个应该不用存储
-				reqX.fromTerminalNo = reqInfo->ToTerminalNo;
-				reqX.toTerminalNo = reqInfo->FromTerminalNo;
-
-				SpBuffer spbuf2;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("offset %d", FIELD_OFFSET(CrossCallReq, StrParamX));
-				bool bBuf = spbuf2.OpenRead((const char*)&(reqInfo->StrParamX[0]), nBufSize - FIELD_OFFSET(CrossCallReq, StrParamX) + 1);
-				if (bBuf) {
-					reqX.paramX = spbuf2.ToBlob();
-				}
-				ec = m_pCRAClient->CrossTermCall(reqX, ansX, 20000);
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("local term call ret:%x", ec);
-				if (reqInfo->bTwoWay)//if one way call, no need to feed back
-				{
-					HeartBeatService_CrossTermCall_Req reqY;
-					HeartBeatService_CrossTermCall_Ans ansY;
-					reqY.type = reqInfo->CallType;
-					reqY.nEntityID = reqInfo->nEntityID;
-					//做返回
-					ansY.retCode = ec;
-					reqY.fromTerminalNo = reqInfo->ToTerminalNo;
-					reqY.toTerminalNo = reqInfo->FromTerminalNo;
-					reqY.paramX = ansX.retParamX;
-					//reqY. = ansX.retParamY.m_iLength;//oiltest 暂时用来传递blob长度
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send pkg to client: %d,X len:%d", ec, reqY.paramX.m_iLength);
-					SendToHeartBeatService(reqY, ansY);
-				}
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Connect to CardReadAdapter failed %d", ec);
-			}
-		}
-		break;
-		case 0x999:
-		{
-			m_ILDeviceNo = reqInfo->FromTerminalNo;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("save il TerminalNo:%s",(const char*)m_ILDeviceNo);
-			NotifyIEToCall note;
-			note.context = reqInfo->StrParamX;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("oiltest %s",(const char*)note.context);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("note IE to call:%d", reqInfo->lensOfBlobInParamX[0]);
-			SpSendBroadcast(GetEntityBase()->GetFunction(), SP_MSG_OF(NotifyIEToCall), SP_MSG_SIG_OF(NotifyIEToCall), note);
-		}
-		break;
-		default:
-			break;
-		}
-	}
-
-
 }
 
 ErrorCodeEnum CHeartBeatFSM::GetPerformCounter(TermianlCounter& counter)
@@ -1402,31 +955,6 @@ Cleanup:
 //oiltestlinux
 #endif //RVC_OS_WIN
 }
-int CHeartBeatFSM::SendToHeartBeatService(HeartBeatService_CrossTermCall_Req &req, HeartBeatService_CrossTermCall_Ans &ans)
-{
-	LOG_FUNCTION();
-	if (m_pHandShakeConn && m_pHandShakeConn->IsConnectionOK())
-	{
-		m_pHandShakeConn->SendCrossCallToService(req,ans);
-	}
-	return 0;
-}
-void CHeartBeatFSM::ILCallToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx)
-{
-	if (m_pHandShakeConn && m_pHandShakeConn->IsConnectionOK())
-	{
-		CSimpleStringA csTerm("");
-		GetEntityBase()->GetFunction()->GetSysVar("AttachedTerminal", csTerm);
-		m_pHandShakeConn->SendILCallToService(ctx->Info.req_context,0,true, m_localDeviceNo,csTerm);
-	}
-}
-void CHeartBeatFSM::CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx)
-{
-	if (m_pHandShakeConn && m_pHandShakeConn->IsConnectionOK())
-	{
-		m_pHandShakeConn->SendILCallToService(ctx->Info.ans_context, ctx->Info.error, false, m_localDeviceNo,m_ILDeviceNo);
-	}
-}
 void HeartBeatConnection::OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg)
 {
 	string serviceCode = pRecvPkg->GetServiceCode();
@@ -1439,10 +967,6 @@ void HeartBeatConnection::OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg)
 	{
 		PkgRcvProcCardActive(pRecvPkg);
 	}
-	else if (serviceCode.compare("CRSSACT") == 0)
-	{
-		PkgRcvProcCrossCall(pRecvPkg);
-	}
 	else
 	{
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("unknown service code!");
@@ -1597,10 +1121,10 @@ void HeartBeatConnection::SendHandShake()
 	//delete pkt;
 }
 
-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)
+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, unsigned long errCSCode)
 {
-	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);
+	CSimpleStringA inParm = CSimpleStringA::Format("SendCardActive,type:%d, slot:%d, errCode:%d, fromTerm:%s, termNo:%s, findCard:%d, cardPos:%d, dataSize:%d,errCSCode:%d",
+													type, slot, errCode, m_TerminalNo.GetData(), termNo, findCard, cardPos, dataSize, errCSCode);
 	LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_SendCardActive_InParam, inParm.GetData());
 	//发起跨机调用包
 	if (type == 0)
@@ -1610,10 +1134,10 @@ void HeartBeatConnection::SendCardActive(const int type,const int slot,unsigned
 		m_pEntity->GetFunction()->GetSystemStaticInfo(sysSInfo);
 		req.type = 0;
 		req.slot = slot;
-		strcpy_s(req.FromTerminalNo, sizeof(req.FromTerminalNo), m_TerminalNo.GetData());
-		strcpy_s(req.Account, accSize, account);
-		strcpy_s(req.TerminalNo, sizeof(req.TerminalNo), termNo);
-		strcpy_s(req.Param2, dataSize, data);
+		strncpy_s(req.FromTerminalNo, m_TerminalNo.GetData(), m_TerminalNo.GetLength());
+		strncpy_s(req.Account, account, accSize);
+		strncpy_s(req.TerminalNo, termNo, strlen(termNo));
+		strncpy_s(req.Param2, data, dataSize);
 		CSmartPointer<IPackage> pkt = CreateNewPackage("CARDACT");
 		pkt->AddStruct("INSREQX", false, false, (LPBYTE)&req, sizeof(CardActiveReq));
 
@@ -1629,125 +1153,16 @@ void HeartBeatConnection::SendCardActive(const int type,const int slot,unsigned
 		req.ErrCode = errCode;
 		req.findCard = findCard;
 		req.cardPos = cardPos;
-		strcpy_s(req.FromTerminalNo, sizeof(req.FromTerminalNo), m_TerminalNo.GetData());
-		strcpy_s(req.Account, accSize, account);
-		strcpy_s(req.TerminalNo, sizeof(req.TerminalNo), termNo);
-		strcpy_s(req.Param2, dataSize, data);
+		req.reserved1 = errCSCode;
+		strncpy_s(req.FromTerminalNo, m_TerminalNo.GetData(), m_TerminalNo.GetLength());
+		strncpy_s(req.Account, account, accSize);
+		strncpy_s(req.TerminalNo, termNo, strlen(termNo));
+		strncpy_s(req.Param2, data, dataSize);
 		CSmartPointer<IPackage> pkt = CreateNewPackage("CARDACT");
 		pkt->AddStruct("INSREQX", false, false, (LPBYTE)&req, sizeof(CardActiveReq));
 
 		SendPackage(pkt);
 	}
-}
-void HeartBeatConnection::SendCrossCallToService(HeartBeatService_CrossTermCall_Req &req, HeartBeatService_CrossTermCall_Ans &ans)
-{
-	LOG_FUNCTION();
-	Dbg("from term %s to term %s for entity %x,twoway:%d", (const char*)req.fromTerminalNo, (const char*)req.toTerminalNo, req.nEntityID, req.isTwoWay);
-
-	if (req.paramX.m_iLength > 0)
-	{
-		//char *pBuf = new char[64 * 1024];
-		//ZeroMemory(pBuf, 64 * 1024);
-		//HexBuf2StrBuf((PBYTE)req.paramX.m_pData, &pBuf, req.paramX.m_iLength);
-		//CSimpleStringA xStr(pBuf);
-		//int i = 0;
-		//for (; i < req.paramX.m_iLength / 900; i++)
-		//{
-		//	Dbg("%s", xStr.SubString(i * 900, 900));
-		//}
-		//Dbg("%s", xStr.SubString(i * 900, req.paramX.m_iLength - i * 900));
-	}
-	int count = req.paramX.m_iLength / (50 * 1000);
-	int size = sizeof(CrossCallReq)*(count + 1) + req.paramX.m_iLength + count;
-	char* pBuf = new char[size];
-	ZeroMemory(pBuf, size);
-	CrossCallReq* pReqX = (CrossCallReq*)pBuf;
-	for (int i = 0; i < count+1; i++)
-	{
-		pReqX[i].CallType = req.type;
-		pReqX[i].bTwoWay = req.isTwoWay;
-		pReqX[i].nEntityID = req.nEntityID;
-		pReqX[i].ErrorCode = ans.retCode;
-		pReqX[i].lensOfBlobInParamX[0] = req.paramX.m_iLength;
-		pReqX[i].numOfBlobInParamX = count+1;
-		strcpy_s(pReqX[i].FromTerminalNo, sizeof(pReqX[i].FromTerminalNo),req.fromTerminalNo);
-		strcpy_s(pReqX[i].ToTerminalNo, sizeof(pReqX[i].ToTerminalNo), req.toTerminalNo);
-		strcpy_s(pReqX[i].StrParam1, sizeof(pReqX[i].StrParam1), req.param1);
-		strcpy_s(pReqX[i].StrParam2, sizeof(pReqX[i].StrParam2), req.param2);
-		if (i == count)
-			memcpy_s(pReqX[i].StrParamX, (req.paramX.m_iLength-50*1000*i), (char*)req.paramX.m_pData+50*1000*i, req.paramX.m_iLength - 50 * 1000 * i);
-		else
-			memcpy_s(pReqX[i].StrParamX, 50*1000, (char*)req.paramX.m_pData + 50 * 1000 *i, 50 * 1000);
-	}
-	//memcpy_s(pReqX->StrParamX,req.paramY.GetLength(),req.paramX, req.paramX.GetLength());
-	Dbg("from %s to %s,struct X size:%d, len:%d,struct count:%d", pReqX->FromTerminalNo, pReqX->ToTerminalNo, size, req.paramX.m_iLength,count);
-	CSmartPointer<IPackage> pkt = CreateNewPackage("CRSSACT");
-	pkt->AddStruct("CRSSREQ", false, false, (LPBYTE)pReqX, size,count+1);
-	SendPackage(pkt);
-	delete [] pBuf;
-}
-void HeartBeatConnection::SendILCallToService(CSimpleStringA csContent, int err, bool bFromIL, CSimpleStringA fromDevNo, CSimpleStringA toDevNo)
-{
-	LOG_FUNCTION();
-	int count = csContent.GetLength() / (50 * 1000);
-	Dbg("count %d,size of content %d",count,csContent.GetLength());
-	if (csContent.GetLength() > 32)
-		Dbg("the last 32 str %s", (const char*)csContent.SubString(csContent.GetLength()-32,32));
-	
-	for (int i = 0; i < count + 1; i++)
-	{
-		int size;
-		if (i == count)
-		{
-			size = sizeof(CrossCallReq) + csContent.GetLength() - 50*1000*i + 1;
-		}
-		else
-			size = sizeof(CrossCallReq) + 50 * 1000 + 1;
-		
-		char* pBuf = new char[size];
-		ZeroMemory(pBuf, size);
-		Dbg("sz %d", size);
-		CrossCallReq* pReqX = (CrossCallReq*)pBuf;
-		pReqX->CallType = 999;
-		pReqX->bTwoWay = false;
-		pReqX->nEntityID = 0x999;
-		pReqX->blobSN = i;
-		pReqX->lensOfBlobInParamX[0] = csContent.GetLength();//no use 实际用到的时候需要修改这里
-		pReqX->numOfBlobInParamX = count + 1;
-		if (bFromIL)
-		{
-			pReqX->ErrorCode = 0;
-		}
-		else
-		{
-			pReqX->ErrorCode = err;
-		}
-		strcpy_s(pReqX->FromTerminalNo,sizeof(pReqX->FromTerminalNo), fromDevNo);
-		strcpy_s(pReqX->ToTerminalNo, sizeof(pReqX->ToTerminalNo), toDevNo);
-		CSmartPointer<IPackage> pkt = CreateNewPackage("CRSSACT");
-		if (i == count)
-		{
-			memcpy_s(pReqX->StrParamX, csContent.GetLength() - 50 * 1000 * i, (const char*)csContent+50 * 1000 * i, csContent.GetLength() - 50 * 1000 * i);
-			Dbg("to add the %d packet from %d",i, csContent.GetLength() - 50 * 1000 * i);
-			Dbg("[%d],%d%d%d", strlen(pReqX->StrParamX), pReqX->StrParamX[strlen(pReqX->StrParamX) - 3], pReqX->StrParamX[strlen(pReqX->StrParamX) - 2],pReqX->StrParamX[strlen(pReqX->StrParamX)-1]);
-			pkt->AddStruct("CRSSREQ", false, false, (LPBYTE)pReqX, sizeof(CrossCallReq) + csContent.GetLength() - 50 * 1000 * i);
-			Dbg("p len:%d", sizeof(CrossCallReq) + csContent.GetLength() -  50 * 1000 * i);
-			SendPackage(pkt);
-			Dbg("the last of %d",i);
-			
-		}
-		else
-		{
-			memcpy_s(pReqX->StrParamX, 50 * 1000, (const char*)csContent + 50 * 1000 * i, 50 * 1000);
-			pkt->AddStruct("CRSSREQ", false, false, (LPBYTE)pReqX, sizeof(CrossCallReq)+50*1000);
-			Dbg("p len %d:%d,last 3:%d,%d,%d",i, sizeof(CrossCallReq) + 50 * 1000, pReqX->StrParamX[strlen(pReqX->StrParamX) - 3], pReqX->StrParamX[strlen(pReqX->StrParamX) - 2], pReqX->StrParamX[strlen(pReqX->StrParamX) - 1]);
-			SendPackage(pkt);
-			Dbg("the %d packet",i);
-		}
-		delete[] pBuf;
-	}	
-	
-	
 }
 void HeartBeatConnection::PkgRcvProcHandAndInstruc(const CSmartPointer<IPackage> &pRecvPkg)
 {
@@ -1847,7 +1262,7 @@ 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);
+		ReceivePreOnlineBack(req->ErrCode, req->Param2, req->findCard, req->cardPos, req->reserved1);
 }
 
 void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pRecvPkg)
@@ -1864,9 +1279,12 @@ void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pR
 			CardActiveReq* pAns = (CardActiveReq*)pBuf;
 			if (nArrayNum > 0)
 			{
-				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());
+				CSimpleStringA inParam = CSimpleStringA::Format("PkgRcvProcCardActive, type %d, from term:%s, term:%s, errorCode:%d,userErrCode:%d, accLen:%d, param2Len:%d, findCard:%d,cardPos:%d",
+					pAns->type, pAns->FromTerminalNo, pAns->TerminalNo, pAns->ErrCode, pAns->reserved1, strlen(pAns->Account), strlen(pAns->Param2), pAns->findCard, pAns->cardPos);
+				if (pAns->ErrCode == Error_Succeed)
+					LogWarn(Severity_Low, Error_Succeed, HeartBeat_UserErrorCode_PkgRcvProcCardActive_InParam, inParam.GetData());
+				else
+					LogWarn(Severity_Middle, Error_Unexpect, HeartBeat_UserErrorCode_PkgRcvProcCardActive_InParam, inParam.GetData());
 				m_pFSM->ProcessCardActive(pAns);
 			}
 		}
@@ -1877,71 +1295,6 @@ void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pR
 	}
 }
 
-void HeartBeatConnection::PkgRcvProcCrossCall(const CSmartPointer<IPackage> &pRecvPkg)
-{
-	LOG_FUNCTION();
-	int nLen = pRecvPkg->GetStructLen("CRSSREQ");
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("nLen: %d", nLen);
-	if (nLen > 0) {
-		
-		BYTE *pBuf = new BYTE[nLen+1];
-		ZeroMemory(pBuf,nLen+1);
-		int nArrayNum = 0;
-		if (pRecvPkg->GetStructData("CRSSREQ", pBuf, &nLen, &nArrayNum)) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%d,array num:%d,last 3:%d,%d,%d", nLen, nArrayNum,pBuf[nLen-3], pBuf[nLen - 2], pBuf[nLen - 1]);
-			CrossCallReq* pAnsArray = (CrossCallReq*)pBuf;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%x", ((CrossCallReq*)pBuf)->nEntityID);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("num %x", ((CrossCallReq*)pBuf)->numOfBlobInParamX);
-			int tmpXLen = 0;
-			for (int i = 0; i < nArrayNum; ++i)
-			{
-				tmpXLen += strlen(pAnsArray[i].StrParamX);
-			}
-
-			tmpXLen += (sizeof(CrossCallReq)*nArrayNum);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("tmpXLen:%d", tmpXLen);
-			BYTE *pAnsBuf = new BYTE[tmpXLen + 1];
-			ZeroMemory(pAnsBuf, tmpXLen + 1);
-			memcpy_s(pAnsBuf, tmpXLen+1, pBuf, tmpXLen);
-			CrossCallReq* pAns = (CrossCallReq*)pAnsBuf;
-			pAns->Appendix1 = pAnsArray->Appendix1;
-			pAns->Appendix2 = pAnsArray->Appendix2;
-			pAns->bTwoWay = pAnsArray->bTwoWay;
-			pAns->CallType = pAnsArray->CallType;
-			pAns->ErrorCode = pAnsArray->ErrorCode;
-			pAns->nEntityID = pAnsArray->nEntityID;
-			pAns->numOfBlobInParamX = pAnsArray->numOfBlobInParamX;
-			for (int i = 0; i < sizeof(pAns->lensOfBlobInParamX); i++)
-				pAns->lensOfBlobInParamX[i] = pAnsArray->lensOfBlobInParamX[i];
-			strcpy_s(pAns->FromTerminalNo, sizeof(pAns->FromTerminalNo), pAnsArray->FromTerminalNo);
-			strcpy_s(pAns->StrParam1, sizeof(pAns->StrParam1), pAnsArray->StrParam1);
-			strcpy_s(pAns->StrParam2, sizeof(pAns->StrParam2), pAnsArray->StrParam2);
-			strcpy_s(pAns->ToTerminalNo, sizeof(pAns->ToTerminalNo), pAnsArray->ToTerminalNo);
-
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%x",pAns->nEntityID);
-			for (int i = 0, start = 0; i < nArrayNum; ++i)
-			{
-				strcpy_s(pAns->StrParamX + start, tmpXLen - start, pAnsArray[i].StrParamX);
-				start += strlen(pAnsArray[i].StrParamX);
-			}
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("type:%x,from %s,to %s", pAns->CallType, pAns->FromTerminalNo, pAns->ToTerminalNo);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("nEntityID: %x", pAns->nEntityID);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("appendix1: %d", pAns->Appendix1);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("bTwoWay:[%d]", pAns->bTwoWay);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("blobSN:[%d]", pAns->blobSN);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("param2:[%s]", pAns->StrParam2);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("param3:[%d]", pAns->Appendix2);//oiltest
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ErrorCode:[%x]", pAns->ErrorCode);//oiltest
-
-			m_pFSM->DoLocalProcessCrossCallTask(pAns, nLen);
-		}
-		else {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("invalid CRSSREQ packet!");
-		}
-		delete pBuf;
-	}
-}
-
 ErrorCodeEnum CHeartBeatFSM::GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore)
 {
 	//卡库用新地址
@@ -2005,4 +1358,30 @@ ErrorCodeEnum CHeartBeatFSM::GetServerAddr(CSmartPointer<IConfigInfo> &spConfig,
 	}
 
 	return Error_Succeed;
-}
+}
+bool CHeartBeatFSM::CheckCRASessionOrToConnect()
+{
+	if (m_pCRAClient != NULL && !m_pCRAClient->QuerySessionClosed())
+		return true;
+	else
+	{
+		ErrorCodeEnum eErr = Error_Unexpect;
+		m_pCRAClient = new CardReadAdapterService_ClientBase(GetEntityBase());
+		if (m_pCRAClient != NULL) {
+			eErr = m_pCRAClient->Connect();
+			if (eErr != Error_Succeed)
+			{
+				CSimpleStringA errMsg = CSimpleStringA::Format("connect to CardReadAdapter failed:%d(0x%x)", eErr, eErr);
+				LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_Connect_CardReader_Failed, errMsg.GetData());
+				return false;
+			}
+			else
+			{
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("connect to CardReadAdapter suc.");
+				return true;
+			}
+		}
+		else
+			return false;
+	}
+}

+ 22 - 143
Module/mod_heartbeat/HeartBeatFSM.h

@@ -52,7 +52,7 @@ typedef DWORD (__stdcall *LpRestorePerfRegistryFromFile)(LPCWSTR szFileName, LPC
 struct HandReq
 {
 	char TerminalNo[16];
-	uint32_t  ip;
+	unsigned long ip;
 	char WarningLevel;
 	char RunState;
 	char CustomerHandle;
@@ -78,49 +78,28 @@ struct HandErrListReq
 struct HandAns
 {
 	
-	uint32_t EventCode;
+	unsigned long EventCode;
 	char param1[16];
 	//int count;
 };
 struct CardActiveReq
 {
-	uint32_t type;
-	uint32_t slot;
-	uint32_t reserved1;
-	uint32_t reserved2;
+	unsigned long type;
+	unsigned long slot;
+	unsigned long reserved1;
+	unsigned long reserved2;
 	char Account[32];
 	char FromTerminalNo[16];
 	char TerminalNo[16];
-	uint32_t EvtCode;
-	uint32_t ErrCode;
-	uint32_t findCard;
-	uint32_t cardPos;
+	unsigned long EvtCode;
+	unsigned long ErrCode;
+	unsigned long findCard;
+	unsigned long cardPos;
 	char Param1[16];
 	char Param2[1024];
 	char Reserved3[128];
 	char Reserved4[128];
 };
-struct CrossCallReq
-{
-	uint32_t CallType;//跨机调用类型,同def文件的method id,实体内唯一
-	bool bTwoWay;//true :two way call; false: one way call
-	char FromTerminalNo[16];
-	char ToTerminalNo[16];
-	uint32_t nEntityID;
-	uint32_t Appendix1;
-	uint32_t Appendix2;
-	//返回包时用于标注错误
-	uint32_t ErrorCode;
-	//oilyang@20190118
-	uint32_t blobSN;//拆包时用于标注序号
-	//本来以为StrParamX足够大,用这个值来划分blob,结果一个blob就塞满了
-	//故numOfBlobInParamX用于标注拆包数量(结构个数)
-	uint32_t numOfBlobInParamX;
-	uint32_t lensOfBlobInParamX[16];//多个blob塞到StrParamX用于标注每一个的长度
-	char StrParam1[128];
-	char StrParam2[1024];
-	char StrParamX[0];//用于传递图片信息
-};
 #pragma pack()
 enum EvtType
 {
@@ -136,16 +115,11 @@ enum EvtType
 	USER_EVT_EXIT,
 	USER_EVT_CARD_ACTIVE,
 	USER_EVT_CARD_ACTIVE_FINISHED,
-	USER_EVT_CROSS_TERM_CALL,
-	USER_EVT_CROSS_TERM_CALL_FINISHED,
-	USER_EVT_LOCAL_CROSS_TERM_CALL_FINISHED,
-	USER_EVT_ILCallToRVC,
-	USER_EVT_CallResultToIL,
 };
 struct TerminalInfo
 {
 	char TerminalNo[16];
-	uint32_t ip;
+	unsigned long ip;
 	char WarningLevel;
 	char RunState;
 	char CustomerHandle;
@@ -161,16 +135,16 @@ 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
-	uint16_t	procNum;
-	uint16_t	threadNum;
+	unsigned short	totalMem; //MB
+	unsigned short	freeMem;  //MB
+	unsigned short	procNum;
+	unsigned short	threadNum;
 	DWORD			handleNum;
 	DWORD			freeDisk; //MB
 	char			osStartTime[22];
-	uint16_t	cpuLoad;
+	unsigned short	cpuLoad;
 };
 
 namespace HttpStruct
@@ -272,29 +246,6 @@ public:
 protected:
 private:
 };
-class CrossTermCallEvent : public FSMEvent
-{
-public:
-	CrossTermCallEvent() : FSMEvent(USER_EVT_CROSS_TERM_CALL) {}
-	virtual ~CrossTermCallEvent() {}
-	SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx;
-protected:
-private:
-};
-class ILCallToRVCEvent : public FSMEvent
-{
-public:
-	ILCallToRVCEvent() : FSMEvent(USER_EVT_ILCallToRVC) {}
-	virtual ~ILCallToRVCEvent() {}
-	SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx;
-};
-class CallResultToILEvent : public FSMEvent
-{
-public:
-	CallResultToILEvent() : FSMEvent(USER_EVT_CallResultToIL) {}
-	virtual ~CallResultToILEvent() {}
-	SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx;
-};
 class HeartBeatConnection;
 
 class CHeartBeatFSM : public FSMImpl<CHeartBeatFSM>
@@ -321,7 +272,7 @@ 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_tradeState(99),m_bJBMachine(false), m_pCRAClient(NULL)
 	, m_localDeviceNo(""), m_ILDeviceNo(""), m_tmpMultiBlob(""), m_terminalStage(""), m_strHandShakeUrl(""),m_bAlarmed(false)
 	,m_longConnInterval(20000),m_handShakeConnInterval(20000){}
 	~CHeartBeatFSM(){}
@@ -382,14 +333,7 @@ public:
 	}
 	int CardActive(SpReqAnsContext<HeartBeatService_CardActive_Req, HeartBeatService_CardActive_Ans>::Pointer ctx);
 	void LocalPreOnline(int slot, CSimpleStringA fromTermNo, CSimpleStringA termNo, CSimpleStringA account, CSimpleStringA data);
-	void ReceivePreOnlineBack(unsigned long errCode,CSimpleStringA data, unsigned long findCard, unsigned long cardPos);
-	int CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx);
-	int ProcessCrossCallToHBService(int callType, SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx);
-	int SendToHeartBeatService(HeartBeatService_CrossTermCall_Req &req, HeartBeatService_CrossTermCall_Ans &ans);	
-	void DoLocalProcessCrossCallTask(CrossCallReq *reqInfo, const int nBufSize);
-	int LocalProcessCrossCall(CrossCallReq* reqInfo, const int nBufSize);
-	void ILCallToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx);
-	void CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx);
+	void ReceivePreOnlineBack(unsigned long errCode,CSimpleStringA data, unsigned long findCard, unsigned long cardPos, unsigned long userErrCode=0);
 	void ProcessPreOnline(CardActiveReq* req);
 	void ProcessCardActive(CardActiveReq* req);
 
@@ -398,6 +342,7 @@ protected:
 	
 private:
 	ErrorCodeEnum GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore);
+	bool CheckCRASessionOrToConnect();
 	
 	int m_tmpTestFlag;
 	int m_longConnInterval;//长连接时间间隔
@@ -413,8 +358,6 @@ private:
 	int m_nLodCtrFlag;
 	bool m_bJBMachine;
 	CardReadAdapter::CardReadAdapterService_ClientBase *m_pCRAClient;
-	IDCertificate::IDCertService_ClientBase *m_pIDClient;
-	PinPad::PinPadService_ClientBase *m_pPinPadClient;
 
 	bool m_bAlarmed;
 	bool m_isCardStore;
@@ -494,69 +437,7 @@ struct CardActiveTask : public ITaskSp
 		fsm->PostEventFIFO(e);
 	}
 };
-struct CrossTermCallTask : public ITaskSp
-{
-	CHeartBeatFSM* fsm;
-	SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx;
-	CrossTermCallTask(CHeartBeatFSM* f) : fsm(f) {}
-
-	void Process()
-	{
-		FSMEvent *e = new FSMEvent(USER_EVT_CROSS_TERM_CALL_FINISHED);
-		e->param1 = fsm->CrossTermCall(ctx);
-		fsm->PostEventFIFO(e);
-	}
-}; 
-struct ILCallToRVCTask : public ITaskSp
-{
-	CHeartBeatFSM* fsm;
-	SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx;
-	ILCallToRVCTask(CHeartBeatFSM* f) : fsm(f) {}
 
-	void Process()
-	{
-		fsm->ILCallToRVC(ctx);
-	}
-};
-struct CallResultToILTask : public ITaskSp
-{
-	CHeartBeatFSM* fsm;
-	SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx;
-	CallResultToILTask(CHeartBeatFSM* f) : fsm(f) {}
-
-	void Process()
-	{
-		fsm->CallResultToIL(ctx);
-	}
-};
-struct LocalProcessCrossCallTask : public ITaskSp
-{
-	CHeartBeatFSM* fsm;
-	CrossCallReq *xreqInfo;
-	int xnBufSize;
-	SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx;
-	LocalProcessCrossCallTask(CHeartBeatFSM* f, CrossCallReq *reqInfo, const int nBufSize) : fsm(f),xnBufSize(nBufSize) 
-	{
-		BYTE *pBuf = new BYTE[nBufSize + 1];
-		ZeroMemory(pBuf, nBufSize + 1);
-		memcpy(pBuf, reqInfo, nBufSize);
-		xreqInfo = (CrossCallReq*)pBuf;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("id:%x",xreqInfo->nEntityID);
-	}
-	~LocalProcessCrossCallTask()
-	{
-		if (xreqInfo) {
-			delete[] (BYTE*)xreqInfo;
-		}
-	}
-
-	void Process()
-	{
-		FSMEvent *e = new FSMEvent(USER_EVT_LOCAL_CROSS_TERM_CALL_FINISHED);
-		e->param1 = fsm->LocalProcessCrossCall(xreqInfo,xnBufSize);
-		fsm->PostEventFIFO(e);
-	}
-};
 
 struct ProcessPreOnlineTask : public ITaskSp
 {
@@ -609,13 +490,11 @@ public:
 
 	void SendHandShake();
 	//type:0,send preonline; 1,result of preonline
+	//errCSCode:CardStore returned UserErrorCode
 	void 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);
-	void SendCrossCallToService(HeartBeatService_CrossTermCall_Req &req, HeartBeatService_CrossTermCall_Ans &ans);
-	void SendILCallToService(CSimpleStringA csContent,int err,bool bFromIL, CSimpleStringA fromDevNo, CSimpleStringA toDevNo);
+		, const char *data, const int dataSize,int findCard,int cardPos, unsigned long errCSCode=0);
 	void PkgRcvProcHandAndInstruc(const CSmartPointer<IPackage> &pRecvPkg);
 	void PkgRcvProcCardActive(const CSmartPointer<IPackage> &pRecvPkg);
-	void PkgRcvProcCrossCall(const CSmartPointer<IPackage> &pRecvPkg);
 protected:
 	virtual void OnDisconnect() 
 	{

+ 1 - 1
Module/mod_heartbeat/HeartBeat_UserErrorCode.h

@@ -10,6 +10,6 @@
 #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,返回失败
-
+#define HeartBeat_UserErrorCode_CardIssuer_In_Fault_State								(HeartBeat_UserErrorCode_Start + 7)	//卡库卡机状态异常
 
 #endif

+ 2 - 17
Module/mod_heartbeat/mod_heartbeat.cpp

@@ -13,21 +13,6 @@ void HeartBeatServerSession::Handle_CardActive(SpReqAnsContext<HeartBeatService_
 	LOG_FUNCTION();
 	m_pEntity->CardActive(ctx);
 }
-void HeartBeatServerSession::Handle_CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx)
-{
-	LOG_FUNCTION();
-	m_pEntity->CrossTermCall(ctx);
-}
-void HeartBeatServerSession::Handle_CallFromILToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx)
-{
-	LOG_FUNCTION();
-	m_pEntity->CallFromILToRVC(ctx);
-}
-void HeartBeatServerSession::Handle_CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx)
-{
-	LOG_FUNCTION();
-	m_pEntity->CallResultToIL(ctx);
-}
 ErrorCodeEnum CHeartBeatEntity::GetEntityErrorList(int &warmLevel,CSimpleStringA &strList)
 {
 	if (m_pSelfCheckerClient == NULL)
@@ -36,9 +21,10 @@ ErrorCodeEnum CHeartBeatEntity::GetEntityErrorList(int &warmLevel,CSimpleStringA
 		if (m_pSelfCheckerClient == NULL)
 		{
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("create(new) client failed.");
+			m_pSelfCheckerClient->SafeDelete();
+			m_pSelfCheckerClient = NULL;
 			return Error_Resource;
 		}
-		Dbg("creat selfchecher client suc.");
 	}
 	ErrorCodeEnum eErr = Error_Unexpect;
 	CSmartPointer<IAsynWaitSp> spWait;
@@ -56,7 +42,6 @@ ErrorCodeEnum CHeartBeatEntity::GetEntityErrorList(int &warmLevel,CSimpleStringA
 			m_pSelfCheckerClient = NULL;
 			return Error_Unexpect;
 		}
-		Dbg("connect to selfchecker suc.");
 		m_bConnetedSS = true;
 	}
 	//SpReqAnsContext<SelfCheckerService_GetEntityErrorList_Req, SelfCheckerService_GetEntityErrorList_Ans>::Pointer ctx;

+ 1 - 21
Module/mod_heartbeat/mod_heartbeat.h

@@ -18,9 +18,6 @@ public:
 	virtual ~HeartBeatServerSession(){}
 	void Handle_Instruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx);
 	void Handle_CardActive(SpReqAnsContext<HeartBeatService_CardActive_Req, HeartBeatService_CardActive_Ans>::Pointer ctx);
-	void Handle_CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx);
-	virtual void Handle_CallFromILToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx);
-	virtual void Handle_CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx);
 private:
 	CHeartBeatEntity* m_pEntity;
 };
@@ -71,24 +68,7 @@ public:
 		pEvt->ctx = ctx;
 		m_fsm.PostEventFIFO(pEvt);
 	}
-	void CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx)
-	{
-		CrossTermCallEvent *pEvt = new CrossTermCallEvent();
-		pEvt->ctx = ctx;
-		m_fsm.PostEventFIFO(pEvt);
-	}
-	void CallFromILToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx)
-	{
-		ILCallToRVCEvent *pEvt = new ILCallToRVCEvent();
-		pEvt->ctx = ctx;
-		m_fsm.PostEventFIFO(pEvt);
-	}
-	void CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx)
-	{
-		CallResultToILEvent *pEvt = new CallResultToILEvent();
-		pEvt->ctx = ctx;
-		m_fsm.PostEventFIFO(pEvt);
-	}
+
 	ErrorCodeEnum GetEntityErrorList(int &warmLevel,CSimpleStringA &strList);
 	virtual void OnSysVarEvent(const char *pszKey,
 		const char *pszValue, const char *pszOldValue, const char *pszEntityName);