Kaynağa Gözat

Z991239-4229 #comment feat: 同步s2_entry的功能函数

陈纪林80310970 2 yıl önce
ebeveyn
işleme
c06f6603aa

+ 41 - 7
Module/mod_accessauth/AccessAuthFSM.cpp

@@ -21,7 +21,7 @@
 #endif
 
 CAccessAuthFSM::CAccessAuthFSM()
-	:m_pConnection(NULL),m_bAccessACS(false)
+	:m_pConnection(NULL),m_bAccessACS(false), m_fNetworkChecking(false)
 {
 	m_nAccessFailedCount = 0;
 }
@@ -1136,6 +1136,32 @@ struct TerminalExitTask :public ITaskSp {
 #endif //WITH_CPPRESTSDK
 	}
 };
+
+struct NetworkCheckTask :public ITaskSp
+{
+    CAccessAuthFSM* m_fsm;
+    NetworkCheckTask(CAccessAuthFSM* fsm) :m_fsm(fsm) {
+        m_fsm->SetNetworkCheckingState();
+    }
+    ~NetworkCheckTask() {
+        m_fsm->SetNetworkCheckingState(false);
+    }
+
+    void Process()
+    {
+       // CSimpleStringA strMsg(true);
+        FSMEvent* pEvt = new FSMEvent(CAccessAuthFSM::Event_NetworkIllegal);
+        pEvt->param1 = pEvt->param2 = 0;
+        if (!m_fsm->DetectNetworkLegality()) {
+            auto pAccessAuth = dynamic_cast<CAccessAuthEntity*>(m_fsm->GetEntityBase());
+            pAccessAuth->SetAuthErrMsg("终端上网方式不符合规范要求");
+            pEvt->param1 = 1;
+        }
+        m_fsm->PostEventFIFO(pEvt);
+    }
+
+};
+
 void CAccessAuthFSM::doWarnMsg(int errReason, std::string errMsg, bool bNeedEvent, string varMsg) {
 	auto reasonStr = CSimpleString::Format("0x%X", errReason);
 	const std::string errMsgStr = SP::Utility::GBK2UTF8(errMsg);
@@ -1252,16 +1278,24 @@ void CAccessAuthFSM::s2_on_entry()
 	//}
 	//PostEventFIFO(new FSMEvent(Event_ConnectionOK));
 
+
+    LOG_FUNCTION();
+
+    m_finishAccess = 0;
+    SetEntryPermitSysVar("C");
+
+    CSmartPointer<NetworkCheckTask> networkCheck = new NetworkCheckTask(this);
+    GetEntityBase()->GetFunction()->PostThreadPoolTask(networkCheck.GetRawPointer());
 }
 
 void CAccessAuthFSM::s2_on_exit()
 {
-	// 关闭连接
-	auto pEntity = (CAccessAuthEntity*)m_pEntity;
-	pEntity->ReleaseKMC();
-	SecureClientRelease();
-	CancelTimer(1);
-	GetEntityBase()->GetFunction()->ShowStartupInfo("");
+	//// 关闭连接
+	//auto pEntity = (CAccessAuthEntity*)m_pEntity;
+	//pEntity->ReleaseKMC();
+	//SecureClientRelease();
+	//CancelTimer(1);
+	//GetEntityBase()->GetFunction()->ShowStartupInfo("");
 }
 
 // 会收到Event_UpdateWKResult和Event_ReqTokenResult和EVT_TIMER

+ 10 - 4
Module/mod_accessauth/AccessAuthFSM.h

@@ -617,6 +617,14 @@ public:
 	CSimpleStringA GetEntryPermitSysVar();
 	ErrorCodeEnum SetEntryPermitSysVar(const CSimpleStringA& newVal);
 
+	void SetNetworkCheckingState(bool busing = true)
+	{
+		m_fNetworkChecking = busing;
+	}
+
+	/*True: Legal; False: illegal*/
+	BOOL DetectNetworkLegality();
+
 private:
 	
 	ErrorCodeEnum SetSysVar(const CSimpleStringA &newVal);
@@ -624,10 +632,6 @@ private:
 	ErrorCodeEnum SecureClientRelease();
 
 	ErrorCodeEnum LoadCenterConfig();
-	
-
-	/*True: Legal; False: illegal*/
-	BOOL DetectNetworkLegality();
 
 	int m_nExitReason;
 	int m_nExitWay;
@@ -643,6 +647,8 @@ private:
 	int m_nCheckMD5;
 	//oilyang@20210813 实际上上次关门页改造应该把这个去掉,已经有了(不)重试(不)重启的模式组合
 	int m_nAccessFailedCount;
+
+	bool m_fNetworkChecking;
 };
 class MyMutex {
 public: