#include "StdAfx.h" #include "CameraControl_NetClient.h" #include "CameraControl_Network.h" #include "IOCPNetwork/NetClient.h" #include "CHCameraControls/CameraBuffer.h" #define MAX_FILE_FIND_TIME 10000 using namespace CHCameraControls_Network; CCameraControl_NetClient::CCameraControl_NetClient(int nIndex, ICameraControl_NetClient2Parent* pICCNC2P) : CCameraControl(nIndex), m_pICCNC2P(pICCNC2P) { m_pMessageProcessor = new CMessageProcessor(static_cast(this)); m_pNetClient = new CNetClient(); m_nFrameProcessCount = 0; InitializeCriticalSection(&m_csFrameCaptured); } CCameraControl_NetClient::~CCameraControl_NetClient(void) { if (m_pNetClient) { delete m_pNetClient; m_pNetClient = NULL; } if (m_pMessageProcessor) { delete m_pMessageProcessor; m_pMessageProcessor = NULL; } DeleteCriticalSection(&m_csFrameCaptured); } int CCameraControl_NetClient::Connect( const CCameraControlInfo& controlInfo ) { m_ControlInfo = controlInfo; CString strIP = controlInfo.GetConnectionPort(); if (m_bConnected) return 0; m_nTotalIndex = controlInfo.GetIndex(); m_nWidth = controlInfo.GetFrameWidth(); m_nHeight = controlInfo.GetFrameHeight(); m_nChannels = controlInfo.GetFrameChannels(); m_nFrameCount = controlInfo.GetFrameCount(); m_strCameraName = controlInfo.GetName(); if (m_nFrameCount < 1) return -1; AllocateFrameBuffer(m_nWidth, m_nHeight, m_nChannels, m_nFrameCount, m_strCameraName); m_bConnected = TRUE; return InitNetwork(strIP); } BOOL CCameraControl_NetClient::InitNetwork( const CString& strIPAddress ) { if (m_pNetClient==NULL) return 0; CString strModuleIndex = strIPAddress.Right(1); int nModuleIndex = _ttoi(strModuleIndex); m_pNetClient->SetIN2P(static_cast(this)); m_pNetClient->StartUp(); m_pNetClient->InitNetwork(ClientMode, 4, NETPORT_NETWORK_CAMERA, strIPAddress); //m_pNetClient->InitNetwork(ClientMode, 4, NETPORT_NETWORK_CAMERA+nModuleIndex, _T("126.100.100.100")); // lmk 170816 1pc 4module m_pNetClient->SetServerInfo(Socket_CameraServer, NETCODE_NETWORK_CAMERA, NETVER_NETWORK_CAMERA,1004); BOOL bResult = m_pNetClient->Connect(TRUE); if (m_pICCNC2P) { if (bResult) { m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, _T("[CameraControl_NetClient] [%d]Client Init Connect Cmd Success!"), m_nIndex); } else { m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, _T("[CameraControl_NetClient] [%d]Client Init Connect Cmd Fail!"), m_nIndex); } } return bResult; } void CCameraControl_NetClient::DeinitNetwork() { if (m_pNetClient==NULL) return; m_pNetClient->DeinitNetwork(); m_pNetClient->CleanUp(); } int CCameraControl_NetClient::Grab() { if (m_pNetClient==NULL) return 0; return m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_GRAB, NET_RESULT_SUCCESS, m_nIndex); } int CCameraControl_NetClient::Snap() { if (m_pNetClient==NULL) return 0; CNetPacket *pPacket = m_pNetClient->GetPacket(); if (pPacket==NULL) return 0; pPacket->SetInt(0); // count(0 is default) pPacket->SetInt(-1); // wait(-1 is default) return m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_SNAP, NET_RESULT_SUCCESS, m_nIndex, pPacket); } int CCameraControl_NetClient::Snap( int nCount ) { if (m_pNetClient==NULL) return 0; CNetPacket *pPacket = m_pNetClient->GetPacket(); if (pPacket==NULL) return 0; pPacket->SetInt(nCount); // count(0 is default) pPacket->SetInt(-1); // wait(-1 is default) return m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_SNAP, NET_RESULT_SUCCESS, m_nIndex, pPacket); } int CCameraControl_NetClient::Snap( int nCount, UINT nWaitTime ) { if (m_pNetClient==NULL) return 0; CNetPacket *pPacket = m_pNetClient->GetPacket(); if (pPacket==NULL) return 0; pPacket->SetInt(nCount); // count(0 is default) pPacket->SetInt((int)nWaitTime); // wait(-1 is default) return m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_SNAP, NET_RESULT_SUCCESS, m_nIndex, pPacket); } int CCameraControl_NetClient::Freeze() { if (m_pNetClient==NULL) return 0; return m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_FREEZE, NET_RESULT_SUCCESS, m_nIndex); } int CCameraControl_NetClient::Abort() { if (m_pNetClient==NULL) return 0; CNetPacket *pPacket = m_pNetClient->GetPacket(); if (pPacket==NULL) return 0; return m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_ABORT, NET_RESULT_SUCCESS, m_nIndex); } int CCameraControl_NetClient::Disconnect() { DeinitNetwork(); return 0; } void CCameraControl_NetClient::SetTriggerMode( int nMode, int nCount/*=1*/ ) { m_nTriggerMode = nMode; CNetPacket *pPacket = m_pNetClient->GetPacket(); if (pPacket==NULL) return; pPacket->SetInt(nMode); m_pNetClient->SendToServer(CC2CS_COMMAND_CAMERA_TRIG_MODE, NET_RESULT_SUCCESS, m_nIndex, pPacket); } BOOL CHCameraControls_Network::CCameraControl_NetClient::SetTriggerProcess( int nPosUmX, int nPosUmY ) { return SendSoftwareTrigger(nPosUmX, nPosUmY); } BOOL CCameraControl_NetClient::SendSoftwareTrigger( int nPosUmX, int nPosUmY ) { CNetPacket *pPacket = m_pNetClient->GetPacket(); if (pPacket==NULL) return FALSE; pPacket->SetInt(m_nIndex); pPacket->SetInt(nPosUmX); pPacket->SetInt(nPosUmY); return m_pNetClient->SendToServer(CC2CS_COMMAND_SOFTWARE_TRIGGER, NET_RESULT_SUCCESS, m_nIndex, pPacket); } void CCameraControl_NetClient::IOCPNet2P_Connected( int Type ) { BOOL bSend = FALSE; if (m_pNetClient) { bSend = m_pNetClient->SendToServer(CC2CS_CAMERA_INDEX, NET_RESULT_SUCCESS, m_nIndex); } CString strLog = _T(""); if (m_pICCNC2P) { strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client is Connected!"), m_nTotalIndex, m_nIndex); m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); if (bSend) { strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [CAMERA_INDEX] Message Send Success!"), m_nTotalIndex, m_nIndex); } else { strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [CAMERA_INDEX] Message Send Fail!"), m_nTotalIndex, m_nIndex); } m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); } } void CCameraControl_NetClient::IOCPNet2P_Disconnected( int Type, int nModuleNo /*= -1*/ ) { if (m_pICCNC2P) { CString strLog = _T(""); strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client is Disconnected!"), m_nTotalIndex, m_nIndex); m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); m_pICCNC2P->ICCNC2P_CameraConnected(m_nTotalIndex, FALSE); } } BOOL CCameraControl_NetClient::IOCPNet2P_Received( int Type, CNetPacket* pPacket, int nContext /*= -1*/ ) { if (m_pMessageProcessor==NULL) return FALSE; if (pPacket==NULL) return FALSE; switch(Type) { case Socket_CameraServer: { CNetPacket* pCopyPacket = new CNetPacket(pPacket); // copy m_pMessageProcessor->AddMessageProcessData(pPacket->GetPacketCode(),(WPARAM)pCopyPacket,(LPARAM)nContext); } break; default: return FALSE; break; } return TRUE; } void CCameraControl_NetClient::IMP2P_ProcessMessageData( CMessageProcessData* pData ) { if (pData==NULL) return; CNetPacket *pPacket = (CNetPacket*)pData->m_wParam; int nContext = (int)pData->m_lParam; CString strLog = _T(""); switch(pData->m_unMsg) { case CS2CC_ACK_CAMERA_INDEX: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_CAMERA_INDEX] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCameraIndex(pPacket->GetModuleNo(), nContext); break; case CS2CC_ACK_COMMAND_CAMERA_GRAB: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_COMMAND_CAMERA_GRAB] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCommandCameraGrab(pPacket->GetModuleNo()); break; case CS2CC_ACK_COMMAND_CAMERA_SNAP: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_COMMAND_CAMERA_SNAP] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCommandCameraSnap(pPacket->GetModuleNo()); break; case CS2CC_ACK_COMMAND_CAMERA_FREEZE: delete pPacket; return; strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_COMMAND_CAMERA_FREEZE] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCommandCameraFreeze(pPacket->GetModuleNo()); break; case CS2CC_ACK_COMMAND_CAMERA_ABORT: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_COMMAND_CAMERA_ABORT] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCommandCameraAbort(pPacket->GetModuleNo()); break; case CC2CS_ACK_COMMAND_CAMERA_TRIG_MODE: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_COMMAND_CAMERA_TRIG_MODE] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCommandCameraTriggerMode(pPacket->GetModuleNo()); m_nFrameProcessCount = m_nFrameReceiveCount = 0; break; case CC2CS_ACK_COMMAND_SOFTWARE_TRIGGER: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [ACK_COMMAND_SOFTWARE_TRIGGER] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_AckCommandSoftwareTrigger(pPacket->GetModuleNo()); break; case CS2CC_STATUS_CAMERA: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [STATUS_CAMERA] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo()); Process_StatusCamera(pPacket->GetModuleNo(), pPacket); break; case CS2CC_COMMAND_CAMERA_CAPTURED: strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client [%03d][COMMAND_CAMERA_CAPTURED] Message Received!"), m_nTotalIndex, pPacket->GetModuleNo(), pPacket->GetInt(1)); Process_CommandCameraCaptured(pPacket->GetModuleNo(), pPacket); break; } if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog, pPacket->GetModuleNo()); } delete pPacket; } void CCameraControl_NetClient::Process_AckCameraIndex(int nIndex, int nContext) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_CameraConnected(m_nTotalIndex, TRUE); } } void CCameraControl_NetClient::Process_AckCommandCameraGrab(int nIndex) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_AckCameraGrab(nIndex); } } void CCameraControl_NetClient::Process_AckCommandCameraSnap(int nIndex) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_AckCameraSnap(nIndex, 0, 0); } } void CCameraControl_NetClient::Process_AckCommandCameraFreeze(int nIndex) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_AckCameraFreeze(nIndex); } } void CCameraControl_NetClient::Process_AckCommandCameraAbort(int nIndex) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_AckCameraAbort(nIndex); } } void CCameraControl_NetClient::Process_AckCommandCameraTriggerMode( int nIndex ) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_AckCameraTriggerMode(nIndex); } } void CCameraControl_NetClient::Process_AckCommandSoftwareTrigger( int nIndex ) { if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_AckSoftwareTrigger(nIndex); } //Process_CommandCameraCaptured(m_nIndex, 0, _T("D:\\ResultData\\1.bmp")); // lmk test } void CCameraControl_NetClient::Process_StatusCamera( int nIndex, CNetPacket *pPacket ) { if (m_pNetClient==NULL || pPacket==NULL) return; m_pNetClient->SendToServer(CC2CS_ACK_STATUS_CAMERA, NET_RESULT_SUCCESS, m_nIndex); int nResult = pPacket->GetInt(0); // set grab status // enum CameraControlType { CameraControl_Stop=0, CameraControl_Live, CameraControl_Start }; if (nResult==0) m_bGrabbing = FALSE; else m_bGrabbing = TRUE; // send camera status 2 parent if (m_pICCNC2P) { m_pICCNC2P->ICCNC2P_StatusCamera(nIndex, nResult); } } void CHCameraControls_Network::CCameraControl_NetClient::Process_CommandCameraCaptured( int nIndex, CNetPacket *pPacket ) { if (m_pICCNC2P==NULL || m_pNetClient==NULL || pPacket==NULL) return; m_pNetClient->SendToServer(CC2CS_ACK_COMMAND_CAMERA_CAPTURED, NET_RESULT_SUCCESS, m_nIndex); m_nFrameReceiveCount++; int nModuleIndex = pPacket->GetInt(0); int nPointNum = pPacket->GetInt(1); CString strFilePath = pPacket->GetString(0); CString strLog = _T(""); if (strFilePath.IsEmpty()) { strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client Frame Image Path Error! [%s]"), m_nTotalIndex, m_nIndex, strFilePath); m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); } // make path D:\ResultData -> \\126.100.100.1\d\ResultData CString strServerLocalPath=_T(""), strFileName=_T(""); int nFindIdx = strFilePath.Find(_T("\\d\\")); strServerLocalPath = strFilePath.Mid(nFindIdx, strFilePath.GetLength()); strServerLocalPath.Replace(_T("\\d\\"), _T("d:\\")); CFileFind fileFind; DWORD dwTick = GetTickCount(); while (1) { if (fileFind.FindFile(strServerLocalPath)) break; if (GetTickCount()-dwTick>=MAX_FILE_FIND_TIME) { strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client Frame Image Find Fail! [%s]"), m_nTotalIndex, m_nIndex, strServerLocalPath); m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); break; } Sleep(50); } FrameCaptured(strServerLocalPath); } void CHCameraControls_Network::CCameraControl_NetClient::FrameCaptured( const CString& strFilePath ) { if (!m_pCameraFrameBuffer) return; CString strLog = _T(""); if (m_curFrameImage.LoadImage(strFilePath)==FALSE) { if (m_pICCNC2P) { strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client Frame Image Load Fail! [%s]"), m_nTotalIndex, m_nIndex, strFilePath); m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); } return; } int nChannels = m_curFrameImage.GetChannels(); //EnterCriticalSection(&m_csFrameCaptured); // set frame index m_nFrameIndex = (++m_nFrameIndex) % m_nFrameCount; int nScanIndex = m_nScanIndex % MAX_BUFFER_SCAN_COUNT; // get buffer ptr CCameraBufferInfo *pFrameBuffInfo = m_pCameraFrameBuffer->GetBufferInfo(nScanIndex); BYTE *pFrameBuffData = m_pCameraFrameBuffer->GetBufferData(nScanIndex, m_nFrameIndex); if (pFrameBuffData && pFrameBuffInfo) { memcpy(pFrameBuffData, m_curFrameImage.GetImageBuffer(), m_curFrameImage.GetImageSize()); // set image info pFrameBuffInfo->sCameraIndex = m_nIndex; // mch 20160823 pFrameBuffInfo->sScanIndex = m_nScanIndex; pFrameBuffInfo->nImageCount = m_nFrameIndex + 1; m_pCameraFrameBuffer->UnlockMemory(nScanIndex); } //LeaveCriticalSection(&m_csFrameCaptured); if (m_pCC2P) { m_pCC2P->ICC2P_FrameCaptured(m_nIndex, m_nFrameIndex, m_nFrameCount); } m_nFrameProcessCount++; strLog.Format(_T("[CameraControl_NetClient] [%d][%d]Client Frame ReceiveCnt[%d], ProcessCnt[%d]"), m_nTotalIndex, m_nIndex, m_nFrameReceiveCount, m_nFrameProcessCount); m_pICCNC2P->ICCNC2P_DisplayMessage(m_nIndex, strLog); }