SDC C-Project CF Review 프로그램
LYW
2021-09-14 ffe71aadfdcb4a9ea2ac4d8d320983d42ef3cad5
ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
»õ ÆÄÀÏ
@@ -0,0 +1,190 @@
#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)
{
   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)
      {
         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);
   }
   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;
}