GrpcPrint/PrintS/DataManage/DataHandle.cpp

159 lines
4.3 KiB
C++

#include "DataHandle.h"
#include <iostream>
#include <typeinfo>
#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 == 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)
, 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_Lang = &m_config->GetMachineCfg()->m_I18NLang[0];
g_Lang = (char*)"zh_CN";
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_controller) m_controller->StopSend();
if(m_streamServer) m_streamServer->Stop();
}
void DataHandle::DataCallBackHandle(const ReadData& msg) {
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 RUNCFG:
ConfigManager::GetInstance()->GetRunCfg()->Update(msg, RUNCFGPARAM);
break;
case INFRAREDTEMPCFG:
ConfigManager::GetInstance()->GetInfraredTempCfg()->Update(msg, INFRAREDTEMPCFGPARAM);
break;
case MACHINECFG:
ConfigManager::GetInstance()->GetMachineCfg()->Update(msg, MACHINECFGPARAM);
break;
case FAVORITECFG:
ConfigManager::GetInstance()->GetFavoriteCfg()->UpdateSub(msg);
break;
case REQUEST:
if (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;
}
}