From e42e8364112e97d89eeaecd13f043dff42179949 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 27 五月 2025 17:19:02 +0800
Subject: [PATCH] 1.enum修改为enum class, 理顺CLoadPort各成员变量在调度中的判定作用;

---
 SourceCode/Bond/Servo/Context.cpp |  145 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/Context.cpp b/SourceCode/Bond/Servo/Context.cpp
index 7fb9d06..d71cf34 100644
--- a/SourceCode/Bond/Servo/Context.cpp
+++ b/SourceCode/Bond/Servo/Context.cpp
@@ -4,9 +4,154 @@
 
 CContext::CContext()
 {
+	m_onReleaseCallback = nullptr;
+	m_nRef = 0;
+	m_nRetCode = 0;
+	m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
+	InitializeCriticalSection(&m_criticalSection);
 }
 
 
 CContext::~CContext()
 {
+	if (m_hEvent != NULL) {
+		CloseHandle(m_hEvent);
+		m_hEvent = NULL;
+	}
+	DeleteCriticalSection(&m_criticalSection);
 }
+
+void CContext::setOnRelease(ONRELEASECALLBACK fOnRelease)
+{
+	m_onReleaseCallback = fOnRelease;
+}
+
+int CContext::addRef()
+{
+	Lock();
+	m_nRef++;
+	Unlock();
+
+	return m_nRef;
+}
+
+int CContext::release()
+{
+	Lock();
+	if (m_nRef > 0) {
+		m_nRef--;
+		BOOL bRefCount0 = m_nRef == 0;
+		Unlock();
+
+		if (bRefCount0 && m_onReleaseCallback != nullptr) {
+			m_onReleaseCallback(this);
+		}
+	}
+	else {
+		Unlock();
+	}
+
+	return m_nRef;
+}
+
+void CContext::setRetCode(int code)
+{
+	m_nRetCode = code;
+}
+
+int CContext::getRetCode()
+{
+	return m_nRetCode;
+}
+
+void CContext::setRetMsg(const char* pszMsg)
+{
+	m_strRetMsg = pszMsg;
+}
+
+std::string& CContext::getRetMsg()
+{
+	return m_strRetMsg;
+}
+
+HANDLE CContext::getEventHandle()
+{
+	return m_hEvent;
+}
+
+void CContext::setEvent()
+{
+	if (m_hEvent != NULL) {
+		SetEvent(m_hEvent);
+	}
+}
+
+void CContext::resetEvent()
+{
+	if (m_hEvent != NULL) {
+		ResetEvent(m_hEvent);
+	}
+}
+
+void CContext::ReadString(CArchive& ar, std::string& string)
+{
+	CString strTemp;
+	ar >> strTemp;
+	string = (LPTSTR)(LPCTSTR)strTemp;
+}
+
+void CContext::WriteString(CArchive& ar, std::string& string)
+{
+	CString strTemp = string.c_str();
+	ar << strTemp;
+}
+
+void CContext::createDir(CString strDir)
+{
+	int lastIndex = 0;
+	int index = strDir.Find(_T("\\"), lastIndex);
+	while (index > 0) {
+		CString strTempDir = strDir.Left(index);
+		CreateDirectory(strTempDir, NULL);
+
+		lastIndex = index + 1;
+		index = strDir.Find(_T("\\"), lastIndex);
+	}
+	CreateDirectory(strDir, NULL);
+}
+
+BOOL CContext::IsBoxId(CString& strId)
+{
+	//'W20'开头,倒数第五位为'Z'的字符串
+	if (strId.GetLength() < 8) {
+		return FALSE;
+	}
+
+	if (strId.Left(3).Compare(_T("W20")) != 0) {
+		return FALSE;
+	}
+
+	if (strId.Right(5).GetAt(0) != (char)'Z') {
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CContext::IsLotId(CString& strId)
+{
+	//'N20'开头,倒数第五位为'Z'的字符串
+	if (strId.GetLength() < 8) {
+		return FALSE;
+	}
+
+	if (strId.Left(3).Compare(_T("N20")) != 0) {
+		return FALSE;
+	}
+
+	if (strId.Right(5).GetAt(0) != (char)'Z') {
+		return FALSE;
+	}
+
+	return TRUE;
+}
\ No newline at end of file

--
Gitblit v1.9.3