#include "DataHandle.h" #include #include #include "../SystemInfo.h" void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg) { DataHandle* p = (DataHandle*)pthis; p->DataCallBackHandle(msg); } void DataHandle::LayersDataCallBackProc(void* pthis,const ReadData& msg, ::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 == XYSCANSTATE) { // //} } DataHandle::DataHandle() : /*m_dataCallBack(nullptr) ,*/ m_streamServer(nullptr) , m_config(nullptr) , m_controller(nullptr) , m_testFlag(false){ } DataHandle::~DataHandle() { Stop(); m_testFlag = true; if (m_testTd.joinable()) m_testTd.join(); DELP(m_streamServer); DELP(m_controller); } void DataHandle::Init() { m_config = ConfigManager::GetInstance(); m_config->PreInit(); g_LngManager = new LanguageManager(); g_LngManager->Init(); g_Lang = &m_config->GetMachineCfg()->m_I18NLang[0]; m_config->Init(); m_streamServer = new StreamServer(m_config->GetMachine()); //测试线程 m_testTd = std::thread ([this] { static float i = 10.12540f; while (!m_testFlag) { ClientWrapper::Instance()->PushAllClient(WriteData(TEST, { {string("hello"),std::to_string(i),iFLOAT}})); std::this_thread::sleep_for(std::chrono::seconds(1)); } }); m_testTd.detach(); m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc, &DataHandle::LayersDataCallBackProc); 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_streamServer) m_streamServer->Stop(); if (m_controller) m_controller->StopSend(); } void DataHandle::DataCallBackHandle(const ReadData& msg) { vector* scanners = nullptr; WriteData* wd = nullptr; int index = 0; switch (msg.dataType) { case GET: break; case SET: break; case AXISMOVEFUNC: if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER){ printf("没有准备好哦,无法操作\n"); return; } m_controller->m_Machine->CallAxisFunc(msg); break; //case SCANERSTART: //开始扫描 // scanners = m_controller->m_ScannerCtrl->GetScanners(); // index = atoi(msg.strValue.c_str()); // if (index >= (*scanners).size()) return; // if ((*scanners)[index]) (*scanners)[index]->StartDebugTest(); // break; //case SCANERSTOP: //停止扫描 // scanners = m_controller->m_ScannerCtrl->GetScanners(); // index = atoi(msg.strValue.c_str()); // if (index >= (*scanners).size()) return; // if ((*scanners)[index]) (*scanners)[index]->StopDebugTest(); // break; //case STARTHEATINGSCANNERTEST: //开始振镜预热测试 // scanners = m_controller->m_ScannerCtrl->GetScanners(); // index = atoi(msg.strValue.c_str()); // if (index >= (*scanners).size()) return; // if((*scanners)[index]) (*scanners)[index]->StartHeatingScannerTest(); // break; //case STOPHEATINGSCANNERTEST: //停止振镜预热 // scanners = m_controller->m_ScannerCtrl->GetScanners(); // index = atoi(msg.strValue.c_str()); // if (index >= (*scanners).size()) return; // if ((*scanners)[index]) (*scanners)[index]->StopHeatingScannerTest(); // break; //case INITERRORINFOSREQ: //初始化错误信息 // msg.clientPtr->PushMsg(new WriteData(INITERRORINFOSRSP, { {string(""), m_controller->m_ScannerCtrl->GetInitErrorInfos(), iSTRING} })); // 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(stoi(msg.nameKey), stof(msg.strValue)); break; case AXISSTOPALL: m_controller->m_Axis->StopAll(); break; case READTYPE::LOADPARAM: m_controller->m_Machine->Update(msg,LOADPARAMRSP); break; case SCANCTRLFUNC: m_controller->m_ScannerCtrl->CallFunc(msg); break; case REQUEST: if (msg.nameKey == "36") { printf("error,36 需要释放ScannerCtrl::Init()内部代码块...\n"); //for (int i = 0; i < 4; ++i) { //需要先打开ScannerCtrl::Init()代码块 // Scanner* p = (m_controller->m_ScannerCtrl->GetScanners())->at(i); // p->GetScanStateXY().SendToClients(XYSCANSTATE, "_" + to_string(i)); //} } else { ConfigManager::GetInstance()->SendCfgToClients(); //发送配置到客户端 } default: break; } }