SDC C-Project CF Review 프로그램
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;
}