From 12c02f064db12d6d94063bf6dd9e4eb80f4252b8 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 월, 11 10월 2021 15:30:00 +0900
Subject: [PATCH] Ongoing60 #3662 CF AOI Review 전설비 알람 발생 조치 - Review History File Mapping 해제 - Review Inner History 다운 현상 예외처리 추가 - Review End 시 Review 다운 현상 예외처리 추가

---
 ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp |  202 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 202 insertions(+), 0 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
new file mode 100644
index 0000000..223a7d1
--- /dev/null
+++ b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
@@ -0,0 +1,202 @@
+#include "StdAfx.h"
+#include "DitGlassRawServer.h"
+
+CDitGlassRawServer::CDitGlassRawServer(void)
+: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER)
+{
+	m_hMapBasicInfo = NULL;
+	m_hMapGlassData = NULL;
+
+	m_pGlassRawInfo = NULL;
+	m_pGlassRawData = NULL;
+
+	m_nLastCommandIdx = -1;
+}
+
+CDitGlassRawServer::~CDitGlassRawServer(void)
+{
+	delete m_pGlassRawData;
+	delete m_pGlassRawInfo;
+
+	if (m_hMapBasicInfo!=NULL)
+	{
+		::UnmapViewOfFile(m_hMapBasicInfo);
+		m_pGlassRawInfo = NULL;
+	}
+
+	if (m_hMapGlassData!=NULL)
+	{
+		::UnmapViewOfFile(m_hMapGlassData);
+		m_pGlassRawData = NULL;
+	}
+}
+
+
+BOOL CDitGlassRawServer::CreateServer( int nCellNum /*= 100*/, int nDefectNum /*= 2000*/ )
+{
+	if(CreateGlassRawInfo() == FALSE)
+	{
+		return FALSE;
+	}
+
+
+	if(sizeof(_grmGlassData) != m_pGlassRawInfo->m_nSizeOfGlassData
+		|| sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData
+		|| sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData
+		|| sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData
+		|| sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData
+		|| sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData)
+	{
+		return FALSE;
+	}
+
+	m_pGlassRawInfo->m_nGlassMaxDataNum = 1;
+	m_pGlassRawInfo->m_nBlockMaxDataNum = 1;
+	m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum;
+	m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum;
+	m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum;
+	m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum;
+
+	m_pGlassRawInfo->m_nGlassRawDataSize;
+	{
+		int nDataNum = 0;
+
+		m_pGlassRawInfo->m_nGlassDataPoint = nDataNum;
+		nDataNum += m_pGlassRawInfo->m_nSizeOfGlassData + m_pGlassRawInfo->m_nSizeOfGlassData%4;
+
+		m_pGlassRawInfo->m_nBlockDataPoint = nDataNum;
+		nDataNum += m_pGlassRawInfo->m_nSizeOfBlockData + m_pGlassRawInfo->m_nSizeOfBlockData%4;
+		
+		m_pGlassRawInfo->m_nCellDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfCellData + m_pGlassRawInfo->m_nSizeOfCellData%4)*nCellNum;
+		
+		m_pGlassRawInfo->m_nDefectDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfDefectData + m_pGlassRawInfo->m_nSizeOfDefectData%4)*nDefectNum;
+
+		m_pGlassRawInfo->m_nStackDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum;
+		
+		m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum;
+
+		m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum;
+	}
+	
+
+	if(CreateGlassRawData() == FALSE)
+	{
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+
+BOOL CDitGlassRawServer::CreateGlassRawInfo()
+{
+// 	if(m_hMapBasicInfo == NULL)
+// 	{
+// 		BOOL bCreateMem = TRUE;
+// 
+// 		m_hMapBasicInfo = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
+// 			, 0, sizeof(_grmDitGlassRawInfo), SHAREDMEMNAME_BASICINFO);
+// 
+// 		if (::GetLastError() == ERROR_ALREADY_EXISTS)
+// 		{
+// 			m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO);
+// 			bCreateMem = FALSE;
+// 		}
+// 
+// 		if (m_hMapBasicInfo)
+// 		{
+// 			m_pGlassRawInfo = (_grmDitGlassRawInfo*)::MapViewOfFile(m_hMapBasicInfo, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_grmDitGlassRawInfo));
+// 		}
+// 
+// 		if(m_hMapBasicInfo == NULL || m_pGlassRawInfo == NULL)
+// 		{
+// 			if (m_hMapBasicInfo!=NULL)
+// 			{
+// 				::UnmapViewOfFile(m_hMapBasicInfo);
+// 				m_pGlassRawInfo = NULL;
+// 			}
+// 			m_pGlassRawInfo = NULL;
+// 			return FALSE;
+// 		}
+
+		//0으로 초기화
+		//if(bCreateMem && m_pGlassRawInfo)
+		//_grmDitGlassRawInfo SemiServer;
+	m_pGlassRawInfo = new _grmDitGlassRawInfo;
+		if (m_pGlassRawInfo)
+		{
+			ZeroMemory(m_pGlassRawInfo,sizeof(_grmDitGlassRawInfo));
+			
+			m_pGlassRawInfo->m_nSizeOfGlassData  = sizeof(_grmGlassData) ;
+			m_pGlassRawInfo->m_nSizeOfBlockData =  sizeof(_grmBlockData);
+			m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData);
+			m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData);
+			m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData);
+			m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData);
+
+			int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4;
+		}
+		
+	//}
+
+	
+
+	return TRUE;
+}
+
+BOOL CDitGlassRawServer::CreateGlassRawData()
+{
+ 	int nGlassRawSharedSize = (int)(m_pGlassRawInfo->m_nGlassRawDataSize);
+// 
+// 	if(m_hMapGlassData == NULL)
+// 	{
+// 		BOOL bCreateMem = TRUE;
+// 
+// 		m_hMapGlassData = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
+// 			, 0, nGlassRawSharedSize, SHAREDMEMNAME_GLASSDATA);
+// 
+// 		if (::GetLastError() == ERROR_ALREADY_EXISTS)
+// 		{
+// 			m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA);
+// 			bCreateMem = FALSE;
+// 		}
+// 
+// 		if (m_hMapGlassData)
+// 		{
+// 			m_pGlassRawData = (char*)::MapViewOfFile(m_hMapGlassData, FILE_MAP_ALL_ACCESS, 0, 0, nGlassRawSharedSize);
+// 		}
+// 
+// 		if(m_hMapGlassData == NULL || m_pGlassRawData == NULL)
+// 		{
+// 			if (m_hMapGlassData != NULL)
+// 			{
+// 				::UnmapViewOfFile(m_hMapGlassData);
+// 				m_pGlassRawData = NULL;
+// 			}
+// 			m_pGlassRawData = NULL;
+// 			return FALSE;
+// 		}
+// 
+// 		//0으로 초기화
+// 		if(bCreateMem && m_pGlassRawData) ZeroMemory(m_pGlassRawData,sizeof(char)*nGlassRawSharedSize);
+// 	}
+	
+
+	 //0으로 초기화
+	m_pGlassRawData = new char[nGlassRawSharedSize];
+ 	if(m_pGlassRawData) 
+		ZeroMemory(m_pGlassRawData,sizeof(char)*nGlassRawSharedSize);
+
+	m_pGlassData  = (_grmGlassData*)&m_pGlassRawData[m_pGlassRawInfo->m_nGlassDataPoint];
+	m_pBlockData  = (_grmBlockData*)&m_pGlassRawData[m_pGlassRawInfo->m_nBlockDataPoint];
+	m_pCellData   = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint];
+	m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint];
+	m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint];
+	m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
+
+	return TRUE;
+}

--
Gitblit v1.9.3