浏览代码

!fix the problem of the locking eventArr

chenliangyu 1 年之前
父节点
当前提交
997a1a3f1a
共有 2 个文件被更改,包括 64 次插入41 次删除
  1. 3 1
      Module/mod_chromium/CWebsocketServer.cpp
  2. 61 40
      Module/mod_chromium/mod_chromium.cpp

+ 3 - 1
Module/mod_chromium/CWebsocketServer.cpp

@@ -14,6 +14,7 @@
 #include <iostream>
 #include <locale>
 #include <codecvt>
+#include "../mod_guiconsole/GUIConsole_msg_g.h"
 
 
 #define DEFAULT_SERVER_PORT 9002
@@ -1219,9 +1220,10 @@ namespace Chromium {
 				do_sendJson(js, msg.getMessageType(), i->second, id);
 				unaccurate_js = js;
 			}
+			auto signatureID = msg.getSignatureID();
 			if (sendArr.size() == 0)
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket event sendArr.size() == 0");
-			else
+			else if(signatureID != eMsgSig_LogInfo && signatureID != eMsgSig_EntityStatus && signatureID != eMsgSig_PerformanceList)//fiter guiconsole msg
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket event %s send to arr:%s"
 					, unaccurate_js.c_str(), formatVectorToString(sendArr).c_str());
 

+ 61 - 40
Module/mod_chromium/mod_chromium.cpp

@@ -823,12 +823,12 @@ namespace Chromium {
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create thread:%s", __FUNCTION__);
 		while (true)
 		{
-			m_eventContorl.lock();
 			if (m_eventArr.empty())
 			{
 				boost::this_thread::sleep_for(boost::chrono::microseconds(100));
 				continue;
 			}
+			m_eventContorl.lock();
 			SYS_EVENT_PARAM curEvent = m_eventArr.front();
 			m_eventArr.pop_front();
 			m_eventContorl.unlock();
@@ -853,75 +853,96 @@ namespace Chromium {
 			{
 				if (0 == CSimpleStringA("A").Compare(curEvent.value.c_str(), true))
 				{
-					if (CModTools::get_mutable_instance().IsConfigWork())//url正常时才关闭
+					try
 					{
+						if (CModTools::get_mutable_instance().IsConfigWork())//url正常时才关闭
+						{
 #if defined(RVC_OS_LINUX)
-						auto srcPids = getUosBrowserPIDs(CModTools::get_mutable_instance().getUosBrowser());
+							auto srcPids = getUosBrowserPIDs(CModTools::get_mutable_instance().getUosBrowser());
 #endif // RVC_OS_UOS
-						
-						if (m_runAd) openAdPage();
-						openMainPage();
-						CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::breakdown);
 
-						std::this_thread::sleep_for(std::chrono::seconds(3));
-						LogWarn(Severity_Low, Error_Debug, LOG_SLV_CHROMIUM_URLOPEN, "正在启动业务界面");
+							if (m_runAd) openAdPage();
+							openMainPage();
+							CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::breakdown);
+
+							std::this_thread::sleep_for(std::chrono::seconds(3));
+							LogWarn(Severity_Low, Error_Debug, LOG_SLV_CHROMIUM_URLOPEN, "正在启动业务界面");
 
 #if defined(RVC_OS_LINUX)
-						for (auto it : srcPids)
-						{
-							CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
-							DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
-							system(cmd.GetData());
-						}
+							for (auto it : srcPids)
+							{
+								CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
+								DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
+								system(cmd.GetData());
+					}
 #else
-						CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
+							CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
 #endif
-						
-						//DbgEx("UnregistSysVarEvent TerminalStage %s", Error_Succeed == GetFunction()->UnregistSysVarEvent("TerminalStage") ? "success" : "fail");
-					}
+
+							//DbgEx("UnregistSysVarEvent TerminalStage %s", Error_Succeed == GetFunction()->UnregistSysVarEvent("TerminalStage") ? "success" : "fail");
 				}
+			}
+					catch (const std::exception& e)
+					{
+						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("TerminalStage:A run exception, %s", e.what());
+					}
+		}
 				else if (0 == CSimpleStringA("X").Compare(curEvent.value.c_str(), true))
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("TerminalStage X, do nothing.");
 				else
 				{
-					if (!m_withBrowser)
+					try
 					{
+						if (!m_withBrowser)
+						{
 #if defined(RVC_OS_LINUX)
-						auto srcPids = getUosBrowserPIDs(CModTools::get_mutable_instance().getUosBrowser());
+							auto srcPids = getUosBrowserPIDs(CModTools::get_mutable_instance().getUosBrowser());
 #endif // RVC_OS_UOS
 
 
 #if defined(RVC_OS_LINUX)
-						for (auto it : srcPids)
-						{
-							CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
-							DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
-							system(cmd.GetData());
-						}
+							for (auto it : srcPids)
+							{
+								CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
+								DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
+								system(cmd.GetData());
+							}
 #else
-						CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
+							CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
 #endif
-						
-						auto openRet = CModTools::get_mutable_instance().StartChromiumBrowser(
-							0 == CSimpleStringA("S").Compare(curEvent.value.c_str(), true) ? ERR_PAGE_REASON::warnPrompt : ERR_PAGE_REASON::breakdown,
-							std::tuple < std::string, std::string>(m_sysInfo.strTerminalID.GetData(), generateTimeStr()));
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("access failed, open err page %s, %d", Error_Succeed == openRet.first ? "success" : "fail", openRet.second);
-						CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::main);						
+
+							auto openRet = CModTools::get_mutable_instance().StartChromiumBrowser(
+								0 == CSimpleStringA("S").Compare(curEvent.value.c_str(), true) ? ERR_PAGE_REASON::warnPrompt : ERR_PAGE_REASON::breakdown,
+								std::tuple < std::string, std::string>(m_sysInfo.strTerminalID.GetData(), generateTimeStr()));
+							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("access failed, open err page %s, %d", Error_Succeed == openRet.first ? "success" : "fail", openRet.second);
+							CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::main);
+						}
+					}
+					catch (const std::exception& e)
+					{
+						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("TerminalStage:other run exception, %s", e.what());
 					}
 				}
 
 			}
 			else if (0 == CSimpleStringA("CardStoreInUse").Compare(curEvent.key.c_str(), true) && CheckIsCardStore())
 			{
-				if (0 == CSimpleStringA("Y").Compare(curEvent.value.c_str(), true))
+				try
 				{
-					auto openRet = CModTools::get_mutable_instance().StartChromiumBrowser(ERR_PAGE_REASON::CardStoreIsBusy,
-						std::tuple <std::string, std::string>(m_sysInfo.strTerminalID.GetData(), generateTimeStr()));
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("CardStoreIsBusy, open page CardStoreIsBusy %s, %d", Error_Succeed == openRet.first ? "success" : "fail", openRet.second);
+					if (0 == CSimpleStringA("Y").Compare(curEvent.value.c_str(), true))
+					{
+						auto openRet = CModTools::get_mutable_instance().StartChromiumBrowser(ERR_PAGE_REASON::CardStoreIsBusy,
+							std::tuple <std::string, std::string>(m_sysInfo.strTerminalID.GetData(), generateTimeStr()));
+						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("CardStoreIsBusy, open page CardStoreIsBusy %s, %d", Error_Succeed == openRet.first ? "success" : "fail", openRet.second);
+					}
+					else
+					{
+						CModTools::get_mutable_instance().StopChromiumBrowser_security(ERR_PAGE_REASON::CardStoreIsBusy, 2);
+					}
 				}
-				else
+				catch (const std::exception& e)
 				{
-					CModTools::get_mutable_instance().StopChromiumBrowser_security(ERR_PAGE_REASON::CardStoreIsBusy, 2);
+					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("CardStoreInUse run exception, %s", e.what());
 				}
 			}
 		}