159 lines
4.3 KiB
C++
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|