#include "DataHandle.h" #include #include #include "../SystemInfo.h" //接收数据的回调 void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg, const std::list& its) { DataHandle* p = (DataHandle*)pthis; ReadData rd = msg; std::list lst = its; p->DataCallBackHandle(rd, lst); } void DataHandle::FuncDataCallBackProc(void* pthis,const ReadData& msg, const list& lst, ::stream::ResponseAny** response) { DataHandle* p = (DataHandle*)pthis; int index = atoi(msg.strValue.data()); if ((READTYPE)msg.dataType == LAYERDATAREQ) { int size = (int)p->m_controller->m_jobController.m_PrepareJob->GetMetaData()->GetLayersVec().size(); if (!p || index<1 || index>(int)size) return; p->m_controller->m_jobController.m_PrepareJob->GetMetaData()->GetLayerByIndex(index - 1, response); } else if ((READTYPE)msg.dataType == REGISTFUNC) { p->m_controller->m_reg->CallFunc(msg,response); } else if ((READTYPE)msg.dataType == CAMERAFUNC) { p->m_controller->m_Camera->CallFunc(msg, response); } else if ((READTYPE)msg.dataType == CONFIGFUNC) { p->m_config->CallFuncs(msg, lst, response); } else if ((READTYPE)msg.dataType == SCANERCTRLCFG) { p->m_config->ScanerCtrlCfgReq(msg, lst, response); } } DataHandle::DataHandle() : m_streamServer(nullptr) , m_config(nullptr) , m_controller(nullptr){ } DataHandle::~DataHandle() { Stop(); DELP(m_streamServer); DELP(m_controller); } void DataHandle::Init() { m_config = ConfigManager::GetInstance(); m_config->Init(); m_streamServer = new StreamServer(m_config->GetMachine()); m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc, &DataHandle::FuncDataCallBackProc); m_streamServer->Init(); m_controller = new Controller(); m_controller->Init(); } void DataHandle::Run() { if (m_streamServer) m_streamServer->Run(); if(m_controller) m_controller->StartSend(); } void DataHandle::Stop() { if (m_controller) m_controller->StopSend(); if(m_streamServer) m_streamServer->Stop(); } void DataHandle::DataCallBackHandle(const ReadData& msg, const std::list& its) { vector* scanners = nullptr; WriteData* wd = nullptr; int index = 0; switch (msg.dataType) { case AXISMOVEFUNC: if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER){ printf("振镜没有准备,无法操作\n"); return; } m_controller->m_Machine->CallAxisFunc(msg); break; case VERSIONREQ: //获取版本信息 msg.clientPtr->PushMsg(new WriteData(VERSIONRSP, { { string(""), g_SystemInfo->m_ProductVersion, iSTRING } })); break; case RESETELEC: m_controller->m_ComServer->m_PowerMeterClient->ResetElec(); break; case PURIFIERPARAMW: m_controller->m_Purifier->SetParam(msg); break; case SETZEROPOS: ConfigManager::GetInstance()->UpdateZeroOffset(ConverType::TryToI(msg.nameKey), ConverType::TryToF(msg.strValue)); break; case AXISSTOPALL: m_controller->m_Axis->StopAll(); break; case READTYPE::LOADPARAM: m_controller->m_Machine->Update(msg,LOADPARAMRSP); break; case SCANCTRLFUNC: //需要先释放ScannerCtrl::Init()内部代码块 m_controller->m_ScannerCtrl->CallFunc(msg, its); break; case CAMERAFUNC: m_controller->m_Camera->CallFunc(msg,nullptr); break; case CAMERAPARAMUPDATE: m_controller->m_Camera->Update(msg); break; case PURIFIERFUNC: m_controller->m_Purifier->CallFunc(msg); break; case CONFIGFUNC: ConfigManager::GetInstance()->CallFuncs(msg); break; case PARAMLIMITCFG: case EXTCFG: case RUNCFG: case INFRAREDTEMPCFG: case MACHINECFG: case FAVORITECFG: case CAMERACALIBRATIONCFG: case UISHOWCFG: case RECOATCHECKCFG: case POWDERESTIMATECFG: case COMMUNICATIONCFG: case ALARMCFG: case POWDERSET: case SCANERCTRLCFG: ConfigManager::GetInstance()->UpdateCfg(msg); break; case REQUEST: if (!msg.nameKey.empty() && ConverType::TryToI( msg.nameKey) == XYSCANSTATE) { //g_isDebug 设置为 true; for (int i = 0; i < (int)m_controller->m_ScannerCtrl->GetScanners()->size(); ++i) { //需要先打开ScannerCtrl::Init()代码块 Scanner* p = (m_controller->m_ScannerCtrl->GetScanners())->at(i); p->GetScanStateXY().SendToClients(XYSCANSTATE, "_" + to_string(i)); } } else { ConfigManager::GetInstance()->SendCfgToClients(); //发送配置到客户端 } break; default: break; } }