From 02922e116f12bfc5c789a3d88a5108a02129a3ab Mon Sep 17 00:00:00 2001 From: wangxx1809 Date: Tue, 25 Jun 2024 15:25:46 +0800 Subject: [PATCH] fix --- PrintS/Config/ConfigManager.cpp | 99 ++++++---- PrintS/Config/ConfigManager.h | 4 +- PrintS/Config/bean/AlarmCfg.cpp | 2 + PrintS/Config/bean/ParamSetCfg.cpp | 148 ++++++++------- PrintS/Config/bean/ParamSetCfg.h | 15 +- PrintS/Config/bean/ScannerControlCfg.cpp | 4 +- PrintS/Config/bean/ScannerControlCfg.h | 4 +- PrintS/DataManage/DataHandle.cpp | 6 +- PrintS/DataManage/DataHandle.h | 4 +- PrintS/DataManage/RWData.h | 21 ++- PrintS/DataManage/StreamServer.cpp | 12 +- PrintS/DataManage/StreamServer.h | 8 +- PrintS/output/Release/log/2024.hbd | Bin 167936 -> 172032 bytes PrintS/protobuf/stream.pb.cc | 220 ++++++++++++++++------- PrintS/protobuf/stream.pb.h | 104 ++++++++++- PrintS/protobuf/stream.proto | 4 + TestClient/DataManage/DataHandle.cpp | 39 ++-- TestClient/DataManage/RWData.h | 8 + TestClient/DataManage/StreamClient.cpp | 7 +- TestClient/protobuf/stream.pb.cc | 220 ++++++++++++++++------- TestClient/protobuf/stream.pb.h | 104 ++++++++++- TestClient/protobuf/stream.proto | 6 +- 22 files changed, 782 insertions(+), 257 deletions(-) diff --git a/PrintS/Config/ConfigManager.cpp b/PrintS/Config/ConfigManager.cpp index c3d224d..5ce60af 100644 --- a/PrintS/Config/ConfigManager.cpp +++ b/PrintS/Config/ConfigManager.cpp @@ -490,40 +490,15 @@ void ConfigManager::SendCfgToClients() { ++commuCfgitem; } - list lst; - auto start = m_AlarmCfgWrapper->m_StopAlarmCfgMap.begin(); - while (start != m_AlarmCfgWrapper->m_StopAlarmCfgMap.end()) { - lst.emplace_back(Item{ start->first,"",UNKNOW,(*start).second->m_Content, (*start).second->m_IsEnable, - (*start).second->m_IsAlarm, (*start).second->m_IsShow }); - ++start; - } - ClientWrapper::Instance()->PushAllClient(WriteData(STOPALARMCFGPARAM, lst)); - - lst.clear(); - start = m_AlarmCfgWrapper->m_PauseAlarmCfgMap.begin(); - while (start != m_AlarmCfgWrapper->m_PauseAlarmCfgMap.end()) { - lst.emplace_back(Item{ start->first,"",UNKNOW,(*start).second->m_Content, (*start).second->m_IsEnable, - (*start).second->m_IsAlarm, (*start).second->m_IsShow }); - ++start; - } - ClientWrapper::Instance()->PushAllClient(WriteData(PAUSEALARMCFGPARAM, lst)); - - lst.clear(); - start = m_AlarmCfgWrapper->m_WarnAlarmCfgMap.begin(); - while (start != m_AlarmCfgWrapper->m_WarnAlarmCfgMap.end()) { - lst.emplace_back(Item{ start->first,"",UNKNOW,(*start).second->m_Content, (*start).second->m_IsEnable, - (*start).second->m_IsAlarm, (*start).second->m_IsShow }); - ++start; - } - ClientWrapper::Instance()->PushAllClient(WriteData(WARNALARMCFGPARAM, lst)); + SendAlarmCfg(); + SendPowderCfg(); - - int index = 0; - auto item = m_ScannerControlCfgDao->m_ScannerControlCfgMap.begin(); - while (item != m_ScannerControlCfgDao->m_ScannerControlCfgMap.end()) { - //item->second->SendToClients(); - ++item; - } + //int index = 0; + //auto item = m_ScannerControlCfgDao->m_ScannerControlCfgMap.begin(); + //while (item != m_ScannerControlCfgDao->m_ScannerControlCfgMap.end()) { + // //item->second->SendToClients(); + // ++item; + //} m_MoldCfg->SendToClients(MOLDCFGPARAM); m_LoadCfg->SendToClients(LOADCFGPARAM); @@ -588,6 +563,53 @@ void ConfigManager::CallFuncs(const ReadData& rd, const list& lst, ::strea // //} +void ConfigManager::SendAlarmCfg() { + list lst; + auto start = m_AlarmCfgWrapper->m_StopAlarmCfgMap.begin(); + while (start != m_AlarmCfgWrapper->m_StopAlarmCfgMap.end()) { + lst.emplace_back(Item{ start->first,"",UNKNOW,(*start).second->m_Content, (*start).second->m_IsEnable, + (*start).second->m_IsAlarm, (*start).second->m_IsShow }); + ++start; + } + ClientWrapper::Instance()->PushAllClient(WriteData(STOPALARMCFGPARAM, lst)); + + lst.clear(); + start = m_AlarmCfgWrapper->m_PauseAlarmCfgMap.begin(); + while (start != m_AlarmCfgWrapper->m_PauseAlarmCfgMap.end()) { + lst.emplace_back(Item{ start->first,"",UNKNOW,(*start).second->m_Content, (*start).second->m_IsEnable, + (*start).second->m_IsAlarm, (*start).second->m_IsShow }); + ++start; + } + ClientWrapper::Instance()->PushAllClient(WriteData(PAUSEALARMCFGPARAM, lst)); + + lst.clear(); + start = m_AlarmCfgWrapper->m_WarnAlarmCfgMap.begin(); + while (start != m_AlarmCfgWrapper->m_WarnAlarmCfgMap.end()) { + lst.emplace_back(Item{ start->first,"",UNKNOW,(*start).second->m_Content, (*start).second->m_IsEnable, + (*start).second->m_IsAlarm, (*start).second->m_IsShow }); + ++start; + } + ClientWrapper::Instance()->PushAllClient(WriteData(WARNALARMCFGPARAM, lst)); + +} + + +//层供粉量参数 +void ConfigManager::SendPowderCfg() { + list lst; + //m_ParamSetCfg.ParamSetVec[0]->PowderSets.emplace_back(new ParamSetCfg::PowderSet()); //test + vector vec; + m_ParamSetCfg.GetPowderCfg(vec); + auto powderStart = vec.begin(); + while (powderStart != vec.end()) { + lst.emplace_back(Item{ "","",UNKNOW,"", 0,0,0, + powderStart->start_layer,powderStart->end_layer,powderStart->powder }); + ++powderStart; + } + ClientWrapper::Instance()->PushAllClient(WriteData(POWDERSETPARAM, lst)); + +} + void ConfigManager::UpdateCfg(const ReadData& rd) { switch (rd.dataType) @@ -617,8 +639,15 @@ void ConfigManager::UpdateCfg(const ReadData& rd) { case COMMUNICATIONCFG: UpdateCommunicationCfg(rd); break; case ALARMCFG: - m_AlarmCfgWrapper->UpdateCfg(rd.nameKey, (bool)ConverType::TryToI(rd.strValue)); break; - + m_AlarmCfgWrapper->UpdateCfg(rd.nameKey, (bool)ConverType::TryToI(rd.strValue)); + SendAlarmCfg(); + break; + case POWDERSET: + if (rd.handleType == TOTAL) { + m_ParamSetCfg.UpdatePowderCfg(rd); + SendPowderCfg(); + } + break; default: break; } diff --git a/PrintS/Config/ConfigManager.h b/PrintS/Config/ConfigManager.h index 099ed1b..a031b88 100644 --- a/PrintS/Config/ConfigManager.h +++ b/PrintS/Config/ConfigManager.h @@ -103,7 +103,7 @@ public: HbdLanguage* GetLanguage(int id); //无用 void GetDefaultText(map& textmap); //无用 - ParamSetCfg* GetParamSetCfg() { return &m_ParamSetCfg; } //传 困难 + ParamSetCfg* GetParamSetCfg() { return &m_ParamSetCfg; } //已传 //map* GetLaserCfgMap() { return &m_pLaserCfgDao->m_LaserCfgMap; } //vector* GetLaserCfgs() { return &m_pLaserCfgDao->m_LaserCfgs; } map* GetScannerControlCfg() { return &m_ScannerControlCfgDao->m_ScannerControlCfgMap; } //传 @@ -152,6 +152,8 @@ private: string GetIOVersionStrs(int machineid); //io版本 字符串返回 void RedTestCfgStart(); void RedTestCfgStop(); + void SendAlarmCfg(); + void SendPowderCfg(); private: SQLite::Database* m_pDB; HbdLanguageDao* m_pHbdLanguageDao; diff --git a/PrintS/Config/bean/AlarmCfg.cpp b/PrintS/Config/bean/AlarmCfg.cpp index c675145..58ea318 100644 --- a/PrintS/Config/bean/AlarmCfg.cpp +++ b/PrintS/Config/bean/AlarmCfg.cpp @@ -326,4 +326,6 @@ void AlarmCfgWrapper::UpdateCfg(const string& key, bool isEnable) { break; } } while (false); + + } \ No newline at end of file diff --git a/PrintS/Config/bean/ParamSetCfg.cpp b/PrintS/Config/bean/ParamSetCfg.cpp index 0fb4814..a82ff08 100644 --- a/PrintS/Config/bean/ParamSetCfg.cpp +++ b/PrintS/Config/bean/ParamSetCfg.cpp @@ -1,4 +1,4 @@ -#include "ParamSetCfg.h" +#include "ParamSetCfg.h" ParamSetCfg::ParamSetCfg() {} @@ -103,72 +103,100 @@ void ParamSetCfg::Generate(vector& ins) void ParamSetCfg::GetUpdateSql(vector& ups) {} -bool ParamSetCfg::Add(string name) -{ - for (auto pps : ParamSetVec) - { - if (pps->ConfigName == name) - return false; +//bool ParamSetCfg::Add(string name) +//{ +// for (auto pps : ParamSetVec) +// { +// if (pps->ConfigName == name) +// return false; +// } +// +// ParamSet* ps = new ParamSet; +// ps->ConfigName = name; +// +// std::map::iterator it; +// for (it = ParamSetVec.front()->LaserSetMap.begin(); +// it != ParamSetVec.front()->LaserSetMap.end(); +// it++) +// { +// LaserSet* ls = new LaserSet; +// ls->laser_speed = it->second->laser_speed; +// ls->laser_diameter = it->second->laser_diameter; +// ls->laser_power = it->second->laser_power; +// ps->LaserSetMap[it->first] = ls; +// } +// +// for (unsigned int i = 0; i < ParamSetVec.front()->PowderSets.size(); i++) +// { +// PowderSet* src = ParamSetVec.front()->PowderSets[i]; +// PowderSet* pps = new PowderSet; +// pps->end_layer = src->end_layer; +// pps->start_layer = src->start_layer; +// pps->powder = src->powder; +// ps->PowderSets.push_back(pps); +// } +// +// ParamSetVec.push_back(ps); +// return true; +//} + +//bool ParamSetCfg::Delete(string name) +//{ +// if (name == "Default") +// return false; +// +// std::vector::iterator it; +// for (it = ParamSetVec.begin(); it != ParamSetVec.end(); it++) +// { +// if ((*it)->ConfigName == name) +// { +// std::map::iterator lsit; +// for (lsit = (*it)->LaserSetMap.begin(); +// lsit != (*it)->LaserSetMap.end(); +// lsit++) +// { +// delete lsit->second; +// } +// (*it)->LaserSetMap.clear(); +// +// for (unsigned int i = 0; i < (*it)->PowderSets.size(); i++) +// delete (*it)->PowderSets[i]; +// (*it)->PowderSets.clear(); +// +// ParamSetVec.erase(it); +// break; +// } +// } +// +// return true; +//} + +void ParamSetCfg::UpdatePowderCfg(const ReadData& wd) { //全量更新层供粉量配置 + std::unique_lock lck(m_sMtx); + if (ParamSetVec.empty()) return; + + auto it = ParamSetVec[0]->PowderSets.begin(); + while (it != ParamSetVec[0]->PowderSets.end()) { + delete (*it); + ++it; + } + ParamSetVec[0]->PowderSets.clear(); + + for (auto item = wd.its.begin(); item != wd.its.end(); ++item) { + PowderSet* ppowder = new PowderSet(item->start_layer, item->end_layer, item->powder); + ParamSetVec[0]->PowderSets.emplace_back(ppowder); } - ParamSet* ps = new ParamSet; - ps->ConfigName = name; - - std::map::iterator it; - for (it = ParamSetVec.front()->LaserSetMap.begin(); - it != ParamSetVec.front()->LaserSetMap.end(); - it++) - { - LaserSet* ls = new LaserSet; - ls->laser_speed = it->second->laser_speed; - ls->laser_diameter = it->second->laser_diameter; - ls->laser_power = it->second->laser_power; - ps->LaserSetMap[it->first] = ls; - } - - for (unsigned int i = 0; i < ParamSetVec.front()->PowderSets.size(); i++) - { - PowderSet* src = ParamSetVec.front()->PowderSets[i]; - PowderSet* pps = new PowderSet; - pps->end_layer = src->end_layer; - pps->start_layer = src->start_layer; - pps->powder = src->powder; - ps->PowderSets.push_back(pps); - } - - ParamSetVec.push_back(ps); - return true; } -bool ParamSetCfg::Delete(string name) -{ - if (name == "Default") - return false; - std::vector::iterator it; - for (it = ParamSetVec.begin(); it != ParamSetVec.end(); it++) - { - if ((*it)->ConfigName == name) - { - std::map::iterator lsit; - for (lsit = (*it)->LaserSetMap.begin(); - lsit != (*it)->LaserSetMap.end(); - lsit++) - { - delete lsit->second; - } - (*it)->LaserSetMap.clear(); - - for (unsigned int i = 0; i < (*it)->PowderSets.size(); i++) - delete (*it)->PowderSets[i]; - (*it)->PowderSets.clear(); - - ParamSetVec.erase(it); - break; - } +void ParamSetCfg::GetPowderCfg(vector& powderVec) { + std::shared_lock lck(m_sMtx); + if (ParamSetVec.empty()) return; + for (auto item = ParamSetVec[0]->PowderSets.begin(); item != ParamSetVec[0]->PowderSets.end(); ++item) { + powderVec.emplace_back(PowderSet{ (*item)->start_layer,(*item)->end_layer, (*item)->powder }); } - return true; } const string ParamSetCfg::TABLE_NAME = "ParamSet"; diff --git a/PrintS/Config/bean/ParamSetCfg.h b/PrintS/Config/bean/ParamSetCfg.h index 036dabd..c56fcb8 100644 --- a/PrintS/Config/bean/ParamSetCfg.h +++ b/PrintS/Config/bean/ParamSetCfg.h @@ -1,7 +1,10 @@ -#pragma once +#pragma once #include #include #include +#include +#include "../DataManage/RWData.h" + using namespace std; class ParamSetCfg @@ -20,12 +23,13 @@ public: int end_layer; float powder; PowderSet():start_layer(1),end_layer(10),powder(2){} + PowderSet(int slayer, int elayer, float powder) :start_layer(slayer), end_layer(elayer), powder(powder) {} } PowderSet; typedef struct ParamSet { string ConfigName; - std::map LaserSetMap; + std::map LaserSetMap; //没用到 std::vector PowderSets; } ParamSet; @@ -35,9 +39,11 @@ public: static void Generate(vector& ins); void GetUpdateSql(vector& ups); - bool Add(string name); - bool Delete(string name); + //bool Add(string name); //没用到 + //bool Delete(string name); //没用到 + void GetPowderCfg(vector& powderVec); + void UpdatePowderCfg(const ReadData& wd); public: static const string TABLE_NAME; static const string FIELD_ID; @@ -48,6 +54,7 @@ public: static const string FIELD_DATA3; public: + std::shared_mutex m_sMtx; std::vector ParamSetVec; }; diff --git a/PrintS/Config/bean/ScannerControlCfg.cpp b/PrintS/Config/bean/ScannerControlCfg.cpp index 88e0ea7..f1ce230 100644 --- a/PrintS/Config/bean/ScannerControlCfg.cpp +++ b/PrintS/Config/bean/ScannerControlCfg.cpp @@ -3,8 +3,8 @@ ScannerControlCfg::ScannerControlCfg() - : m_Index(new IntData("Index")) - , m_SeqNo(new IntData("SeqNo")) + : /*m_Index(new IntData("Index")) + ,*/ m_SeqNo(new IntData("SeqNo")) , m_ControlNo(new IntData("ControlNo")) , m_SerialNo(new IntData("SerialNo")) , m_ControlType(new IntData("ControlType")) diff --git a/PrintS/Config/bean/ScannerControlCfg.h b/PrintS/Config/bean/ScannerControlCfg.h index f805e63..39e2c08 100644 --- a/PrintS/Config/bean/ScannerControlCfg.h +++ b/PrintS/Config/bean/ScannerControlCfg.h @@ -24,8 +24,8 @@ public: void Init(); ScanParamCfg* GetScanParamCfg(string str); public: - IntData* m_Index; //编号 配合ConfigManager中的map - IntData* m_SeqNo; + //IntData* m_Index; + IntData* m_SeqNo; //编号 配合ConfigManager中的map IntData* m_ControlNo; IntData* m_SerialNo; IntData* m_ControlType; diff --git a/PrintS/DataManage/DataHandle.cpp b/PrintS/DataManage/DataHandle.cpp index dd212d9..8252e8d 100644 --- a/PrintS/DataManage/DataHandle.cpp +++ b/PrintS/DataManage/DataHandle.cpp @@ -3,6 +3,7 @@ #include #include "../SystemInfo.h" +//接收数据的回调 void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg, const std::list& its) { DataHandle* p = (DataHandle*)pthis; ReadData rd = msg; @@ -10,7 +11,7 @@ void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg, const std::l p->DataCallBackHandle(rd, lst); } -void DataHandle::LayersDataCallBackProc(void* pthis,const ReadData& msg, const list& lst, ::stream::ResponseAny** response) { +void DataHandle::FuncDataCallBackProc(void* pthis,const ReadData& msg, const list& lst, ::stream::ResponseAny** response) { DataHandle* p = (DataHandle*)pthis; int index = atoi(msg.strValue.data()); @@ -50,7 +51,7 @@ void DataHandle::Init() { m_config->Init(); m_streamServer = new StreamServer(m_config->GetMachine()); - m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc, &DataHandle::LayersDataCallBackProc); + m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc, &DataHandle::FuncDataCallBackProc); m_streamServer->Init(); m_controller = new Controller(); @@ -119,6 +120,7 @@ void DataHandle::DataCallBackHandle(const ReadData& msg, const std::list& case POWDERESTIMATECFG: case COMMUNICATIONCFG: case ALARMCFG: + case POWDERSET: ConfigManager::GetInstance()->UpdateCfg(msg); break; case REQUEST: diff --git a/PrintS/DataManage/DataHandle.h b/PrintS/DataManage/DataHandle.h index e1a5377..2e77522 100644 --- a/PrintS/DataManage/DataHandle.h +++ b/PrintS/DataManage/DataHandle.h @@ -7,7 +7,7 @@ class DataHandle{ typedef void (*DataCallBack)(void* pthis, const ReadData& msg); - typedef void (*LayersDataCallBack)(void* pthis, const ReadData& msg, const list& lst, ::stream::ResponseAny** response); + typedef void (*FuncDataCallBack)(void* pthis, const ReadData& msg, const list& lst, ::stream::ResponseAny** response); public: DataHandle(); ~DataHandle(); @@ -17,7 +17,7 @@ public: void Stop(); static void DataCallBackProc(void* pthis, const ReadData& msg,const std::list& its); - static void LayersDataCallBackProc(void* pthis, const ReadData& msg, const list& lst, ::stream::ResponseAny** response); + static void FuncDataCallBackProc(void* pthis, const ReadData& msg, const list& lst, ::stream::ResponseAny** response); private: //DataCallBack m_dataCallBack; //std::thread m_testTd; diff --git a/PrintS/DataManage/RWData.h b/PrintS/DataManage/RWData.h index 37bcd48..e1cb071 100644 --- a/PrintS/DataManage/RWData.h +++ b/PrintS/DataManage/RWData.h @@ -34,6 +34,7 @@ enum READTYPE { POWDERESTIMATECFG, COMMUNICATIONCFG, ALARMCFG, + POWDERSET, LOADPARAM, //装载参数 @@ -63,6 +64,7 @@ enum DATAHANDLE { UPDATE = 0, ADD, DEL, + TOTAL, //发全量信息 }; @@ -115,7 +117,7 @@ enum WRITETYPE { STOPALARMCFGPARAM, //AlarmCfgWrapper stop参数 PAUSEALARMCFGPARAM, //AlarmCfgWrapper pause参数 WARNALARMCFGPARAM, //AlarmCfgWrapper warn参数 - + POWDERSETPARAM, //PowderSet 参数 MOLDCFGPARAM, LOADCFGPARAM, @@ -144,6 +146,23 @@ struct Item { bool isEnable; bool isAlarm; bool isShow; + + //层供粉量配置使用 struct PowderSet + int start_layer; + int end_layer; + float powder; + + // + //IntData* m_Index; //编号 配合ConfigManager中的map + //IntData* m_SeqNo; + //IntData* m_ControlNo; + //IntData* m_SerialNo; + //IntData* m_ControlType; + //StrData* m_CardName; + //StrData* m_CardIP; + //BoolData* m_IsEnable; //是否启动 + //BoolData* m_HadAssign; + //BoolData* m_HadMatch; }; class ClientInfo; diff --git a/PrintS/DataManage/StreamServer.cpp b/PrintS/DataManage/StreamServer.cpp index 935ea0d..d1efe88 100644 --- a/PrintS/DataManage/StreamServer.cpp +++ b/PrintS/DataManage/StreamServer.cpp @@ -32,8 +32,8 @@ StreamServer::~StreamServer() { paramLst.emplace_back(Item{ it.namekey(),it.strvalue() ,(DATATYPE)it.valuetype() }); //直接加到readData.its上面,后续的请求无法收到,不知道为啥 } - if (m_layerDataCallBack) - m_layerDataCallBack(m_handlePtr, readData, paramLst, &response); + if (m_funcDataCallBack) + m_funcDataCallBack(m_handlePtr, readData, paramLst, &response); return Status::OK; } @@ -64,12 +64,14 @@ Status StreamServer::AllStream(ServerContext* context, grpc::ServerReaderWriter< //函数参数 std::list paramLst; // for (const ::stream::ParamInfo it : request.item()) { - paramLst.emplace_back(Item{ it.namekey(),it.strvalue() ,(DATATYPE)it.valuetype() }); //直接加到readData.its上面,后续的请求无法收到,不知道为啥 + paramLst.emplace_back(Item{ it.namekey(),it.strvalue() ,(DATATYPE)it.valuetype() + ,it.context(),it.isenable(),it.isalarm(),it.isshow(),it.startlayer(),it.endlayer(),it.powder()}); //直接加到readData.its上面,后续的请求无法收到,不知道为啥 } printf("客户端消息:dataType:%d,nameKey:%s, strValue:%s,valueType:%d,lst:%zd\n", readData.dataType, readData.nameKey.c_str(), readData.strValue.c_str(), readData.valueType, paramLst.size()); if (m_dataCallBack) { + readData.its = paramLst; m_dataCallBack(m_handlePtr,readData, paramLst); } @@ -95,6 +97,10 @@ Status StreamServer::AllStream(ServerContext* context, grpc::ServerReaderWriter< paramInfo->set_isenable(wd->isEnable); paramInfo->set_isalarm(wd->isAlarm); paramInfo->set_isshow(wd->isShow); + + paramInfo->set_startlayer(wd->start_layer); + paramInfo->set_endlayer(wd->end_layer); + paramInfo->set_powder(wd->powder); } stream->Write(response); } diff --git a/PrintS/DataManage/StreamServer.h b/PrintS/DataManage/StreamServer.h index ba572c5..4228f71 100644 --- a/PrintS/DataManage/StreamServer.h +++ b/PrintS/DataManage/StreamServer.h @@ -19,7 +19,7 @@ using stream::ResponseInfo; class StreamServer final : public Stream::Service { typedef void (*DataCallBack)(void* pthis,const ReadData& msg, const std::list& its); - typedef void (*LayerDataCallBack)(void* pthis, const ReadData& msg,const list& lst, ::stream::ResponseAny** response); + typedef void (*FuncDataCallBack)(void* pthis, const ReadData& msg,const list& lst, ::stream::ResponseAny** response); public: @@ -30,10 +30,10 @@ public: void Run(); void Stop(); - void SetCallBackFunc(void* pdata,DataCallBack dataCallBack, LayerDataCallBack layerCB) { + void SetCallBackFunc(void* pdata,DataCallBack dataCallBack, FuncDataCallBack layerCB) { m_dataCallBack = dataCallBack; m_handlePtr = pdata; - m_layerDataCallBack = layerCB; + m_funcDataCallBack = layerCB; } private: @@ -44,7 +44,7 @@ private: std::thread m_checkCloseTd; //检测客户端关闭线程 bool m_checkQuitFlag; DataCallBack m_dataCallBack; - LayerDataCallBack m_layerDataCallBack; + FuncDataCallBack m_funcDataCallBack; int m_port; //监听端口 void* m_handlePtr; diff --git a/PrintS/output/Release/log/2024.hbd b/PrintS/output/Release/log/2024.hbd index 9d3fdc80688dce40374a57f5bce7ecd45f36da72..65ce3663ca7b322b3f0e9a5f16e2c8eabc5b102d 100644 GIT binary patch delta 33044 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 z≫%gFuf3jO(l)*^OzM_6h;&K6NX8TX|yu*m})7=w^bXA38?znqjqnh{L6{6fW~; zm>?JI>@uCulGF0C(J%YEBR;PIt*PfzP@6|nI4i-w&PU9`2cxkn;zE*Fom@n$80Lw) z#pHY8-!y$^-#Ms-_L!w5W`6_rAOme;rWde$s*RgU$42D?=ITi(~T6#CDGLC#*K5FZR-mV`k==&LkLaMXb-`lPmI zDtaS7YYpa(=Rv;46SCbB{&mKkH>EWXmR6om7153xzbZ}N6K^fCjmp~1hxW1Lxd5aK z!I2~JVw`!!epK+Q8I*(NOu{S=v*frHM7r(R8$2A~E9M(1m7YF-(bimbtzqn_Sg$Hb zP>|0E|1a+3xRH9TYsoaxf2O8OB*5DqlHY9Q{WNt?kmDy%3=9T{q{`>A{9&?`zHw)~ zrR1VceXr4zYzx*W@85>T@{p<XghHIyw@&sUo->AyB{zNBUcEz7Zb$oEtCjpL~+O!GtWBOMQr`(`*VrWW(9p~&8U>pZb(_QE=aA|V^m<2vG z{{@xdIObx1ZG=hWdt~2dKJ8m1I47T>VOq$aKj>jWy4I*KTW<+nNXA$iq5!y9bwTi~ z&C-1i6lrH2Q>#**W?jaf_Xq8h(rzhCt?{88ZDt;OhfXp(I;mRdoQu2)8J`=@zWb+Z zIIZZ^Ct>Ms==m}=_=Q8&;KQ(&lnxhtNh|xFPv)C{2s8C>vzF%#I*ox@yhzg!xX1l` zi5O-0IpcpNV&XCiyTt&A%K*~*w~V+Ya0uOq88#JH+nIj*k2Qe-ohX@9b#)!ei*ZS3 zj3M+JpMaJPo(+*ASo@Pj-@~rmfL&nT&-ohm(#GbxBe?3ao2MStCmSE0O!{e~#-C#4 zgqRwCWsiS@0r|Y-F(1|NnRDvOgwO8vH{|jy*hl16zQ5->ONtHW4JACk;WF!;|6yde zu*DAPc7VoR^|2h6eh{ifWInmL&DMN7eVlLOBzdWqD1S=F1JX{sNY5h6kN@pd?lrJQI5BCS|A? zXVPj|UGjvfeo=J8{8)Ou32b9$s#9I{Ff<3xM|p!;zid$_%iOG;7p9!Tp@Fg(=Y-{4 zygbR4NgO;yaCTB^aI#ljfc0{J=1q+zI+_X5$wgP4{ihl$Xl+%h22tOv#%A^@pN_hJ zVrWmleN~%VC)0xfHO|{M2Q;*CL`Y^>^~oz&d&Py#-jJfSD>$>pEPcHN@gDkGvcfpX25B&alqgH833-AR)n|(7Tv4bY3Fgbd5Nm zWD{maf_Gy}o5hIMt&5XN737hM1+F81j^f_MiKz%l+fpCRaLrE05Zm^9oJ(0$sU(x< z2j){(NP$(K8wTk}&1+@hCMJ%_U%z<|A}%^yvI-QDp1`7~U}MEj7`xFzx9tDPFCy(u zsv~C>U15qqqqB+AAdM@&2l6VUCqd>oFyr+6ORr;ug8=3YiqyKH2*0Sta%W0^cl~5* z?9W?;*hJ6F#$Z_ER#Wn~;K6<<=B^pYJ^^O@MGN7u5A+&p?c|+EIr6itFI2`4W0v6; zFQ^9_KW;SreP1$lUyN>l5W`LnqyrsKLj;uDgDB4cMQ&%qMw-S50D;`{&3Ahu zCrU=>k|+|vo3d(k-AS$=(~b*`8oF1+Z?bSp%wdwo&QwKsblZ?@))3VwNj5P)Wuf>_ zIG|s?OTH1c6XwYgFuHHiEF>^u?aKt0FgtxyR?D$pkU+l>Xc?L3-9V0ivQ8nR_0QGt zEbDYT;?$TXHG_S)Pb(~yzl=SD%0g>fa|omq_cMZk7di)DOUl3+f(z=fdSi#BTs$uu zMj4riOsm+nVwp4si+|lnnsuyqIZrNgw3Mb;$Wt3SPTFX; zXUtxdciqd0s8Fk_N!FnZVUOWZ=ZK2nHMO8dI9m zvPMK$bL`^z14qp#?aje2gOvpS1I4{30*+^jZSQ$7=26;QH>uzVFT7<;a=>wB03OSZ z@apm|tyVH6qa#n(I`S3)HSzyBP(=P;jup3NQ*S@!P}Ql7zR~QrPvF9vr8slB#ZkRUYa`&LAoob++%D$Pj;nm&iA!8HMY6qR_+OX9m%e;24B zS=Nwr6Ss|v?SP*Ybz0P0tMsVwH?yO)WlTsCnQpazfHmSXQ1hdOm*v6}{Rx(Kuc^Ckvsvdi`!-IgiDCTH6G z2<(~g8fJz1n9?U_)`*_d$bV?D#cakz*jOjYANiMDE! zRIxFC)!ttat&xH4WJP&N;F0^v1*mZD(NwE;)4TgeQ(qwU(I1-5+y0ftcSS-_7h3u} z73EY{%qILsmvNB&q-rVjCrTLB2`$kgRrOS*>1Xe)HY%aYK5=c0a?~95ToOEg9LBl1 zJ=9XW$7EX?yhUa)U{RB>AEa!KGna9+OMy;*rL+x#=)Tja%_|SLM93tHYYPYz-* zK)cw&G)}e)NA~AR$KrmmBsIWpx!D8ylEcxBTb|!7#oF;Hn92~88Vf?`LFbTm!ArJ( zjSq5*C;r#$YcMSZx~>D=N+0T(^%558h**=Sby4DL%>b!yG8t#monRZ0JJ$YXyXI}P zq6k)k{hi=zu4SR)9p_qC!lc3xozCIZxyr07<$`!Lvl0-+NCcJ~(@T_7|F^Hii|U9o zzKt9;6d!3zxW-X=)Y}kxf4=*ChW7h^S{=HX(9K%ih}E#M6z&x+smR$KNMfZHiO@P( z&(lW;zfon>CT%vUxFT6f-&7BXO15stA2jn=k1fXxIMSWd)do>YXlP& z?hM46)2)*+4NGgzTk*IPBX4MjH~&iM9kzBOLBFyyj3IQ8l-RXIb$4eSed{4Yj>B~Z zklFZuEZs==0j?Cnr4QkHrfJPTXr{&joe6a+Xt2G<|YE<1{UEo7U;#Y~9L ztVn&G4Y)iNDjoN6W@6o~Q?!$Yk~uE`8!k~|rvu@JF$#_2s;KtVsaw!o!qC7 z5ISdA@bB3saNFbI9wZ|EF930OX#KzECbm)2yLM;pYTJIiLXg^bddYGv828(8Mu@!^ ziMT!1w(`8R)0&RcrN-}nb!H0~tOV0{z8A|Q2C?a(-5KlIdmr5Dx>!XW*venkG9XCx z>8Azh{Q;M(_vY59Q$HKVgwwF?LzHyHjzKpZl zX2gScPRTEAs0@0rGX4mz{#LiZ;zEDMQ`VFKBnKfMN!VR0dU?qr=!b9fmvfzI^7 z`BC0tIg7uepHe!Nnt>^D?KV)hPx69_SAcDa98T1lY;!+>LAa>%Cy6nbXz)I__y3FL zqYe6ffrrN$wv&*ZDyY&Y;uVXMY9oNXXH850x%iaBab;!RbHiR+A5Y;E{609Rx`Z3T zBTS^EK9>Ke?U9jxb=H-7jM;v9qh(uZJ$jWc)P!gw_X-{a&H=|Dpjvi+Ll4n9a{p9J!ra!?Us!bi zH&&@RtE+X(JNyQaw8%*=c1OmgO{2M>(e9nd-u6hFU`3WKq9PTeE1E5vB|UH;*Z0|( z6>FlO*R#wzT{w5U<;w zS;g-T+Y>1(0plHTwiKLW7okkj=pI3iW4rUSG8*ary=%r^R{1jXiWcSFt=Rc06$=6^ z*NgMCOJNCqZxRi_Kx`+*v>@jd%>&zc^m&r;hgnDk&mWs zezUlMs)-XLIj32^FUkRq{bx9CM|WK)!M}Cn2Q&wP*%3Cq^<>j=Wr0?X6JRf%_l8ns zk(ac8cTGKt6Y1S*@WC=Z^IQPbln=RbxVN#i(guz}nu$Ru4?Gf*jqf@aJ1Og>CE3$7H zr%Om#P6i|?Fz{ol{_oi9HCcC2 zIrfRfhQMmKwM$zXNWxk92TX+|S*{_$2qQi=4?AZxOWP#^NQ#zr0n7k1|0c7vqI&zH zTg#_>f3N04t|80sbf+VwiN3k$>F~v55SISh^JOHMfie|P59GYt2@31&L%i|qzbcb7 z8LTFEU`=}k-+M7tcX#iYT%#g__G+;%xL_evotGFh%IZ6I_NNjFkDX0}1jPGou@{Uf z#CZc?GMWk7g&=QUe;KxDi6`9bKgjDEv0qmIv(t8j|g+ccXc sc`=A&d0~oA&v0h8t0Yr4PJ4$=TRpFh^!272&L*0vT6_t6wMYH~p7#^!OaK4? delta 28916 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 THmt39llG(p!5FHU$biBP6G9bl diff --git a/PrintS/protobuf/stream.pb.cc b/PrintS/protobuf/stream.pb.cc index 2cc1ee5..4f1ed96 100644 --- a/PrintS/protobuf/stream.pb.cc +++ b/PrintS/protobuf/stream.pb.cc @@ -40,6 +40,9 @@ PROTOBUF_CONSTEXPR ParamInfo::ParamInfo(::_pbi::ConstantInitialized) /*decltype(_impl_.isenable_)*/ false, /*decltype(_impl_.isalarm_)*/ false, /*decltype(_impl_.isshow_)*/ false, + /*decltype(_impl_.startlayer_)*/ 0, + /*decltype(_impl_.endlayer_)*/ 0, + /*decltype(_impl_.powder_)*/ 0, /*decltype(_impl_._cached_size_)*/ {}, } {} struct ParamInfoDefaultTypeInternal { @@ -283,6 +286,9 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isenable_), PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isalarm_), PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isshow_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.startlayer_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.endlayer_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.powder_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::stream::RequestInfo, _internal_metadata_), ~0u, // no _extensions_ @@ -411,17 +417,17 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { {0, -1, -1, sizeof(::stream::ParamInfo)}, - {15, -1, -1, sizeof(::stream::RequestInfo)}, - {29, -1, -1, sizeof(::stream::ResponseInfo)}, - {40, 49, -1, sizeof(::stream::ResponseAny)}, - {50, -1, -1, sizeof(::stream::LayerData)}, - {63, -1, -1, sizeof(::stream::LayerDataBlock)}, - {77, -1, -1, sizeof(::stream::VectorDataBlock)}, - {89, -1, -1, sizeof(::stream::ChainDataBlock)}, - {99, -1, -1, sizeof(::stream::Point)}, - {109, -1, -1, sizeof(::stream::RegResponce)}, - {118, -1, -1, sizeof(::stream::ImgInfoResponce)}, - {129, -1, -1, sizeof(::stream::ComResponce)}, + {18, -1, -1, sizeof(::stream::RequestInfo)}, + {32, -1, -1, sizeof(::stream::ResponseInfo)}, + {43, 52, -1, sizeof(::stream::ResponseAny)}, + {53, -1, -1, sizeof(::stream::LayerData)}, + {66, -1, -1, sizeof(::stream::LayerDataBlock)}, + {80, -1, -1, sizeof(::stream::VectorDataBlock)}, + {92, -1, -1, sizeof(::stream::ChainDataBlock)}, + {102, -1, -1, sizeof(::stream::Point)}, + {112, -1, -1, sizeof(::stream::RegResponce)}, + {121, -1, -1, sizeof(::stream::ImgInfoResponce)}, + {132, -1, -1, sizeof(::stream::ComResponce)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -440,47 +446,48 @@ static const ::_pb::Message* const file_default_instances[] = { }; const char descriptor_table_protodef_stream_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { "\n\014stream.proto\022\006stream\032\031google/protobuf/" - "any.proto\"\223\001\n\tParamInfo\022\017\n\007nameKey\030\001 \001(\014" + "any.proto\"\311\001\n\tParamInfo\022\017\n\007nameKey\030\001 \001(\014" "\022\020\n\010strValue\030\002 \001(\014\022\037\n\tvalueType\030\003 \001(\0162\014." "stream.TYPE\022\017\n\007context\030\004 \001(\014\022\020\n\010isEnable" - "\030\005 \001(\010\022\017\n\007isAlarm\030\006 \001(\010\022\016\n\006isShow\030\007 \001(\010\"" - "\254\001\n\013RequestInfo\022\020\n\010dataType\030\001 \001(\r\022\017\n\007nam" - "eKey\030\002 \001(\014\022\020\n\010strValue\030\003 \001(\014\022\037\n\tvalueTyp" - "e\030\004 \001(\0162\014.stream.TYPE\022&\n\nhandleType\030\005 \001(" - "\0162\022.stream.DATAHANDLE\022\037\n\004item\030\006 \003(\0132\021.st" - "ream.ParamInfo\"Q\n\014ResponseInfo\022\020\n\010dataTy" - "pe\030\001 \001(\r\022\016\n\006result\030\002 \001(\010\022\037\n\004item\030\003 \003(\0132\021" - ".stream.ParamInfo\"1\n\013ResponseAny\022\"\n\004data" - "\030\001 \001(\0132\024.google.protobuf.Any\"\210\001\n\tLayerDa" - "ta\022\023\n\013zCooldinate\030\001 \001(\002\022\016\n\006powder\030\002 \001(\002\022" - "\026\n\016layerThickness\030\003 \001(\002\022.\n\016layerDataBloc" - "k\030\004 \003(\0132\026.stream.LayerDataBlock\022\016\n\006resul" - "t\030\005 \001(\010\"\266\001\n\016LayerDataBlock\022\021\n\telementId\030" - "\001 \001(\005\022\026\n\016elementParamId\030\002 \001(\005\022\021\n\tblockTy" - "pe\030\003 \001(\r\022*\n\tvecBlocks\030\004 \003(\0132\027.stream.Vec" - "torDataBlock\022+\n\013chainBlocks\030\005 \003(\0132\026.stre" - "am.ChainDataBlock\022\r\n\005order\030\006 \001(\r\"M\n\017Vect" - "orDataBlock\022\016\n\006startX\030\001 \001(\002\022\016\n\006startY\030\002 " - "\001(\002\022\014\n\004endX\030\003 \001(\002\022\014\n\004endY\030\004 \001(\002\"A\n\016Chain" - "DataBlock\022\016\n\006dotNum\030\001 \001(\r\022\037\n\010pointVec\030\002 " - "\003(\0132\r.stream.Point\"#\n\005Point\022\014\n\004xPos\030\001 \001(" - "\002\022\014\n\004yPos\030\002 \001(\002\"\033\n\013RegResponce\022\014\n\004data\030\001" - " \001(\005\"D\n\017ImgInfoResponce\022\022\n\nlevelImage\030\001 " - "\001(\r\022\r\n\005width\030\002 \001(\005\022\016\n\006height\030\003 \001(\005\"\033\n\013Co" - "mResponce\022\014\n\004data\030\001 \001(\014*\223\001\n\004TYPE\022\t\n\005iBOO" - "L\020\000\022\n\n\006iSHORT\020\001\022\013\n\007iUSHORT\020\002\022\010\n\004iINT\020\003\022\t" - "\n\005iUINT\020\004\022\n\n\006iFLOAT\020\005\022\013\n\007iSTRING\020\006\022\t\n\005iC" - "HAR\020\007\022\n\n\006iUCHAR\020\010\022\t\n\005iWORD\020\t\022\013\n\007iDOUBLE\020" - "\n\022\n\n\006iTIMET\020\013**\n\nDATAHANDLE\022\n\n\006UPDATE\020\000\022" - "\007\n\003ADD\020\001\022\007\n\003DEL\020\0022\372\001\n\006Stream\0224\n\006Simple\022\023" - ".stream.RequestInfo\032\023.stream.ResponseAny" - "\"\000\022=\n\014ServerStream\022\023.stream.RequestInfo\032" - "\024.stream.ResponseInfo\"\0000\001\022=\n\014ClientStrea" - "m\022\023.stream.RequestInfo\032\024.stream.Response" - "Info\"\000(\001\022<\n\tAllStream\022\023.stream.RequestIn" - "fo\032\024.stream.ResponseInfo\"\000(\0010\001B-\n\027io.grp" - "c.examples.streamB\013StreamProtoP\001\242\002\002STb\006p" - "roto3" + "\030\005 \001(\010\022\017\n\007isAlarm\030\006 \001(\010\022\016\n\006isShow\030\007 \001(\010\022" + "\022\n\nstartLayer\030\010 \001(\005\022\020\n\010endLayer\030\t \001(\005\022\016\n" + "\006powder\030\n \001(\002\"\254\001\n\013RequestInfo\022\020\n\010dataTyp" + "e\030\001 \001(\r\022\017\n\007nameKey\030\002 \001(\014\022\020\n\010strValue\030\003 \001" + "(\014\022\037\n\tvalueType\030\004 \001(\0162\014.stream.TYPE\022&\n\nh" + "andleType\030\005 \001(\0162\022.stream.DATAHANDLE\022\037\n\004i" + "tem\030\006 \003(\0132\021.stream.ParamInfo\"Q\n\014Response" + "Info\022\020\n\010dataType\030\001 \001(\r\022\016\n\006result\030\002 \001(\010\022\037" + "\n\004item\030\003 \003(\0132\021.stream.ParamInfo\"1\n\013Respo" + "nseAny\022\"\n\004data\030\001 \001(\0132\024.google.protobuf.A" + "ny\"\210\001\n\tLayerData\022\023\n\013zCooldinate\030\001 \001(\002\022\016\n" + "\006powder\030\002 \001(\002\022\026\n\016layerThickness\030\003 \001(\002\022.\n" + "\016layerDataBlock\030\004 \003(\0132\026.stream.LayerData" + "Block\022\016\n\006result\030\005 \001(\010\"\266\001\n\016LayerDataBlock" + "\022\021\n\telementId\030\001 \001(\005\022\026\n\016elementParamId\030\002 " + "\001(\005\022\021\n\tblockType\030\003 \001(\r\022*\n\tvecBlocks\030\004 \003(" + "\0132\027.stream.VectorDataBlock\022+\n\013chainBlock" + "s\030\005 \003(\0132\026.stream.ChainDataBlock\022\r\n\005order" + "\030\006 \001(\r\"M\n\017VectorDataBlock\022\016\n\006startX\030\001 \001(" + "\002\022\016\n\006startY\030\002 \001(\002\022\014\n\004endX\030\003 \001(\002\022\014\n\004endY\030" + "\004 \001(\002\"A\n\016ChainDataBlock\022\016\n\006dotNum\030\001 \001(\r\022" + "\037\n\010pointVec\030\002 \003(\0132\r.stream.Point\"#\n\005Poin" + "t\022\014\n\004xPos\030\001 \001(\002\022\014\n\004yPos\030\002 \001(\002\"\033\n\013RegResp" + "once\022\014\n\004data\030\001 \001(\005\"D\n\017ImgInfoResponce\022\022\n" + "\nlevelImage\030\001 \001(\r\022\r\n\005width\030\002 \001(\005\022\016\n\006heig" + "ht\030\003 \001(\005\"\033\n\013ComResponce\022\014\n\004data\030\001 \001(\014*\223\001" + "\n\004TYPE\022\t\n\005iBOOL\020\000\022\n\n\006iSHORT\020\001\022\013\n\007iUSHORT" + "\020\002\022\010\n\004iINT\020\003\022\t\n\005iUINT\020\004\022\n\n\006iFLOAT\020\005\022\013\n\007i" + "STRING\020\006\022\t\n\005iCHAR\020\007\022\n\n\006iUCHAR\020\010\022\t\n\005iWORD" + "\020\t\022\013\n\007iDOUBLE\020\n\022\n\n\006iTIMET\020\013**\n\nDATAHANDL" + "E\022\n\n\006UPDATE\020\000\022\007\n\003ADD\020\001\022\007\n\003DEL\020\0022\372\001\n\006Stre" + "am\0224\n\006Simple\022\023.stream.RequestInfo\032\023.stre" + "am.ResponseAny\"\000\022=\n\014ServerStream\022\023.strea" + "m.RequestInfo\032\024.stream.ResponseInfo\"\0000\001\022" + "=\n\014ClientStream\022\023.stream.RequestInfo\032\024.s" + "tream.ResponseInfo\"\000(\001\022<\n\tAllStream\022\023.st" + "ream.RequestInfo\032\024.stream.ResponseInfo\"\000" + "(\0010\001B-\n\027io.grpc.examples.streamB\013StreamP" + "rotoP\001\242\002\002STb\006proto3" }; static const ::_pbi::DescriptorTable* const descriptor_table_stream_2eproto_deps[1] = { @@ -490,7 +497,7 @@ static ::absl::once_flag descriptor_table_stream_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_stream_2eproto = { false, false, - 1645, + 1699, descriptor_table_protodef_stream_2eproto, "stream.proto", &descriptor_table_stream_2eproto_once, @@ -582,6 +589,9 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { decltype(_impl_.isenable_){}, decltype(_impl_.isalarm_){}, decltype(_impl_.isshow_){}, + decltype(_impl_.startlayer_){}, + decltype(_impl_.endlayer_){}, + decltype(_impl_.powder_){}, /*decltype(_impl_._cached_size_)*/ {}, }; _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( @@ -608,8 +618,8 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { _this->_impl_.context_.Set(from._internal_context(), _this->GetArenaForAllocation()); } ::memcpy(&_impl_.valuetype_, &from._impl_.valuetype_, - static_cast<::size_t>(reinterpret_cast(&_impl_.isshow_) - - reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.isshow_)); + static_cast<::size_t>(reinterpret_cast(&_impl_.powder_) - + reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.powder_)); // @@protoc_insertion_point(copy_constructor:stream.ParamInfo) } @@ -623,6 +633,9 @@ inline void ParamInfo::SharedCtor(::_pb::Arena* arena) { decltype(_impl_.isenable_){false}, decltype(_impl_.isalarm_){false}, decltype(_impl_.isshow_){false}, + decltype(_impl_.startlayer_){0}, + decltype(_impl_.endlayer_){0}, + decltype(_impl_.powder_){0}, /*decltype(_impl_._cached_size_)*/ {}, }; _impl_.namekey_.InitDefault(); @@ -663,8 +676,8 @@ PROTOBUF_NOINLINE void ParamInfo::Clear() { _impl_.strvalue_.ClearToEmpty(); _impl_.context_.ClearToEmpty(); ::memset(&_impl_.valuetype_, 0, static_cast<::size_t>( - reinterpret_cast(&_impl_.isshow_) - - reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.isshow_)); + reinterpret_cast(&_impl_.powder_) - + reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.powder_)); _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); } @@ -676,15 +689,15 @@ const char* ParamInfo::_InternalParse( PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { +const ::_pbi::TcParseTable<4, 10, 0, 0, 2> ParamInfo::_table_ = { { 0, // no _has_bits_ 0, // no _extensions_ - 7, 56, // max_field_number, fast_idx_mask + 10, 120, // max_field_number, fast_idx_mask offsetof(decltype(_table_), field_lookup_table), - 4294967168, // skipmap + 4294966272, // skipmap offsetof(decltype(_table_), field_entries), - 7, // num_field_entries + 10, // num_field_entries 0, // num_aux_entries offsetof(decltype(_table_), field_names), // no aux_entries &_ParamInfo_default_instance_._instance, @@ -712,6 +725,20 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { // bool isShow = 7; {::_pbi::TcParser::SingularVarintNoZag1(), {56, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_)}}, + // int32 startLayer = 8; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(ParamInfo, _impl_.startlayer_), 63>(), + {64, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.startlayer_)}}, + // int32 endLayer = 9; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(ParamInfo, _impl_.endlayer_), 63>(), + {72, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.endlayer_)}}, + // float powder = 10; + {::_pbi::TcParser::FastF32S1, + {85, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.powder_)}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, }}, {{ 65535, 65535 }}, {{ @@ -736,6 +763,15 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { // bool isShow = 7; {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_), 0, 0, (0 | ::_fl::kFcSingular | ::_fl::kBool)}, + // int32 startLayer = 8; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.startlayer_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kInt32)}, + // int32 endLayer = 9; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.endlayer_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kInt32)}, + // float powder = 10; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.powder_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kFloat)}, }}, // no aux_entries {{ @@ -795,6 +831,32 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { 7, this->_internal_isshow(), target); } + // int32 startLayer = 8; + if (this->_internal_startlayer() != 0) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArrayWithField<8>( + stream, this->_internal_startlayer(), target); + } + + // int32 endLayer = 9; + if (this->_internal_endlayer() != 0) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArrayWithField<9>( + stream, this->_internal_endlayer(), target); + } + + // float powder = 10; + static_assert(sizeof(::uint32_t) == sizeof(float), + "Code assumes ::uint32_t and float are the same size."); + float tmp_powder = this->_internal_powder(); + ::uint32_t raw_powder; + memcpy(&raw_powder, &tmp_powder, sizeof(tmp_powder)); + if (raw_powder != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteFloatToArray( + 10, this->_internal_powder(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( @@ -851,6 +913,28 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { total_size += 2; } + // int32 startLayer = 8; + if (this->_internal_startlayer() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne( + this->_internal_startlayer()); + } + + // int32 endLayer = 9; + if (this->_internal_endlayer() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne( + this->_internal_endlayer()); + } + + // float powder = 10; + static_assert(sizeof(::uint32_t) == sizeof(float), + "Code assumes ::uint32_t and float are the same size."); + float tmp_powder = this->_internal_powder(); + ::uint32_t raw_powder; + memcpy(&raw_powder, &tmp_powder, sizeof(tmp_powder)); + if (raw_powder != 0) { + total_size += 5; + } + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } @@ -890,6 +974,20 @@ void ParamInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::p if (from._internal_isshow() != 0) { _this->_internal_set_isshow(from._internal_isshow()); } + if (from._internal_startlayer() != 0) { + _this->_internal_set_startlayer(from._internal_startlayer()); + } + if (from._internal_endlayer() != 0) { + _this->_internal_set_endlayer(from._internal_endlayer()); + } + static_assert(sizeof(::uint32_t) == sizeof(float), + "Code assumes ::uint32_t and float are the same size."); + float tmp_powder = from._internal_powder(); + ::uint32_t raw_powder; + memcpy(&raw_powder, &tmp_powder, sizeof(tmp_powder)); + if (raw_powder != 0) { + _this->_internal_set_powder(from._internal_powder()); + } _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); } @@ -916,8 +1014,8 @@ void ParamInfo::InternalSwap(ParamInfo* other) { ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.context_, lhs_arena, &other->_impl_.context_, rhs_arena); ::google::protobuf::internal::memswap< - PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_) - + sizeof(ParamInfo::_impl_.isshow_) + PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.powder_) + + sizeof(ParamInfo::_impl_.powder_) - PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.valuetype_)>( reinterpret_cast(&_impl_.valuetype_), reinterpret_cast(&other->_impl_.valuetype_)); diff --git a/PrintS/protobuf/stream.pb.h b/PrintS/protobuf/stream.pb.h index 50f06fd..4fd7990 100644 --- a/PrintS/protobuf/stream.pb.h +++ b/PrintS/protobuf/stream.pb.h @@ -315,6 +315,9 @@ class ParamInfo final : kIsEnableFieldNumber = 5, kIsAlarmFieldNumber = 6, kIsShowFieldNumber = 7, + kStartLayerFieldNumber = 8, + kEndLayerFieldNumber = 9, + kPowderFieldNumber = 10, }; // bytes nameKey = 1; void clear_namekey() ; @@ -403,13 +406,43 @@ class ParamInfo final : bool _internal_isshow() const; void _internal_set_isshow(bool value); + public: + // int32 startLayer = 8; + void clear_startlayer() ; + ::int32_t startlayer() const; + void set_startlayer(::int32_t value); + + private: + ::int32_t _internal_startlayer() const; + void _internal_set_startlayer(::int32_t value); + + public: + // int32 endLayer = 9; + void clear_endlayer() ; + ::int32_t endlayer() const; + void set_endlayer(::int32_t value); + + private: + ::int32_t _internal_endlayer() const; + void _internal_set_endlayer(::int32_t value); + + public: + // float powder = 10; + void clear_powder() ; + float powder() const; + void set_powder(float value); + + private: + float _internal_powder() const; + void _internal_set_powder(float value); + public: // @@protoc_insertion_point(class_scope:stream.ParamInfo) private: class _Internal; friend class ::google::protobuf::internal::TcParser; - static const ::google::protobuf::internal::TcParseTable<3, 7, 0, 0, 2> _table_; + static const ::google::protobuf::internal::TcParseTable<4, 10, 0, 0, 2> _table_; template friend class ::google::protobuf::Arena::InternalHelper; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; @@ -421,6 +454,9 @@ class ParamInfo final : bool isenable_; bool isalarm_; bool isshow_; + ::int32_t startlayer_; + ::int32_t endlayer_; + float powder_; mutable ::google::protobuf::internal::CachedSize _cached_size_; PROTOBUF_TSAN_DECLARE_MEMBER }; @@ -2771,6 +2807,72 @@ inline void ParamInfo::_internal_set_isshow(bool value) { _impl_.isshow_ = value; } +// int32 startLayer = 8; +inline void ParamInfo::clear_startlayer() { + _impl_.startlayer_ = 0; +} +inline ::int32_t ParamInfo::startlayer() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.startLayer) + return _internal_startlayer(); +} +inline void ParamInfo::set_startlayer(::int32_t value) { + _internal_set_startlayer(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.startLayer) +} +inline ::int32_t ParamInfo::_internal_startlayer() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.startlayer_; +} +inline void ParamInfo::_internal_set_startlayer(::int32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.startlayer_ = value; +} + +// int32 endLayer = 9; +inline void ParamInfo::clear_endlayer() { + _impl_.endlayer_ = 0; +} +inline ::int32_t ParamInfo::endlayer() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.endLayer) + return _internal_endlayer(); +} +inline void ParamInfo::set_endlayer(::int32_t value) { + _internal_set_endlayer(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.endLayer) +} +inline ::int32_t ParamInfo::_internal_endlayer() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.endlayer_; +} +inline void ParamInfo::_internal_set_endlayer(::int32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.endlayer_ = value; +} + +// float powder = 10; +inline void ParamInfo::clear_powder() { + _impl_.powder_ = 0; +} +inline float ParamInfo::powder() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.powder) + return _internal_powder(); +} +inline void ParamInfo::set_powder(float value) { + _internal_set_powder(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.powder) +} +inline float ParamInfo::_internal_powder() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.powder_; +} +inline void ParamInfo::_internal_set_powder(float value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.powder_ = value; +} + // ------------------------------------------------------------------- // RequestInfo diff --git a/PrintS/protobuf/stream.proto b/PrintS/protobuf/stream.proto index 6a1d0a3..bd2e304 100644 --- a/PrintS/protobuf/stream.proto +++ b/PrintS/protobuf/stream.proto @@ -44,6 +44,10 @@ message ParamInfo{ bool isEnable = 5; bool isAlarm = 6; bool isShow = 7; + + int32 startLayer = 8; //层供粉量配置使用 struct PowderSet + int32 endLayer = 9; + float powder = 10; } message RequestInfo { //读 diff --git a/TestClient/DataManage/DataHandle.cpp b/TestClient/DataManage/DataHandle.cpp index d08f40d..f237791 100644 --- a/TestClient/DataManage/DataHandle.cpp +++ b/TestClient/DataManage/DataHandle.cpp @@ -83,9 +83,12 @@ void DataHandle::PrintValue(const ReadData& msg){ it->nameKey; string valueType = m_dataTypeMp[(*it).valueType]; if (msg.dataType >= STOPALARMCFGPARAM && msg.dataType <= WARNALARMCFGPARAM) { - printf("接收:dataType:%d,nameKey:%*s, strvalue:%*s, valueType:%s,content:%s,isEnable:%d,isAlarm:%d,isShow:%d\n", - msg.dataType, 33, it->nameKey.data(), 13, it->strValue.data(), valueType.data(), - it->content.c_str(), it->isEnable, it->isAlarm, it->isShow); + printf("接收:dataType:%d,nameKey:%*s, content:%s,isEnable:%d,isAlarm:%d,isShow:%d\n", + msg.dataType, 33, it->nameKey.data(), it->content.c_str(), it->isEnable, it->isAlarm, it->isShow); + } + else if (msg.dataType == POWDERSETPARAM) { + printf("接收:dataType:%d,startLayer:%d,endLayer:%d,powder:%.2f\n", + msg.dataType,it->start_layer, it->end_layer, it->powder); } else { printf("接收:dataType:%d,nameKey:%*s, strvalue:%*s, valueType:%s\n", @@ -181,18 +184,19 @@ void DataHandle::ParamReadUsage() { printf(" 36: " COLOR_YELLOW "print stopalarm cfg param data...\n" COLOR_RESET); printf(" 37: " COLOR_YELLOW "print pausealarm cfg param data...\n" COLOR_RESET); printf(" 38: " COLOR_YELLOW "print warnalarm cfg param data...\n" COLOR_RESET); + printf(" 39: " COLOR_YELLOW "print powder cfg param data...\n" COLOR_RESET); - printf(" 39: " COLOR_YELLOW "print moldcfg param data...\n" COLOR_RESET); - printf(" 40: " COLOR_YELLOW "print loadcfg param data...\n" COLOR_RESET); - printf(" 41: " COLOR_YELLOW "print armcfgparam data...\n" COLOR_RESET); - printf(" 42: " COLOR_YELLOW "print supplycfgparam data...\n" COLOR_RESET); - printf(" 43: " COLOR_YELLOW "print cleancfgparam data...\n" COLOR_RESET); - printf(" 44: " COLOR_YELLOW "print elecfgparam data...\n" COLOR_RESET); - printf(" 45: " COLOR_YELLOW "print loadparamrsp data...\n" COLOR_RESET); - printf(" 46: " COLOR_YELLOW "print scan ctrl state data...\n" COLOR_RESET); - printf(" 47: " COLOR_YELLOW "print scan ctrl Param data...\n" COLOR_RESET); - printf(" 48: " COLOR_YELLOW "print xy scan state data...\n" COLOR_RESET); - printf(" 49: " COLOR_YELLOW "print camera param data...\n" COLOR_RESET); + printf(" 40: " COLOR_YELLOW "print moldcfg param data...\n" COLOR_RESET); + printf(" 41: " COLOR_YELLOW "print loadcfg param data...\n" COLOR_RESET); + printf(" 42: " COLOR_YELLOW "print armcfgparam data...\n" COLOR_RESET); + printf(" 43: " COLOR_YELLOW "print supplycfgparam data...\n" COLOR_RESET); + printf(" 44: " COLOR_YELLOW "print cleancfgparam data...\n" COLOR_RESET); + printf(" 45: " COLOR_YELLOW "print elecfgparam data...\n" COLOR_RESET); + printf(" 46: " COLOR_YELLOW "print loadparamrsp data...\n" COLOR_RESET); + printf(" 47: " COLOR_YELLOW "print scan ctrl state data...\n" COLOR_RESET); + printf(" 48: " COLOR_YELLOW "print scan ctrl Param data...\n" COLOR_RESET); + printf(" 49: " COLOR_YELLOW "print xy scan state data...\n" COLOR_RESET); + printf(" 50: " COLOR_YELLOW "print camera param data...\n" COLOR_RESET); } int DataHandle::Request(int index) { @@ -287,7 +291,7 @@ void DataHandle::ParamRequest(int index) { //选择一个参数更新到服务 void DataHandle::UpdateParam(const string& input) { - + WriteData writeData; int index = ConverType::TryToI(input.substr(5)); switch (index) { case PARAMLIMITCFGPARAM: @@ -329,6 +333,11 @@ void DataHandle::UpdateParam(const string& input) { case WARNALARMCFGPARAM: //AlarmCfgWrapper warn参数 PushMsg(ALARMCFG, "SupplyPipeBlockWarn", to_string(0), iINT); break; + case POWDERSETPARAM: //PowderSet参数 + writeData = WriteData{ POWDERSET, "", "", UNKNOW,TOTAL }; + writeData.items.emplace_back(Item{"","",UNKNOW,"",0,0,0,1,100,2}); + PushMsg(writeData); + break; case ELECFGPARAM: break; case LOADPARAMRSP: diff --git a/TestClient/DataManage/RWData.h b/TestClient/DataManage/RWData.h index c01d057..55bf19f 100644 --- a/TestClient/DataManage/RWData.h +++ b/TestClient/DataManage/RWData.h @@ -50,6 +50,7 @@ enum READTYPE { STOPALARMCFGPARAM, //AlarmCfgWrapper stop参数 PAUSEALARMCFGPARAM, //AlarmCfgWrapper pause参数 WARNALARMCFGPARAM, //AlarmCfgWrapper warn参数 + POWDERSETPARAM, //PowderSet 参数 MOLDCFGPARAM, LOADCFGPARAM, @@ -97,6 +98,11 @@ struct Item { bool isEnable; bool isAlarm; bool isShow; + + //层供粉量配置使用 struct PowderSet + int start_layer; + int end_layer; + float powder; }; struct ReadData { @@ -138,6 +144,7 @@ enum WRITETYPE { POWDERESTIMATECFG, COMMUNICATIONCFG, ALARMCFG, + POWDERSET, LOADPARAM, //装载参数 SCANCTRLFUNC, //振镜控制函数 @@ -149,6 +156,7 @@ enum DATAHANDLE { UPDATE = 0, ADD = 1, DEL = 2, + TOTAL, //发全量信息 }; struct WriteData { diff --git a/TestClient/DataManage/StreamClient.cpp b/TestClient/DataManage/StreamClient.cpp index c66f37c..cb308d6 100644 --- a/TestClient/DataManage/StreamClient.cpp +++ b/TestClient/DataManage/StreamClient.cpp @@ -74,7 +74,8 @@ void StreamClient::AllStream() { for (const ::stream::ParamInfo& it : readInfo.item()) { readData.its.emplace_back(Item{ it.namekey(),it.strvalue(),(DATATYPE)it.valuetype() - ,it.context(),it.isenable(),it.isalarm(),it.isshow()}); + ,it.context(),it.isenable(),it.isalarm(),it.isshow() + ,it.startlayer(),it.endlayer(),it.powder() }); //printf("接收到服务端消息:dataType:%d,nameKey:%s, strvalue:%s,valueType:%d\n", // readData.dataType, it.namekey().data(), it.strvalue().c_str(), it.valuetype()); } @@ -102,6 +103,10 @@ void StreamClient::AllStream() { paramInfo->set_namekey((*wd).nameKey); paramInfo->set_strvalue((*wd).strValue); paramInfo->set_valuetype((stream::TYPE)(*wd).valueType); + + paramInfo->set_startlayer((*wd).start_layer); + paramInfo->set_endlayer((*wd).end_layer); + paramInfo->set_powder((*wd).powder); } stream->Write(request); diff --git a/TestClient/protobuf/stream.pb.cc b/TestClient/protobuf/stream.pb.cc index 2cc1ee5..4f1ed96 100644 --- a/TestClient/protobuf/stream.pb.cc +++ b/TestClient/protobuf/stream.pb.cc @@ -40,6 +40,9 @@ PROTOBUF_CONSTEXPR ParamInfo::ParamInfo(::_pbi::ConstantInitialized) /*decltype(_impl_.isenable_)*/ false, /*decltype(_impl_.isalarm_)*/ false, /*decltype(_impl_.isshow_)*/ false, + /*decltype(_impl_.startlayer_)*/ 0, + /*decltype(_impl_.endlayer_)*/ 0, + /*decltype(_impl_.powder_)*/ 0, /*decltype(_impl_._cached_size_)*/ {}, } {} struct ParamInfoDefaultTypeInternal { @@ -283,6 +286,9 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isenable_), PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isalarm_), PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isshow_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.startlayer_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.endlayer_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.powder_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::stream::RequestInfo, _internal_metadata_), ~0u, // no _extensions_ @@ -411,17 +417,17 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { {0, -1, -1, sizeof(::stream::ParamInfo)}, - {15, -1, -1, sizeof(::stream::RequestInfo)}, - {29, -1, -1, sizeof(::stream::ResponseInfo)}, - {40, 49, -1, sizeof(::stream::ResponseAny)}, - {50, -1, -1, sizeof(::stream::LayerData)}, - {63, -1, -1, sizeof(::stream::LayerDataBlock)}, - {77, -1, -1, sizeof(::stream::VectorDataBlock)}, - {89, -1, -1, sizeof(::stream::ChainDataBlock)}, - {99, -1, -1, sizeof(::stream::Point)}, - {109, -1, -1, sizeof(::stream::RegResponce)}, - {118, -1, -1, sizeof(::stream::ImgInfoResponce)}, - {129, -1, -1, sizeof(::stream::ComResponce)}, + {18, -1, -1, sizeof(::stream::RequestInfo)}, + {32, -1, -1, sizeof(::stream::ResponseInfo)}, + {43, 52, -1, sizeof(::stream::ResponseAny)}, + {53, -1, -1, sizeof(::stream::LayerData)}, + {66, -1, -1, sizeof(::stream::LayerDataBlock)}, + {80, -1, -1, sizeof(::stream::VectorDataBlock)}, + {92, -1, -1, sizeof(::stream::ChainDataBlock)}, + {102, -1, -1, sizeof(::stream::Point)}, + {112, -1, -1, sizeof(::stream::RegResponce)}, + {121, -1, -1, sizeof(::stream::ImgInfoResponce)}, + {132, -1, -1, sizeof(::stream::ComResponce)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -440,47 +446,48 @@ static const ::_pb::Message* const file_default_instances[] = { }; const char descriptor_table_protodef_stream_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { "\n\014stream.proto\022\006stream\032\031google/protobuf/" - "any.proto\"\223\001\n\tParamInfo\022\017\n\007nameKey\030\001 \001(\014" + "any.proto\"\311\001\n\tParamInfo\022\017\n\007nameKey\030\001 \001(\014" "\022\020\n\010strValue\030\002 \001(\014\022\037\n\tvalueType\030\003 \001(\0162\014." "stream.TYPE\022\017\n\007context\030\004 \001(\014\022\020\n\010isEnable" - "\030\005 \001(\010\022\017\n\007isAlarm\030\006 \001(\010\022\016\n\006isShow\030\007 \001(\010\"" - "\254\001\n\013RequestInfo\022\020\n\010dataType\030\001 \001(\r\022\017\n\007nam" - "eKey\030\002 \001(\014\022\020\n\010strValue\030\003 \001(\014\022\037\n\tvalueTyp" - "e\030\004 \001(\0162\014.stream.TYPE\022&\n\nhandleType\030\005 \001(" - "\0162\022.stream.DATAHANDLE\022\037\n\004item\030\006 \003(\0132\021.st" - "ream.ParamInfo\"Q\n\014ResponseInfo\022\020\n\010dataTy" - "pe\030\001 \001(\r\022\016\n\006result\030\002 \001(\010\022\037\n\004item\030\003 \003(\0132\021" - ".stream.ParamInfo\"1\n\013ResponseAny\022\"\n\004data" - "\030\001 \001(\0132\024.google.protobuf.Any\"\210\001\n\tLayerDa" - "ta\022\023\n\013zCooldinate\030\001 \001(\002\022\016\n\006powder\030\002 \001(\002\022" - "\026\n\016layerThickness\030\003 \001(\002\022.\n\016layerDataBloc" - "k\030\004 \003(\0132\026.stream.LayerDataBlock\022\016\n\006resul" - "t\030\005 \001(\010\"\266\001\n\016LayerDataBlock\022\021\n\telementId\030" - "\001 \001(\005\022\026\n\016elementParamId\030\002 \001(\005\022\021\n\tblockTy" - "pe\030\003 \001(\r\022*\n\tvecBlocks\030\004 \003(\0132\027.stream.Vec" - "torDataBlock\022+\n\013chainBlocks\030\005 \003(\0132\026.stre" - "am.ChainDataBlock\022\r\n\005order\030\006 \001(\r\"M\n\017Vect" - "orDataBlock\022\016\n\006startX\030\001 \001(\002\022\016\n\006startY\030\002 " - "\001(\002\022\014\n\004endX\030\003 \001(\002\022\014\n\004endY\030\004 \001(\002\"A\n\016Chain" - "DataBlock\022\016\n\006dotNum\030\001 \001(\r\022\037\n\010pointVec\030\002 " - "\003(\0132\r.stream.Point\"#\n\005Point\022\014\n\004xPos\030\001 \001(" - "\002\022\014\n\004yPos\030\002 \001(\002\"\033\n\013RegResponce\022\014\n\004data\030\001" - " \001(\005\"D\n\017ImgInfoResponce\022\022\n\nlevelImage\030\001 " - "\001(\r\022\r\n\005width\030\002 \001(\005\022\016\n\006height\030\003 \001(\005\"\033\n\013Co" - "mResponce\022\014\n\004data\030\001 \001(\014*\223\001\n\004TYPE\022\t\n\005iBOO" - "L\020\000\022\n\n\006iSHORT\020\001\022\013\n\007iUSHORT\020\002\022\010\n\004iINT\020\003\022\t" - "\n\005iUINT\020\004\022\n\n\006iFLOAT\020\005\022\013\n\007iSTRING\020\006\022\t\n\005iC" - "HAR\020\007\022\n\n\006iUCHAR\020\010\022\t\n\005iWORD\020\t\022\013\n\007iDOUBLE\020" - "\n\022\n\n\006iTIMET\020\013**\n\nDATAHANDLE\022\n\n\006UPDATE\020\000\022" - "\007\n\003ADD\020\001\022\007\n\003DEL\020\0022\372\001\n\006Stream\0224\n\006Simple\022\023" - ".stream.RequestInfo\032\023.stream.ResponseAny" - "\"\000\022=\n\014ServerStream\022\023.stream.RequestInfo\032" - "\024.stream.ResponseInfo\"\0000\001\022=\n\014ClientStrea" - "m\022\023.stream.RequestInfo\032\024.stream.Response" - "Info\"\000(\001\022<\n\tAllStream\022\023.stream.RequestIn" - "fo\032\024.stream.ResponseInfo\"\000(\0010\001B-\n\027io.grp" - "c.examples.streamB\013StreamProtoP\001\242\002\002STb\006p" - "roto3" + "\030\005 \001(\010\022\017\n\007isAlarm\030\006 \001(\010\022\016\n\006isShow\030\007 \001(\010\022" + "\022\n\nstartLayer\030\010 \001(\005\022\020\n\010endLayer\030\t \001(\005\022\016\n" + "\006powder\030\n \001(\002\"\254\001\n\013RequestInfo\022\020\n\010dataTyp" + "e\030\001 \001(\r\022\017\n\007nameKey\030\002 \001(\014\022\020\n\010strValue\030\003 \001" + "(\014\022\037\n\tvalueType\030\004 \001(\0162\014.stream.TYPE\022&\n\nh" + "andleType\030\005 \001(\0162\022.stream.DATAHANDLE\022\037\n\004i" + "tem\030\006 \003(\0132\021.stream.ParamInfo\"Q\n\014Response" + "Info\022\020\n\010dataType\030\001 \001(\r\022\016\n\006result\030\002 \001(\010\022\037" + "\n\004item\030\003 \003(\0132\021.stream.ParamInfo\"1\n\013Respo" + "nseAny\022\"\n\004data\030\001 \001(\0132\024.google.protobuf.A" + "ny\"\210\001\n\tLayerData\022\023\n\013zCooldinate\030\001 \001(\002\022\016\n" + "\006powder\030\002 \001(\002\022\026\n\016layerThickness\030\003 \001(\002\022.\n" + "\016layerDataBlock\030\004 \003(\0132\026.stream.LayerData" + "Block\022\016\n\006result\030\005 \001(\010\"\266\001\n\016LayerDataBlock" + "\022\021\n\telementId\030\001 \001(\005\022\026\n\016elementParamId\030\002 " + "\001(\005\022\021\n\tblockType\030\003 \001(\r\022*\n\tvecBlocks\030\004 \003(" + "\0132\027.stream.VectorDataBlock\022+\n\013chainBlock" + "s\030\005 \003(\0132\026.stream.ChainDataBlock\022\r\n\005order" + "\030\006 \001(\r\"M\n\017VectorDataBlock\022\016\n\006startX\030\001 \001(" + "\002\022\016\n\006startY\030\002 \001(\002\022\014\n\004endX\030\003 \001(\002\022\014\n\004endY\030" + "\004 \001(\002\"A\n\016ChainDataBlock\022\016\n\006dotNum\030\001 \001(\r\022" + "\037\n\010pointVec\030\002 \003(\0132\r.stream.Point\"#\n\005Poin" + "t\022\014\n\004xPos\030\001 \001(\002\022\014\n\004yPos\030\002 \001(\002\"\033\n\013RegResp" + "once\022\014\n\004data\030\001 \001(\005\"D\n\017ImgInfoResponce\022\022\n" + "\nlevelImage\030\001 \001(\r\022\r\n\005width\030\002 \001(\005\022\016\n\006heig" + "ht\030\003 \001(\005\"\033\n\013ComResponce\022\014\n\004data\030\001 \001(\014*\223\001" + "\n\004TYPE\022\t\n\005iBOOL\020\000\022\n\n\006iSHORT\020\001\022\013\n\007iUSHORT" + "\020\002\022\010\n\004iINT\020\003\022\t\n\005iUINT\020\004\022\n\n\006iFLOAT\020\005\022\013\n\007i" + "STRING\020\006\022\t\n\005iCHAR\020\007\022\n\n\006iUCHAR\020\010\022\t\n\005iWORD" + "\020\t\022\013\n\007iDOUBLE\020\n\022\n\n\006iTIMET\020\013**\n\nDATAHANDL" + "E\022\n\n\006UPDATE\020\000\022\007\n\003ADD\020\001\022\007\n\003DEL\020\0022\372\001\n\006Stre" + "am\0224\n\006Simple\022\023.stream.RequestInfo\032\023.stre" + "am.ResponseAny\"\000\022=\n\014ServerStream\022\023.strea" + "m.RequestInfo\032\024.stream.ResponseInfo\"\0000\001\022" + "=\n\014ClientStream\022\023.stream.RequestInfo\032\024.s" + "tream.ResponseInfo\"\000(\001\022<\n\tAllStream\022\023.st" + "ream.RequestInfo\032\024.stream.ResponseInfo\"\000" + "(\0010\001B-\n\027io.grpc.examples.streamB\013StreamP" + "rotoP\001\242\002\002STb\006proto3" }; static const ::_pbi::DescriptorTable* const descriptor_table_stream_2eproto_deps[1] = { @@ -490,7 +497,7 @@ static ::absl::once_flag descriptor_table_stream_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_stream_2eproto = { false, false, - 1645, + 1699, descriptor_table_protodef_stream_2eproto, "stream.proto", &descriptor_table_stream_2eproto_once, @@ -582,6 +589,9 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { decltype(_impl_.isenable_){}, decltype(_impl_.isalarm_){}, decltype(_impl_.isshow_){}, + decltype(_impl_.startlayer_){}, + decltype(_impl_.endlayer_){}, + decltype(_impl_.powder_){}, /*decltype(_impl_._cached_size_)*/ {}, }; _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( @@ -608,8 +618,8 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { _this->_impl_.context_.Set(from._internal_context(), _this->GetArenaForAllocation()); } ::memcpy(&_impl_.valuetype_, &from._impl_.valuetype_, - static_cast<::size_t>(reinterpret_cast(&_impl_.isshow_) - - reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.isshow_)); + static_cast<::size_t>(reinterpret_cast(&_impl_.powder_) - + reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.powder_)); // @@protoc_insertion_point(copy_constructor:stream.ParamInfo) } @@ -623,6 +633,9 @@ inline void ParamInfo::SharedCtor(::_pb::Arena* arena) { decltype(_impl_.isenable_){false}, decltype(_impl_.isalarm_){false}, decltype(_impl_.isshow_){false}, + decltype(_impl_.startlayer_){0}, + decltype(_impl_.endlayer_){0}, + decltype(_impl_.powder_){0}, /*decltype(_impl_._cached_size_)*/ {}, }; _impl_.namekey_.InitDefault(); @@ -663,8 +676,8 @@ PROTOBUF_NOINLINE void ParamInfo::Clear() { _impl_.strvalue_.ClearToEmpty(); _impl_.context_.ClearToEmpty(); ::memset(&_impl_.valuetype_, 0, static_cast<::size_t>( - reinterpret_cast(&_impl_.isshow_) - - reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.isshow_)); + reinterpret_cast(&_impl_.powder_) - + reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.powder_)); _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); } @@ -676,15 +689,15 @@ const char* ParamInfo::_InternalParse( PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { +const ::_pbi::TcParseTable<4, 10, 0, 0, 2> ParamInfo::_table_ = { { 0, // no _has_bits_ 0, // no _extensions_ - 7, 56, // max_field_number, fast_idx_mask + 10, 120, // max_field_number, fast_idx_mask offsetof(decltype(_table_), field_lookup_table), - 4294967168, // skipmap + 4294966272, // skipmap offsetof(decltype(_table_), field_entries), - 7, // num_field_entries + 10, // num_field_entries 0, // num_aux_entries offsetof(decltype(_table_), field_names), // no aux_entries &_ParamInfo_default_instance_._instance, @@ -712,6 +725,20 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { // bool isShow = 7; {::_pbi::TcParser::SingularVarintNoZag1(), {56, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_)}}, + // int32 startLayer = 8; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(ParamInfo, _impl_.startlayer_), 63>(), + {64, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.startlayer_)}}, + // int32 endLayer = 9; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(ParamInfo, _impl_.endlayer_), 63>(), + {72, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.endlayer_)}}, + // float powder = 10; + {::_pbi::TcParser::FastF32S1, + {85, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.powder_)}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, }}, {{ 65535, 65535 }}, {{ @@ -736,6 +763,15 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { // bool isShow = 7; {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_), 0, 0, (0 | ::_fl::kFcSingular | ::_fl::kBool)}, + // int32 startLayer = 8; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.startlayer_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kInt32)}, + // int32 endLayer = 9; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.endlayer_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kInt32)}, + // float powder = 10; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.powder_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kFloat)}, }}, // no aux_entries {{ @@ -795,6 +831,32 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { 7, this->_internal_isshow(), target); } + // int32 startLayer = 8; + if (this->_internal_startlayer() != 0) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArrayWithField<8>( + stream, this->_internal_startlayer(), target); + } + + // int32 endLayer = 9; + if (this->_internal_endlayer() != 0) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArrayWithField<9>( + stream, this->_internal_endlayer(), target); + } + + // float powder = 10; + static_assert(sizeof(::uint32_t) == sizeof(float), + "Code assumes ::uint32_t and float are the same size."); + float tmp_powder = this->_internal_powder(); + ::uint32_t raw_powder; + memcpy(&raw_powder, &tmp_powder, sizeof(tmp_powder)); + if (raw_powder != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteFloatToArray( + 10, this->_internal_powder(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( @@ -851,6 +913,28 @@ const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { total_size += 2; } + // int32 startLayer = 8; + if (this->_internal_startlayer() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne( + this->_internal_startlayer()); + } + + // int32 endLayer = 9; + if (this->_internal_endlayer() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne( + this->_internal_endlayer()); + } + + // float powder = 10; + static_assert(sizeof(::uint32_t) == sizeof(float), + "Code assumes ::uint32_t and float are the same size."); + float tmp_powder = this->_internal_powder(); + ::uint32_t raw_powder; + memcpy(&raw_powder, &tmp_powder, sizeof(tmp_powder)); + if (raw_powder != 0) { + total_size += 5; + } + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } @@ -890,6 +974,20 @@ void ParamInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::p if (from._internal_isshow() != 0) { _this->_internal_set_isshow(from._internal_isshow()); } + if (from._internal_startlayer() != 0) { + _this->_internal_set_startlayer(from._internal_startlayer()); + } + if (from._internal_endlayer() != 0) { + _this->_internal_set_endlayer(from._internal_endlayer()); + } + static_assert(sizeof(::uint32_t) == sizeof(float), + "Code assumes ::uint32_t and float are the same size."); + float tmp_powder = from._internal_powder(); + ::uint32_t raw_powder; + memcpy(&raw_powder, &tmp_powder, sizeof(tmp_powder)); + if (raw_powder != 0) { + _this->_internal_set_powder(from._internal_powder()); + } _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); } @@ -916,8 +1014,8 @@ void ParamInfo::InternalSwap(ParamInfo* other) { ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.context_, lhs_arena, &other->_impl_.context_, rhs_arena); ::google::protobuf::internal::memswap< - PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_) - + sizeof(ParamInfo::_impl_.isshow_) + PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.powder_) + + sizeof(ParamInfo::_impl_.powder_) - PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.valuetype_)>( reinterpret_cast(&_impl_.valuetype_), reinterpret_cast(&other->_impl_.valuetype_)); diff --git a/TestClient/protobuf/stream.pb.h b/TestClient/protobuf/stream.pb.h index 50f06fd..4fd7990 100644 --- a/TestClient/protobuf/stream.pb.h +++ b/TestClient/protobuf/stream.pb.h @@ -315,6 +315,9 @@ class ParamInfo final : kIsEnableFieldNumber = 5, kIsAlarmFieldNumber = 6, kIsShowFieldNumber = 7, + kStartLayerFieldNumber = 8, + kEndLayerFieldNumber = 9, + kPowderFieldNumber = 10, }; // bytes nameKey = 1; void clear_namekey() ; @@ -403,13 +406,43 @@ class ParamInfo final : bool _internal_isshow() const; void _internal_set_isshow(bool value); + public: + // int32 startLayer = 8; + void clear_startlayer() ; + ::int32_t startlayer() const; + void set_startlayer(::int32_t value); + + private: + ::int32_t _internal_startlayer() const; + void _internal_set_startlayer(::int32_t value); + + public: + // int32 endLayer = 9; + void clear_endlayer() ; + ::int32_t endlayer() const; + void set_endlayer(::int32_t value); + + private: + ::int32_t _internal_endlayer() const; + void _internal_set_endlayer(::int32_t value); + + public: + // float powder = 10; + void clear_powder() ; + float powder() const; + void set_powder(float value); + + private: + float _internal_powder() const; + void _internal_set_powder(float value); + public: // @@protoc_insertion_point(class_scope:stream.ParamInfo) private: class _Internal; friend class ::google::protobuf::internal::TcParser; - static const ::google::protobuf::internal::TcParseTable<3, 7, 0, 0, 2> _table_; + static const ::google::protobuf::internal::TcParseTable<4, 10, 0, 0, 2> _table_; template friend class ::google::protobuf::Arena::InternalHelper; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; @@ -421,6 +454,9 @@ class ParamInfo final : bool isenable_; bool isalarm_; bool isshow_; + ::int32_t startlayer_; + ::int32_t endlayer_; + float powder_; mutable ::google::protobuf::internal::CachedSize _cached_size_; PROTOBUF_TSAN_DECLARE_MEMBER }; @@ -2771,6 +2807,72 @@ inline void ParamInfo::_internal_set_isshow(bool value) { _impl_.isshow_ = value; } +// int32 startLayer = 8; +inline void ParamInfo::clear_startlayer() { + _impl_.startlayer_ = 0; +} +inline ::int32_t ParamInfo::startlayer() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.startLayer) + return _internal_startlayer(); +} +inline void ParamInfo::set_startlayer(::int32_t value) { + _internal_set_startlayer(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.startLayer) +} +inline ::int32_t ParamInfo::_internal_startlayer() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.startlayer_; +} +inline void ParamInfo::_internal_set_startlayer(::int32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.startlayer_ = value; +} + +// int32 endLayer = 9; +inline void ParamInfo::clear_endlayer() { + _impl_.endlayer_ = 0; +} +inline ::int32_t ParamInfo::endlayer() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.endLayer) + return _internal_endlayer(); +} +inline void ParamInfo::set_endlayer(::int32_t value) { + _internal_set_endlayer(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.endLayer) +} +inline ::int32_t ParamInfo::_internal_endlayer() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.endlayer_; +} +inline void ParamInfo::_internal_set_endlayer(::int32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.endlayer_ = value; +} + +// float powder = 10; +inline void ParamInfo::clear_powder() { + _impl_.powder_ = 0; +} +inline float ParamInfo::powder() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.powder) + return _internal_powder(); +} +inline void ParamInfo::set_powder(float value) { + _internal_set_powder(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.powder) +} +inline float ParamInfo::_internal_powder() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.powder_; +} +inline void ParamInfo::_internal_set_powder(float value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.powder_ = value; +} + // ------------------------------------------------------------------- // RequestInfo diff --git a/TestClient/protobuf/stream.proto b/TestClient/protobuf/stream.proto index 6a1d0a3..f9108a4 100644 --- a/TestClient/protobuf/stream.proto +++ b/TestClient/protobuf/stream.proto @@ -37,13 +37,17 @@ enum DATAHANDLE { message ParamInfo{ bytes nameKey = 1; //参数key - bytes strValue = 2; //value + bytes strValue = 2; //value TYPE valueType = 3; //数据类型 bytes context = 4; //alarmcfg 使用 bool isEnable = 5; bool isAlarm = 6; bool isShow = 7; + + int32 startLayer = 8; //层供粉量配置使用 struct PowderSet + int32 endLayer = 9; + float powder = 10; } message RequestInfo { //读