#include "StdAfx.h" #include "akAOISharedSystemTCP.h" #include #define SHAREDMEMNAME "DIT.AOISYSTEM.SHAREDMEM" #define SYNCTYPE 0 CakAOISharedSystemTCP::CakAOISharedSystemTCP(void) { m_pTCPServer = NULL; m_pTCPSocket = NULL; } CakAOISharedSystemTCP::~CakAOISharedSystemTCP(void) { if(m_pTCPServer) { m_pTCPServer->SetRecvMessageCallback(NULL, NULL); m_pTCPServer->CloseServer(); delete m_pTCPServer; } if(m_pTCPSocket) { m_pTCPSocket->SetRecvMessageCallback(NULL, NULL); m_pTCPSocket->DisConnect(); delete m_pTCPSocket; } if(m_pIPCAOISystemPre) delete m_pIPCAOISystemPre; } bool CakAOISharedSystemTCP::Create( CWnd* pParent, emSystemType SystemType ) { if(m_pIPCAOISystem) return false; m_SystemType = SystemType; BOOL bCreateSharedMem = FALSE;//°øÀ¯¸Þ¸ð¸® »ý¼º [±èÅÂÇö 2018/9/10] { BOOL bCreateMem = TRUE; m_hMapIPCAOISystem = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE , 0, sizeof(_IPCAOISystem), SHAREDMEMNAME); if (::GetLastError() == ERROR_ALREADY_EXISTS) { m_hMapIPCAOISystem = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME); bCreateMem = FALSE; } if (m_hMapIPCAOISystem) { m_pIPCAOISystem = (_IPCAOISystem*)::MapViewOfFile(m_hMapIPCAOISystem, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_IPCAOISystem)); if (m_pIPCAOISystem) { bCreateSharedMem = TRUE; } } //0À¸·Î ÃʱâÈ­ if(bCreateMem && m_pIPCAOISystem) ZeroMemory(m_pIPCAOISystem,sizeof(_IPCAOISystem)); } if(bCreateSharedMem == FALSE) return false; m_pParent = pParent; m_pIPCAOISystemPre = new _IPCAOISystem; memcpy(m_pIPCAOISystemPre, m_pIPCAOISystem, sizeof(_IPCAOISystem)); if(m_SystemType == ST_AOI) { if(m_pTCPSocket == NULL) { m_pTCPServer = new CakTCPServer; } else { m_pTCPServer->SetRecvMessageCallback(NULL, NULL); m_pTCPServer->CloseServer(); } m_pTCPServer->CreateServer(10123); m_pTCPServer->SetRecvMessageCallback(CallbackRecvMsgTCP, this); } else if(m_SystemType == ST_Review) { if(m_pTCPSocket == NULL) { m_pTCPSocket = new CakTCPSocket; } else { m_pTCPSocket->SetRecvMessageCallback(NULL, NULL); m_pTCPSocket->DisConnect(); } m_pTCPSocket->ConnectContinue("126.100.100.1", 10123); m_pTCPSocket->SetRecvMessageCallback(CallbackRecvMsgTCP, this); } _beginthread(threadSignal, NULL, this); return true; } void CakAOISharedSystemTCP::processSignal() { char m_nSignalPreAOI[INA_SIGNALNUM]={}; char m_nSignalCurAOI[INA_SIGNALNUM]={}; char m_nSignalPreReview[INA_SIGNALNUM]={}; char m_nSignalCurReview[INA_SIGNALNUM]={}; DWORD dwTickCount =0; while(m_nThreadSignalFlag == 1) { dwTickCount = GetTickCount(); m_mxSignalProcess.Lock(); memcpy(m_nSignalCurAOI, getAOIProtocol()->m_nSignal, sizeof(char)*INA_SIGNALNUM); memcpy(m_nSignalCurReview, getReviewProtocol()->m_nSignal, sizeof(char)*INA_SIGNALNUM); m_mxSignalProcess.Unlock(); //Signal °¨Áö ºÎºÐ [±èÅÂÇö 2018/9/10] { for(int i=0; i=0; i--) { if(m_vecSignalTimeOff[i].nTimeBitOff < dwTickCount) { *m_vecSignalTimeOff[i].pSignal = 0; m_vecSignalTimeOff.erase(m_vecSignalTimeOff.begin()+i); } else if(*m_vecSignalTimeOff[i].pSignal == 0) { m_vecSignalTimeOff.erase(m_vecSignalTimeOff.begin()+i); } } LeaveCriticalSection(&m_csSignalProcess); } memcpy(m_nSignalPreAOI, m_nSignalCurAOI, sizeof(char)*INA_SIGNALNUM); memcpy(m_nSignalPreReview, m_nSignalCurReview, sizeof(char)*INA_SIGNALNUM); if(SYNCTYPE == 0) { if(m_SystemType == ST_AOI) m_pTCPServer->Send((char*)getAOIProtocol(), sizeof(_ProtocolAOI)); else if(m_SystemType == ST_Review) m_pTCPSocket->Send((char*)getReviewProtocol(), sizeof(_ProtocolReview)); } else if(SYNCTYPE == 1) { m_mxSignalProcess.Lock(); { int nSizeShared = sizeof(_IPCAOISystem); BYTE* pCur, *pPre; pCur = (BYTE*)m_pIPCAOISystem; pPre = (BYTE*)m_pIPCAOISystemPre; m_vecSyncDataBuffer.clear(); m_vecSyncDataBuffer.push_back(0); BYTE cData; for(int i=0; iSend((char*)&m_vecSyncDataBuffer[0], sizeof(int)*m_vecSyncDataBuffer.size()); if(m_SystemType == ST_Review)m_pTCPSocket->Send((char*)&m_vecSyncDataBuffer[0], sizeof(int)*m_vecSyncDataBuffer.size()); } } m_mxSignalProcess.Unlock(); } Sleep(50); } } void CakAOISharedSystemTCP::CallbackRecvMsgTCP( char* pMsg, int nMsglen, void* data ) { ((CakAOISharedSystemTCP*)data)->RecvMsgTCP(pMsg, nMsglen, data); } void CakAOISharedSystemTCP::RecvMsgTCP( char* pMsg, int nMsglen, void* data ) { if(SYNCTYPE == 0) { if(m_SystemType == ST_AOI) memcpy((char*)getReviewProtocol(), pMsg, sizeof(_ProtocolReview)); else if(m_SystemType == ST_Review) memcpy((char*)getAOIProtocol(), pMsg, sizeof(_ProtocolAOI)); } else if(SYNCTYPE == 1) { m_mxSignalProcess.Lock(); { BYTE* pCur, *pPre; pCur = (BYTE*)m_pIPCAOISystem; pPre = (BYTE*)m_pIPCAOISystemPre; int* pRecvSrc = (int*)pMsg; int nSize = pRecvSrc[0]; int* pRecvData = &pRecvSrc[1]; BYTE cData; for(int i=0; i