GrpcPrint/PrintS/DataManage/DataHandle.cpp

155 lines
4.2 KiB
C++

#include "DataHandle.h"
#include <iostream>
#include <typeinfo>
#include "../SystemInfo.h"
void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg, const std::list<Item>& its) {
DataHandle* p = (DataHandle*)pthis;
p->DataCallBackHandle(msg,its);
}
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 == REGISTFUNC) {
p->m_controller->m_reg->CallFunc(msg,response);
}
else if ((READTYPE)msg.dataType == CAMERAFUNC) {
p->m_controller->m_Camera->CallFunc(msg, response);
}
}
DataHandle::DataHandle()
: m_streamServer(nullptr)
, m_config(nullptr)
, m_controller(nullptr){
}
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->Init();
////测试线程
//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 = new StreamServer(m_config->GetMachine());
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_controller) m_controller->StopSend();
if(m_streamServer) m_streamServer->Stop();
}
void DataHandle::DataCallBackHandle(const ReadData& msg, const std::list<Item>& its) {
vector<Scanner*>* 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:
m_controller->m_ScannerCtrl->CallFunc(msg); 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:
ConfigManager::GetInstance()->UpdateCfg(msg);
break;
case REQUEST:
if (!msg.nameKey.empty() && ConverType::TryToI( msg.nameKey) == XYSCANSTATE) {
printf("error,40 需要释放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(); //发送配置到客户端
}
break;
default: break;
}
}