From 89ec22ec5837cfbc9845dd0096402c31d001377d Mon Sep 17 00:00:00 2001 From: wangxx1809 Date: Tue, 4 Jun 2024 17:49:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrintS/Config/ConfigManager.cpp | 60 +++++- PrintS/Config/ConfigManager.h | 15 +- PrintS/Config/bean/CommunicationCfg.cpp | 3 +- PrintS/Config/dao/CommunicationCfgDao.cpp | 2 +- PrintS/DataManage/DataHandle.cpp | 18 +- PrintS/DataManage/DataHandle.h | 4 +- PrintS/DataManage/StreamServer.cpp | 9 +- PrintS/DataManage/StreamServer.h | 2 +- PrintS/output/Release/config.hbd | Bin 262144 -> 262144 bytes PrintS/output/Release/log/2024.hbd | Bin 159744 -> 163840 bytes PrintS/protobuf/stream.pb.cc | 249 ++++++++++++++++++++-- PrintS/protobuf/stream.pb.h | 222 +++++++++++++++++++ PrintS/protobuf/stream.proto | 5 + TestClient/DataManage/DataHandle.cpp | 18 +- TestClient/DataManage/FunC.h | 4 + TestClient/DataManage/StreamClient.cpp | 8 + TestClient/PrintC.vcxproj.filters | 6 +- TestClient/protobuf/stream.pb.cc | 249 ++++++++++++++++++++-- TestClient/protobuf/stream.pb.h | 222 +++++++++++++++++++ TestClient/protobuf/stream.proto | 9 +- TestClient/问题记录.txt | 14 +- 21 files changed, 1052 insertions(+), 67 deletions(-) diff --git a/PrintS/Config/ConfigManager.cpp b/PrintS/Config/ConfigManager.cpp index 60d6c84..671767d 100644 --- a/PrintS/Config/ConfigManager.cpp +++ b/PrintS/Config/ConfigManager.cpp @@ -446,6 +446,20 @@ vector* ConfigManager::GetIOVersions(int machineid) return m_IOVersions[machineid]; } +string ConfigManager::GetIOVersionStrs(int machineid) { + if (m_IOVersions.find(machineid) == m_IOVersions.end()) { + return ""; + } + + string result; + auto start = m_IOVersions[machineid]->begin(); + while (start != m_IOVersions[machineid]->end()) { + result += (*start)->m_VersionCode; + ++start; + } + return result; +} + void ConfigManager::DeleteMachineIO() { char buffer[256]; @@ -491,7 +505,8 @@ void ConfigManager::SendCfgToClients() { m_EleCfg->SendToClients(ELECFGPARAM); } -void ConfigManager::CallFuncs(const ReadData& rd) { +void ConfigManager::CallFuncs(const ReadData& rd, const list& lst, ::stream::ResponseAny** response) { + stream::ComResponce result; ConfigFunc cfunc = (ConfigFunc)ConverType::TryToI(rd.nameKey); switch (cfunc) { @@ -503,6 +518,17 @@ void ConfigManager::CallFuncs(const ReadData& rd) { DeleteMachineIO(); break; case CONTROLRUN: ControlRun(rd.its); break; + case IOVERSIONSTR: + if (lst.front().nameKey == "index") { + result.set_data(GetIOVersionStrs(ConverType::TryToI(lst.front().strValue))); + (*response)->mutable_data()->PackFrom(result); + } + printf("IOVERSIONSTR responded...\n"); + break; + case REDTESTCFGSTART: + RedTestCfgStart(); break; + case REDTESTCFGSTOP: + RedTestCfgStop(); break; default: break; } @@ -537,8 +563,8 @@ void ConfigManager::UpdateCfg(const ReadData& rd) { case POWDERESTIMATECFG: m_PowderEstimateCfg.Update(rd,POWDERESTIMATECFGPARAM); break; case COMMUNICATIONCFG: - UpdateCommunicationCfg(rd); - break; + UpdateCommunicationCfg(rd); break; + default: break; } @@ -585,4 +611,30 @@ void ConfigManager::ControlRun(const list& its) { } } -} \ No newline at end of file +} + + +void ConfigManager::RedTestCfgStart() { + vector* laserCfg = ConfigManager::GetInstance()->GetMatchScannerControlCfg(); + for (size_t cIndex = 0; cIndex < laserCfg->size(); cIndex++) { + ScannerControlCfg* lcfg = (*laserCfg)[cIndex]; + if (lcfg->m_LaserEnable && lcfg->m_LaserEnable->IsActive()) { + lcfg->m_LaserEnable->SetActive(false); + } + + if (lcfg->m_LaserRed && !lcfg->m_LaserRed->IsActive()) { + lcfg->m_LaserRed->SetActive(true); + } + } +} + +void ConfigManager::RedTestCfgStop() { + vector* laserCfg = ConfigManager::GetInstance()->GetMatchScannerControlCfg(); + for (size_t lrIndex = 0; lrIndex < laserCfg->size(); lrIndex++) { + ScannerControlCfg* lcfg = (*laserCfg)[lrIndex]; + if (lcfg->m_LaserRed && lcfg->m_LaserRed->IsActive()) { + lcfg->m_LaserRed->SetActive(false); + } + } +} + diff --git a/PrintS/Config/ConfigManager.h b/PrintS/Config/ConfigManager.h index 48ce958..4836f99 100644 --- a/PrintS/Config/ConfigManager.h +++ b/PrintS/Config/ConfigManager.h @@ -43,6 +43,10 @@ enum ConfigFunc{ SAVEMACHINECONFIG, DELETEMACHINEIO, CONTROLRUN, + IOVERSIONSTR, + + REDTESTCFGSTART, //红光测试配置开始 + REDTESTCFGSTOP, //红光测试配置结束 }; @@ -77,7 +81,7 @@ public: UIShowCfg* GetUIShowCfg() { return &m_UIShowCfg; } //已传 IOCfgWrapper* GetIoCfgWrapper() { return m_IOCfgWrapper; } //已传 void DeleteMachineIO(); //已传 - vector* GetIOVersions(int machineid); //返回一个string, req-rsp模式 + vector* GetIOVersions(int machineid); //已传 改为函数 GetIOVersionStrs PowderEstimateCfg* GetPowderEstimateCfg() { return &m_PowderEstimateCfg; } //已传 map* GetCommunicationCfg() { return m_pCommunicationCfgDao->GetCommunicationCfg(); } //已传 @@ -101,7 +105,7 @@ public: //vector* GetLaserCfgs() { return &m_pLaserCfgDao->m_LaserCfgs; } map* GetScannerControlCfg() { return &m_ScannerControlCfgDao->m_ScannerControlCfgMap; } //传 vector* GetScannerControlCfgs() { return &m_ScannerControlCfgDao->m_ScannerControlCfgs; } //不传 - vector* GetMatchScannerControlCfg() { return &m_ScannerControlCfgDao->m_MatchCfg; } //添加一个函数,不用传 + vector* GetMatchScannerControlCfg() { return &m_ScannerControlCfgDao->m_MatchCfg; } //添加2个函数 已传 ScannerControlCfgDao* GetScannerControlCfgDao() { return m_ScannerControlCfgDao; } //不用 //vector *GetMatchLaser() { return &m_pLaserCfgDao->m_MatchLaser; } @@ -116,7 +120,7 @@ public: } void AddComRefCfg(CommunicationCfg* cfg, IConnect* ic) { m_ComRefCfg[cfg] = ic; } //不传 - map* GetComRefCfg() { return &m_ComRefCfg; } //传一个参数的函数功能 + map* GetComRefCfg() { return &m_ComRefCfg; } //已传 ControlRun // map* GetMitsubishiCfg() { return &m_MitsubishiCfgMap; } // map* GetSanyoCfg() { return &m_SanyoCfgMap; } @@ -129,7 +133,7 @@ public: void SendCfgToClients(); void UpdateCfg(const ReadData& rd); - void CallFuncs(const ReadData& rd); + void CallFuncs(const ReadData& rd, const list& lst = list(), ::stream::ResponseAny** response = nullptr); private: ConfigManager(const ConfigManager&) {}; ConfigManager& operator=(const ConfigManager&) {}; @@ -142,6 +146,9 @@ private: void ControlRun(const list& its); //控制模块启停 void UpdateCommunicationCfg(const ReadData& rd); //更新参数 + string GetIOVersionStrs(int machineid); //io版本 字符串返回 + void RedTestCfgStart(); + void RedTestCfgStop(); private: SQLite::Database* m_pDB; HbdLanguageDao* m_pHbdLanguageDao; diff --git a/PrintS/Config/bean/CommunicationCfg.cpp b/PrintS/Config/bean/CommunicationCfg.cpp index 6aadfef..21a2f3c 100644 --- a/PrintS/Config/bean/CommunicationCfg.cpp +++ b/PrintS/Config/bean/CommunicationCfg.cpp @@ -1,4 +1,5 @@ #include "CommunicationCfg.h" +#include "../utils/StringHelper.h" CommunicationCfg::CommunicationCfg() : m_MachineId(new IntData("MachineId", u8"", 0)) @@ -24,7 +25,7 @@ CommunicationCfg::CommunicationCfg() CommunicationCfg::CommunicationCfg(int mid, string cc, string name, const string& sContent, int type) : m_MachineId(new IntData("MachineId",u8"",mid)) - , m_ClientCode(new StrData("ClientCode",u8"",cc)) + , m_ClientCode(new StrData("ClientCode",u8"编码",cc)) , m_Name(new StrData("Name",u8"",name)) , m_Type(new IntData("Type",u8"",type)) , m_IP(new StrData("IP", u8"IP", "0.0.0.0")) diff --git a/PrintS/Config/dao/CommunicationCfgDao.cpp b/PrintS/Config/dao/CommunicationCfgDao.cpp index e298a12..e734449 100644 --- a/PrintS/Config/dao/CommunicationCfgDao.cpp +++ b/PrintS/Config/dao/CommunicationCfgDao.cpp @@ -39,7 +39,7 @@ void CommunicationCfgDao::InitBeforeFind(int mid) { CommunicationCfg* remote = new CommunicationCfg(mid, "REMOTE", u8"远控", _(u8"远控"), CommunicationCfg::TCP); remote->m_IP->SetValue("192.168.3.88"); - remote->m_Port ->SetValue( 12019); + remote->m_Port->SetValue(12019); remote->m_Interval->SetValue(500); remote->m_AlarmTimeoutTimes->SetValue(3); m_CommunicationCfgMap[remote->m_ClientCode->GetValueStr()] = remote; diff --git a/PrintS/DataManage/DataHandle.cpp b/PrintS/DataManage/DataHandle.cpp index 4a7ae90..586da9c 100644 --- a/PrintS/DataManage/DataHandle.cpp +++ b/PrintS/DataManage/DataHandle.cpp @@ -8,7 +8,7 @@ void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg, const std::l p->DataCallBackHandle(msg,its); } -void DataHandle::LayersDataCallBackProc(void* pthis,const ReadData& msg, ::stream::ResponseAny** response) { +void DataHandle::LayersDataCallBackProc(void* pthis,const ReadData& msg, const list& lst, ::stream::ResponseAny** response) { DataHandle* p = (DataHandle*)pthis; int index = atoi(msg.strValue.data()); @@ -23,6 +23,9 @@ void DataHandle::LayersDataCallBackProc(void* pthis,const ReadData& msg, ::strea else if ((READTYPE)msg.dataType == CAMERAFUNC) { p->m_controller->m_Camera->CallFunc(msg, response); } + else if ((READTYPE)msg.dataType == CONFIGFUNC) { + p->m_config->CallFuncs(msg, lst, response); + } } @@ -36,9 +39,6 @@ DataHandle::DataHandle() DataHandle::~DataHandle() { Stop(); - //m_testFlag = true; - //if (m_testTd.joinable()) m_testTd.join(); - DELP(m_streamServer); DELP(m_controller); } @@ -47,16 +47,6 @@ 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(); diff --git a/PrintS/DataManage/DataHandle.h b/PrintS/DataManage/DataHandle.h index 7dbf081..e1a5377 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, ::stream::ResponseAny** response); + typedef void (*LayersDataCallBack)(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,::stream::ResponseAny** response); + static void LayersDataCallBackProc(void* pthis, const ReadData& msg, const list& lst, ::stream::ResponseAny** response); private: //DataCallBack m_dataCallBack; //std::thread m_testTd; diff --git a/PrintS/DataManage/StreamServer.cpp b/PrintS/DataManage/StreamServer.cpp index 57a70cd..b13c70b 100644 --- a/PrintS/DataManage/StreamServer.cpp +++ b/PrintS/DataManage/StreamServer.cpp @@ -25,8 +25,15 @@ StreamServer::~StreamServer() { readData.nameKey = request->namekey(); readData.strValue = request->strvalue(); readData.valueType = (DATATYPE)request->valuetype(); + + + std::list paramLst; //函数参数 + for (const ::stream::ParamInfo it : request->item()) { + paramLst.emplace_back(Item{ it.namekey(),it.strvalue() ,(DATATYPE)it.valuetype() }); //直接加到readData.its上面,后续的请求无法收到,不知道为啥 + } + if (m_layerDataCallBack) - m_layerDataCallBack(m_handlePtr, readData, &response); + m_layerDataCallBack(m_handlePtr, readData, paramLst, &response); return Status::OK; } diff --git a/PrintS/DataManage/StreamServer.h b/PrintS/DataManage/StreamServer.h index 8091432..ba572c5 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, ::stream::ResponseAny** response); + typedef void (*LayerDataCallBack)(void* pthis, const ReadData& msg,const list& lst, ::stream::ResponseAny** response); public: diff --git a/PrintS/output/Release/config.hbd b/PrintS/output/Release/config.hbd index a3a9fb58f09d787283b0ce562a3a07dfd6179300..cf44242b2854893447a0aa7159887950e272c5bc 100644 GIT binary patch delta 24800 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 >h{n5xlTcsI`FBKSZ;pS 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 LL=rz#rmzE0qF6WM diff --git a/PrintS/output/Release/log/2024.hbd b/PrintS/output/Release/log/2024.hbd index 1ea65796c9287112e66bbb95f1cf4d0247c6631c..81d5a660a109a5a56d755d5ffc8afd3d49fd6fe9 100644 GIT binary patch delta 24785 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

RDKBiv|l5ld-A zznRqW1R(B2xYjE&O?h1V)_0v?jcM+rcEEbMMdhsxS{McrKhV^gVdm-~G+^L1o$O>) zTz^P-?JZ$e4`Q|TqEQ#3HXwHknOwHheiw1rH1_=+ai*@;;)m;DI)EF1vfOZNdl;NT zeVd4zICiMKSDahhD&bGSUJ?n`;eE5>_j(=L@0W2JWdZ*$XgRnKajsA6O)}_z3tWqO&`ug!R zUJsiceQ?l%UQA_SbvQ-tf-4Q;_XLtufVq*vBlRy%}N})ti{adn{#nKFXsI&^+dGa{xAc6>FXk`%na90&d&BUXy?0eLGnMnp37oP^by>Fz0rTqOA#U{_?6M0U!eKEvYf$VMnnleP3SFXkXG(7-yLFdMnVKKm^+@AyxN zB4Y|yNZ&_e@7~ZnyZ27O%KPu?db7#=Ix77A5!XaO&`6>oy-7=97l8u4!UqLazGj#_ zqX6=Sjj8*B7glTS`BvvkIa;LmNPEImbAVLgf?Px*=)M%Ko`3R0f*v(cr$P&n1z?S; zOHt#-xC!+bpo|_@eF8Fz*eWSs4fwha0rRq=ftp4(P&(ca4q0&e%jm6->S?h^mmL}( zwtAI`pVo%3DC&Ld2iZbBO0!&+{0bax&5&E5(CVbK)(R`yrF{G)nOP5Ulvr#M*_F)N zTG!#c2DyjK2!Hca+qvxt(mG`U*Mrn8p5Xnp1H=+ENqMZ|sUuG~4)OEDGjbY8mc88% z7IGC$C^hsHH-JT!Nx6~x6(y|1H{gAP&Sd^~u&Y(li87h3CSLoz2qd-X;Vg7n{v&J7 zTqZ5*0ZuTu6)g~|fOIiEcZrI~w1$Y?h^Bg^O9KC5jDKq~9fSi!?i8l!XHfKta zB(NwJhD1GHP+06+F)a>OSh?BHI;f!m+OKgARPC{cywKT|Qf`n+79Ov8d0nZnMS~gD zeP8@mmnsgg4jn|}hIrf9PP}zK@^m)+~-&RyenC_sk@z5XR>W zr=DK5dBPlXKnTs9+-3bcNdGosnD+X@A#%21B%YoQ!Q;mL=R^#0SERDz5&csVVD{Zg zx?i3NT>oG2Rog#SmWCQzTDD8@=DTBx`j=KDp>)NclC4v3SrZk-ZpmB$nm%&>Etb3b z!G8&(iL-QuJpLB6fj1?QpCTr8-qW3HwOg-$HH*{Pt^Wk2>KZv=-tq%lk zIb__wJuo0Tv#>~q;iegnjSiN=h#uMKZl zb1g3*3N!8o>cf1Nj2F7+YFvv1Ln+&X;junY7+IChOwk7?zj(Vjli`~2qkfgM?tj7p z88*3i?^81{K4s^^Ay=y_RT`FB=r(sOI4a{~x3CUW&2R{SQ8kN=-GazRz>WUuf_H|` z@Q%~OjwP-7qV|}n_K=h~cB=zbk%#US?{j_oA}&C~4J#G0Kia}`*s1DhOP6rrAM58| zAZh!m;ij)Sn^STcx17kN$p8p|fq!?=>0DA~>r$R3eH-W?L1R&3U-q~Te&xWBP?@-S z=51EFx)0dVn@@*m4B%+O!XDb6jneSv;;W!;|`JkiRbgW~Qyi1y0=mklYD_lXJyfm&tny&am!T8^6O!9Y6h7zAAlhsQv zSbqAwbK17=&~OmKU?64I-=I5JVhcMC&yVbG4pu@P99|5w?kgI+OiiPOPvnx+JB`J%%e$(bH}f8>7gKuz$;Fgd~zW)o8v` z;<)8j*qSeVgm&*xi#5Ve@As#D;|8AA-|rEybZIC}J);C4{1AjRs6}}#mzeX89D&+7 zE2nVvcn?uKDY3l4@*@Bo#Pu2cgq;*cQc9aqrK5qUM#ru}#B#*PL$C~IIWg1`El5`X zgQEHr(MRRMMcZ}SYk%>U@4X5v0s?R}`uR9IMMCwp8ci3-$Sfo&-WCweD|R<{jOUHV z?IpX8ox}4XQGXpv{&asm##Ow%lB0N~iPeQux-=!c=i8*d$jdN^AquvkOa*zKX|QF# zW|(70q4sGb?wr@aUz{x4odv+|YC8ahZ23ODcLFP2%>e2&{(pn|r4Xu6LBunukoQ$) z-5z7JQDrFLaC)%wFN@4K{9~ zmbp4>K7Xs%0)GlpvVzjol$`yqaXV21hRrxgBFIs)z2Bk6YAIl0bjA{SG+ev3UMm7=Yt^YD_$_bVeP`|EEm&u zJDw**SHN$F5lqJ174z^xjcaqgQ;o-Sif`G{RrLM1Lw~xs8+SYTkb@mv3fch46RlxU z5`Qo&qdCQ`4{xkzUPJ#82l0%UJ3rE*d}5#uH#96|kQx5#acNm8tt(qY?Cz8Og{IX* zV~Casit6q$bI}`AX(WM78N%l9eLZhzws_vzusnI`-u-?>CHY*VB;9)D&vYh?5X<(%8aXK`?d=HbCZuDRWP z9VKyvFAVywf}LHeUY^?LB&<+VI+Nu4)z-580n#?v6fNghg4wB6t)tztuLwc@S#X_> z?}V_w^-!V}n%hpB>BAR*dxHV(x=jv&e5kOXZ7Me1zRwlSp&@}S4(+O-4f2upHUR3c z^?zpyCu}8P9$8ACKD^~X8!tQbRs{I8e!YbngG3)h*5=Jb%|`vgECHey%R9kO70V1f zf%tZY8q7k9)#I`fp|t-lx#QrcZSowIZ@q}f8VE@^yF}U0K<^1v4y;)K0d8;D@)Jht z%{>(z2K)4O%E_apoBH<3Jss0mw$mP55Py;S`}`BXL82W>0OZsnXG7qXFKAmU$<=zL zk>qm$p*S(_id-|-aZc4S9tRL+rA)Q8`RkYFD-*vIj(116%$>8SP=479>7?hs)(Ib+ z;rc{aM))FWtCbWAeV=8b}9VCnS@Zs4(0yzL)v<=oZpqbDV%@=qXT9{mh)hba_%$e_NThjN3Cnw zXlvK>+J3oA;B=IQAvNm&pmkJRuYWR-mLF-!R_{ER+~0bH^WXB!m4Mx-bkNDihc~me zL-bwf^Y3I7Ctkr&qT7&F8|Zzjtb30OpX5>+m*p|D2PJ-MqVW{XC+#0P!Q}dSFyrj_ z8yp!p0=fepzefDj_j}92t~mJot9foII>iU>BLc~T2t0;tCz)&6-JP;mlYgO3Jx6cF zIx?55_6OLqL_duw|C11c;A=(b@^&TrYc2Izw=RP8@v{6;3P!8zF(&&Z^|hWPzvsYM z+>YqCd*-I`qOF0Nw^n0`z*${F^Jm9Ta7P~MG*ykOswlpUNoMkpI7q($Z+Uwr^ajzt zpzEiB4OJdezg-(n24mwO2!DugjTE}g@rX-*%sC3z3HjusX7V!ca10fyKlDqTftRL* zg)y?BZrO)%%wvmAom;W}{ZDQD!bQ%)KREQ@a%j3wRbOZA!aMQruFG5Qq>60@#~dx_ zk!e>&$tWXT4_T2-E8Z2c=ix0TGewS7>nf-SVx-lvgHaah^^F)FsDJVm+w@S7^euV_ zs-00HQ0f%l?0hLjpmx8x~4$UddDeK8@<(uot$i6@@rlM z0H)Dl&sqo2%(D2?pSI&EumF1sl@N$1#du1ABEjHy^i+R&ra-)hf|)KJLHFV@J##+B zLHO6vZh^9wc0AInr++&xW~3~7*Nwiee1@`!HmWqH3W>Z)y zXuKQ8gaTWVFuBP9Q(VmD!51Ci`qUviXQvM_i?j79k{6w#SF%12wjj>oPz zAXR5c4Njr?nF-sB_Cp2p<)ETXq|(2g-Vid(lv1(%x62C~dA@7ncVSgl&pCE4dqGf) zzoGiT$Z3x_{eMDte;#~#i)p_zPXcH3w76V(L(NaxW-n4iiKDHcWE^K*c>J)uQecc> z1>J@M#tjg4^tupfNdRTkje%gu}qb1hJQ z=m^`8^M8(|Pu|`xP+F*fJPMjE5F(_1nNO|<3P$U2Vir}}UlU4fuXQKL?fDgAI(nm|rBNJ7(M~mC;U`sd@iXUjTybF7+J$=dZ;I+!O_Vf{Mpmbx&R8>Aa5$@J z*D_+5R;1ueRq~-47t5F0yKdIpTZl9y3ndH()PIdL8`9=BD4L=(=KZ?-f_uUor82p; z6ko@Jq$6^_5Eo_Z<|*-Ju!;b-d^M z7=P7mIl`C8ee>B3;uk!%JSxv$5Lc3$G%jm#DGTc~*SQq&+YRnCV13N)U?iv>XbnKt zxlVR zUSF&}b=+lwma7`LG7y}R&n(c18QePmGQB5>9VwSsM7w*nkF>UAf31=ENhythFUe}d z#rB=!Ut?M52L0oJ%aGNm5)FZMkLrl>n3BG^`A1t(a@Fz1+z#VM;Rz%!C{qqSR zTzmsc6R3csvM=9ueoZzgtFl^=LVt(3jN#$U9&$Ern4rw@!BjPpxWv9H?;v)>X}l!8xEIr8@{@PCN4jb!WJ zyEwnw!QzQ(Kb-XR?sl2Wc3jNyX)oon6bV>00pFT$lo>XILt(76d*)&RCp&aFwjf2+ zvqsD{xM34N4#UoD!xu10X|_{{JyUG4nx|D6VIsl1l zizU6%hDc5p?I}Ju?>hnvH&opnh@zN`85dZ7`Tv5~f#%3E?G^7-e4WB=K1(Q{xs;ln zgN;hJ+PpgD@+JqL2Y;haF?m0fdxz4DZ|W=sC0_ERuDEkiZqk@xM5%AJ?0*#YQ?$5d)SOy)M$A$G zFx|pyS3ZF0bH=fDBdJx(@h;40LNyC&S^Eue#KB^MyOwO*Lqbtb4OfxbbtdPFO$uw} zl$7=wEkn+>#GGP|CAuKiN67>-yGGg|J4exS|2;rQs=O@R($e~{HMTJHmtBo{;{CPu z6d5n19}_Ozhku!m;+CT5?CLMXKtu?Kv4dAOqAIo3g)rBIx6PmaUNzp@i{@Bt+5r?XU@hZl)P|EO#05alZl-gm12Y z{0Yt4zq!8Hz`p~`>*i6Jhp&b{;rjP}Z@!bL-fANLMSqe<=P=ouSqk28KB?SYyYvh( z*Vb5vFxdG^cUJ&AQ3*RXR=y<{&yROltf|noa!(pbwoNvC_Lv`#QZd?7%T9D(Io%;% zGF*o^Pw`RSmO?(pft^Ad(pWZT_S9@g>iKO>;%zHg}1yxFDxHAJd(1>>9$wdG^$h8tK_!Br459E!Q1kvzrR-;p zKrmFJW?7k&VgUU=+9#Q`JZ#WkIVOTIhA;u9FajWd>LAb{A5L!0?5|Y)c>qkPLCd|G z-#D9>&a;f!4IBXB>^?u7O5+kdUgR1jtJtxJFH+0>|6ZY%dX{!09a|QS2jesG})VyPx{XR1OZ6?lm`E5VZ4wCra z_5ksJewyoJZPA*FkRR=j^uVE{FAs3J)*?gWFcXuXOL+1t>q${)rR-)RNEq10xb;m; z;G>VKGLw5OAIc5KdgGr-uhZI>hSTIC#OLJfLX^T?SBj3g;g)9dKI(+NUC8_DIx`xea|N@Vv)I zu@M88zTN~JstPjyN#$qaxD{K5)d^LNDl)4a5@Xgh?`t>oT3fE4Lx+7dGDdpyBMk#O zE)ox}V>w8Nk;J8gKe0RYK*EN79UvLE$^muZK-6oyPeR@JMjeqX?74>ZBcYHuMMxKa zKY)`{-CfGBM6}!uon_hdCusqQd&Jq-Ef@M6;!&+N9>%GnOA!F8V=vhVlxE$?|CQ6k zpq3Z@=kd2N2>Cf&(k8p<61P+xGs!}Rt)&nJ$BXVl~Z6)T!5cS5x>OHVkc=$W(1YBch)+hT5W zgs;sb8}&vj zPs=XUkZ+1yfOk+Yxj?!}5$knrCN0+d;AQn$5oXSO@$~S#b zcn}(Y-#c8Ez?~C7v0+XEh^`+AV-Bj>RUXG%thU>d`Xb{Qs}~u9$ZF; z3P-3CQcE{?%sUaPAU?wWuC3m_66s@&HKp}@5LpT)wG|@g4f)#OR$#MUm!v$pf@tdU zkQmi|-39bArb zzNE`U+0DVA)(j_&^BC~UVi?zMRGLLY(Jxb`AX#@Huzg$`tXTIG)ISD?zqzGTbK*vd zW?2OXlg?ff$-aAkLzowO1a@LVYTMcCd+E|Q8cE}R7(^Fu{LDL5$coVV^Q*^!_+Pw% zRiJCJ!O*Q%FUMe~Efe7eafK3FLEa_^fSVe{Lca~l$=-hT2rlc=$DGi+hS(e=*RTp@ z>V*vv3Xkg)$4q!(kxy(-JLhRp{aOAq(O=7}6J(a_t0l01Cs`Q69a8PcK}-N9|)}`{U0xCh%4WqC&VE)fSpo2ihtZM%uXBkj9Tc-O`EdJ zs{LSCNy1v1EcpD8A%d^%2Vyv}rN*KGy>;xXnz|VkX~uw9gvz~98p8Ys&OIsc6@X%m zEa3tj*rK+N4<{cfh5$P}yo#${rP+#*j0SOAca-LT3CFcw`oW>(L1s)H!3m+gT^ej8 zsd?C>tut#Xh+m|Gz+t((v1wg>(_*#hb^Q_opp zzTz8yM)k+I%a1s!bYE-%rx5q&eVE#ea@B=~V8P)wN>w&gaLf`N&D;MeL~3&OruGzA z(Fw-#%UHJTV`)sae2(TQZOU#n@~RCFE4Hrh3S7^ua}T^%^hKOm5gWTo^D^6JG!a zUm5H`P7xdMoAVW$tb43m!v>~t6^OZ%?3`5Lg$JwSZp-v70;G(k^0b# zq}~$DvT1PRCk7h|9*v6~^KNStfb%e&-{9k10^(KtQ6uD0%joQuHAsl#t>I%3xdE4d zaoiV;U%}0-rLxE@rAClMNd8YmA-s{0xvq3ce@P0<_1IWkv z&0N(bWboQwuYR5aqLbH3f1BJu8CoGb5qi3vfZo+NdNeYd zaX|^FZ%MHbgFK`m6TvJ9JIsyvZ}tCwr8Sr|*f%t!M|q9rk=8Ww6zbw(V@+Z|#IzWz zb~P`#kK<&Le}FkxED@hJ+5DJoT9`B1d32?=K8(ptooOo8NZoNF)-sYXD&!=!BXatg zXsRH8eX}FwIsU7J_AVOkImm3W>B1AM!@__bO2Dz}ZtvxBe?$l%Ffs z9%SL?S~=a}H_-Q45boW7fd9n(N&bTewzNF%2*YeM3rm;9#}MF!wp2M8h$61|v`Vtj za%ZfBoFy!RpQ)~HV!eRNxx<28K_nEqO&H4*s+IQ`#dhj9@{qf3$9*!44$whaIto8! z&BD_H;cY*B!BLpThB?T?yAftYr7-57jd`?!7≫j-f&YzV6&-(%_J;R+|Qy88P0{ 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 +PROTOBUF_CONSTEXPR ComResponce::ComResponce(::_pbi::ConstantInitialized) + : _impl_{ + /*decltype(_impl_.data_)*/ { + &::_pbi::fixed_address_empty_string, + ::_pbi::ConstantInitialized{}, + }, + /*decltype(_impl_._cached_size_)*/ {}, + } {} +struct ComResponceDefaultTypeInternal { + PROTOBUF_CONSTEXPR ComResponceDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} + ~ComResponceDefaultTypeInternal() {} + union { + ComResponce _instance; + }; +}; + +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT + PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ComResponceDefaultTypeInternal _ComResponce_default_instance_; } // namespace stream -static ::_pb::Metadata file_level_metadata_stream_2eproto[11]; +static ::_pb::Metadata file_level_metadata_stream_2eproto[12]; static const ::_pb::EnumDescriptor* file_level_enum_descriptors_stream_2eproto[2]; static constexpr const ::_pb::ServiceDescriptor** file_level_service_descriptors_stream_2eproto = nullptr; @@ -367,6 +386,15 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE PROTOBUF_FIELD_OFFSET(::stream::ImgInfoResponce, _impl_.levelimage_), PROTOBUF_FIELD_OFFSET(::stream::ImgInfoResponce, _impl_.width_), PROTOBUF_FIELD_OFFSET(::stream::ImgInfoResponce, _impl_.height_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::stream::ComResponce, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _split_ + ~0u, // no sizeof(Split) + PROTOBUF_FIELD_OFFSET(::stream::ComResponce, _impl_.data_), }; static const ::_pbi::MigrationSchema @@ -382,6 +410,7 @@ static const ::_pbi::MigrationSchema {95, -1, -1, sizeof(::stream::Point)}, {105, -1, -1, sizeof(::stream::RegResponce)}, {114, -1, -1, sizeof(::stream::ImgInfoResponce)}, + {125, -1, -1, sizeof(::stream::ComResponce)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -396,6 +425,7 @@ static const ::_pb::Message* const file_default_instances[] = { &::stream::_Point_default_instance_._instance, &::stream::_RegResponce_default_instance_._instance, &::stream::_ImgInfoResponce_default_instance_._instance, + &::stream::_ComResponce_default_instance_._instance, }; const char descriptor_table_protodef_stream_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { "\n\014stream.proto\022\006stream\032\031google/protobuf/" @@ -424,19 +454,20 @@ const char descriptor_table_protodef_stream_2eproto[] PROTOBUF_SECTION_VARIABLE( "\n\004xPos\030\001 \001(\002\022\014\n\004yPos\030\002 \001(\002\"\033\n\013RegResponc" "e\022\014\n\004data\030\001 \001(\005\"D\n\017ImgInfoResponce\022\022\n\nle" "velImage\030\001 \001(\r\022\r\n\005width\030\002 \001(\005\022\016\n\006height\030" - "\003 \001(\005*\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\006iFLOA" - "T\020\005\022\013\n\007iSTRING\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\nD" - "ATAHANDLE\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.RequestInf" - "o\032\023.stream.ResponseAny\"\000\022=\n\014ServerStream" - "\022\023.stream.RequestInfo\032\024.stream.ResponseI" - "nfo\"\0000\001\022=\n\014ClientStream\022\023.stream.Request" - "Info\032\024.stream.ResponseInfo\"\000(\001\022<\n\tAllStr" - "eam\022\023.stream.RequestInfo\032\024.stream.Respon" - "seInfo\"\000(\0010\001B-\n\027io.grpc.examples.streamB" - "\013StreamProtoP\001\242\002\002STb\006proto3" + "\003 \001(\005\"\033\n\013ComResponce\022\014\n\004data\030\001 \001(\014*\223\001\n\004T" + "YPE\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\007iSTR" + "ING\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\nDATAHANDLE\022\n" + "\n\006UPDATE\020\000\022\007\n\003ADD\020\001\022\007\n\003DEL\020\0022\372\001\n\006Stream\022" + "4\n\006Simple\022\023.stream.RequestInfo\032\023.stream." + "ResponseAny\"\000\022=\n\014ServerStream\022\023.stream.R" + "equestInfo\032\024.stream.ResponseInfo\"\0000\001\022=\n\014" + "ClientStream\022\023.stream.RequestInfo\032\024.stre" + "am.ResponseInfo\"\000(\001\022<\n\tAllStream\022\023.strea" + "m.RequestInfo\032\024.stream.ResponseInfo\"\000(\0010" + "\001B-\n\027io.grpc.examples.streamB\013StreamProt" + "oP\001\242\002\002STb\006proto3" }; static const ::_pbi::DescriptorTable* const descriptor_table_stream_2eproto_deps[1] = { @@ -446,13 +477,13 @@ static ::absl::once_flag descriptor_table_stream_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_stream_2eproto = { false, false, - 1547, + 1576, descriptor_table_protodef_stream_2eproto, "stream.proto", &descriptor_table_stream_2eproto_once, descriptor_table_stream_2eproto_deps, 1, - 11, + 12, schemas, file_default_instances, TableStruct_stream_2eproto::offsets, @@ -3278,6 +3309,192 @@ void ImgInfoResponce::InternalSwap(ImgInfoResponce* other) { &descriptor_table_stream_2eproto_getter, &descriptor_table_stream_2eproto_once, file_level_metadata_stream_2eproto[10]); } +// =================================================================== + +class ComResponce::_Internal { + public: +}; + +ComResponce::ComResponce(::google::protobuf::Arena* arena) + : ::google::protobuf::Message(arena) { + SharedCtor(arena); + // @@protoc_insertion_point(arena_constructor:stream.ComResponce) +} +ComResponce::ComResponce(const ComResponce& from) : ::google::protobuf::Message() { + ComResponce* const _this = this; + (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.data_){}, + /*decltype(_impl_._cached_size_)*/ {}, + }; + _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( + from._internal_metadata_); + _impl_.data_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.data_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_data().empty()) { + _this->_impl_.data_.Set(from._internal_data(), _this->GetArenaForAllocation()); + } + + // @@protoc_insertion_point(copy_constructor:stream.ComResponce) +} +inline void ComResponce::SharedCtor(::_pb::Arena* arena) { + (void)arena; + new (&_impl_) Impl_{ + decltype(_impl_.data_){}, + /*decltype(_impl_._cached_size_)*/ {}, + }; + _impl_.data_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.data_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} +ComResponce::~ComResponce() { + // @@protoc_insertion_point(destructor:stream.ComResponce) + _internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>(); + SharedDtor(); +} +inline void ComResponce::SharedDtor() { + ABSL_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.data_.Destroy(); +} +void ComResponce::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +PROTOBUF_NOINLINE void ComResponce::Clear() { +// @@protoc_insertion_point(message_clear_start:stream.ComResponce) + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.data_.ClearToEmpty(); + _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); +} + +const char* ComResponce::_InternalParse( + const char* ptr, ::_pbi::ParseContext* ctx) { + ptr = ::_pbi::TcParser::ParseLoop(this, ptr, ctx, &_table_.header); + return ptr; +} + + +PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 +const ::_pbi::TcParseTable<0, 1, 0, 0, 2> ComResponce::_table_ = { + { + 0, // no _has_bits_ + 0, // no _extensions_ + 1, 0, // max_field_number, fast_idx_mask + offsetof(decltype(_table_), field_lookup_table), + 4294967294, // skipmap + offsetof(decltype(_table_), field_entries), + 1, // num_field_entries + 0, // num_aux_entries + offsetof(decltype(_table_), field_names), // no aux_entries + &_ComResponce_default_instance_._instance, + ::_pbi::TcParser::GenericFallback, // fallback + }, {{ + // bytes data = 1; + {::_pbi::TcParser::FastBS1, + {10, 63, 0, PROTOBUF_FIELD_OFFSET(ComResponce, _impl_.data_)}}, + }}, {{ + 65535, 65535 + }}, {{ + // bytes data = 1; + {PROTOBUF_FIELD_OFFSET(ComResponce, _impl_.data_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)}, + }}, + // no aux_entries + {{ + }}, +}; + +::uint8_t* ComResponce::_InternalSerialize( + ::uint8_t* target, + ::google::protobuf::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:stream.ComResponce) + ::uint32_t cached_has_bits = 0; + (void)cached_has_bits; + + // bytes data = 1; + if (!this->_internal_data().empty()) { + const std::string& _s = this->_internal_data(); + target = stream->WriteBytesMaybeAliased(1, _s, target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = + ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:stream.ComResponce) + return target; +} + +::size_t ComResponce::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:stream.ComResponce) + ::size_t total_size = 0; + + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // bytes data = 1; + if (!this->_internal_data().empty()) { + total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize( + this->_internal_data()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::google::protobuf::Message::ClassData ComResponce::_class_data_ = { + ::google::protobuf::Message::CopyWithSourceCheck, + ComResponce::MergeImpl +}; +const ::google::protobuf::Message::ClassData*ComResponce::GetClassData() const { return &_class_data_; } + + +void ComResponce::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:stream.ComResponce) + ABSL_DCHECK_NE(&from, _this); + ::uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_data().empty()) { + _this->_internal_set_data(from._internal_data()); + } + _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); +} + +void ComResponce::CopyFrom(const ComResponce& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:stream.ComResponce) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +PROTOBUF_NOINLINE bool ComResponce::IsInitialized() const { + return true; +} + +void ComResponce::InternalSwap(ComResponce* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.data_, lhs_arena, + &other->_impl_.data_, rhs_arena); +} + +::google::protobuf::Metadata ComResponce::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_stream_2eproto_getter, &descriptor_table_stream_2eproto_once, + file_level_metadata_stream_2eproto[11]); +} // @@protoc_insertion_point(namespace_scope) } // namespace stream namespace google { diff --git a/PrintS/protobuf/stream.pb.h b/PrintS/protobuf/stream.pb.h index 692b4e4..e627cb2 100644 --- a/PrintS/protobuf/stream.pb.h +++ b/PrintS/protobuf/stream.pb.h @@ -59,6 +59,9 @@ namespace stream { class ChainDataBlock; struct ChainDataBlockDefaultTypeInternal; extern ChainDataBlockDefaultTypeInternal _ChainDataBlock_default_instance_; +class ComResponce; +struct ComResponceDefaultTypeInternal; +extern ComResponceDefaultTypeInternal _ComResponce_default_instance_; class ImgInfoResponce; struct ImgInfoResponceDefaultTypeInternal; extern ImgInfoResponceDefaultTypeInternal _ImgInfoResponce_default_instance_; @@ -2291,6 +2294,170 @@ class ImgInfoResponce final : }; union { Impl_ _impl_; }; friend struct ::TableStruct_stream_2eproto; +};// ------------------------------------------------------------------- + +class ComResponce final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:stream.ComResponce) */ { + public: + inline ComResponce() : ComResponce(nullptr) {} + ~ComResponce() override; + template + explicit PROTOBUF_CONSTEXPR ComResponce(::google::protobuf::internal::ConstantInitialized); + + ComResponce(const ComResponce& from); + ComResponce(ComResponce&& from) noexcept + : ComResponce() { + *this = ::std::move(from); + } + + inline ComResponce& operator=(const ComResponce& from) { + CopyFrom(from); + return *this; + } + inline ComResponce& operator=(ComResponce&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance); + } + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>(); + } + + static const ::google::protobuf::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::google::protobuf::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::google::protobuf::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const ComResponce& default_instance() { + return *internal_default_instance(); + } + static inline const ComResponce* internal_default_instance() { + return reinterpret_cast( + &_ComResponce_default_instance_); + } + static constexpr int kIndexInFileMessages = + 11; + + friend void swap(ComResponce& a, ComResponce& b) { + a.Swap(&b); + } + inline void Swap(ComResponce* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::google::protobuf::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ComResponce* other) { + if (other == this) return; + ABSL_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + ComResponce* New(::google::protobuf::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::google::protobuf::Message::CopyFrom; + void CopyFrom(const ComResponce& from); + using ::google::protobuf::Message::MergeFrom; + void MergeFrom( const ComResponce& from) { + ComResponce::MergeImpl(*this, from); + } + private: + static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + ::size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final; + ::uint8_t* _InternalSerialize( + ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::google::protobuf::Arena* arena); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ComResponce* other); + + private: + friend class ::google::protobuf::internal::AnyMetadata; + static ::absl::string_view FullMessageName() { + return "stream.ComResponce"; + } + protected: + explicit ComResponce(::google::protobuf::Arena* arena); + public: + + static const ClassData _class_data_; + const ::google::protobuf::Message::ClassData*GetClassData() const final; + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kDataFieldNumber = 1, + }; + // bytes data = 1; + void clear_data() ; + const std::string& data() const; + template + void set_data(Arg_&& arg, Args_... args); + std::string* mutable_data(); + PROTOBUF_NODISCARD std::string* release_data(); + void set_allocated_data(std::string* ptr); + + private: + const std::string& _internal_data() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_data( + const std::string& value); + std::string* _internal_mutable_data(); + + public: + // @@protoc_insertion_point(class_scope:stream.ComResponce) + private: + class _Internal; + + friend class ::google::protobuf::internal::TcParser; + static const ::google::protobuf::internal::TcParseTable<0, 1, 0, 0, 2> _table_; + template friend class ::google::protobuf::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::google::protobuf::internal::ArenaStringPtr data_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + PROTOBUF_TSAN_DECLARE_MEMBER + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_stream_2eproto; }; // =================================================================== @@ -3471,6 +3638,61 @@ inline void ImgInfoResponce::_internal_set_height(::int32_t value) { _impl_.height_ = value; } +// ------------------------------------------------------------------- + +// ComResponce + +// bytes data = 1; +inline void ComResponce::clear_data() { + _impl_.data_.ClearToEmpty(); +} +inline const std::string& ComResponce::data() const { + // @@protoc_insertion_point(field_get:stream.ComResponce.data) + return _internal_data(); +} +template +inline PROTOBUF_ALWAYS_INLINE void ComResponce::set_data(Arg_&& arg, + Args_... args) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.data_.SetBytes(static_cast(arg), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:stream.ComResponce.data) +} +inline std::string* ComResponce::mutable_data() { + std::string* _s = _internal_mutable_data(); + // @@protoc_insertion_point(field_mutable:stream.ComResponce.data) + return _s; +} +inline const std::string& ComResponce::_internal_data() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.data_.Get(); +} +inline void ComResponce::_internal_set_data(const std::string& value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.data_.Set(value, GetArenaForAllocation()); +} +inline std::string* ComResponce::_internal_mutable_data() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + return _impl_.data_.Mutable( GetArenaForAllocation()); +} +inline std::string* ComResponce::release_data() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:stream.ComResponce.data) + return _impl_.data_.Release(); +} +inline void ComResponce::set_allocated_data(std::string* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.data_.SetAllocated(value, GetArenaForAllocation()); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.data_.IsDefault()) { + _impl_.data_.Set("", GetArenaForAllocation()); + } + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:stream.ComResponce.data) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ diff --git a/PrintS/protobuf/stream.proto b/PrintS/protobuf/stream.proto index 67eadfa..270abb1 100644 --- a/PrintS/protobuf/stream.proto +++ b/PrintS/protobuf/stream.proto @@ -122,6 +122,11 @@ message ImgInfoResponce{ int32 height = 3; } +//注册功能返回信息 IOVersionStr接口返回值 +message ComResponce{ + bytes data = 1; +} + service Stream { rpc Simple(RequestInfo) returns (ResponseAny) {} // 简单模式 rpc ServerStream (RequestInfo) returns (stream ResponseInfo) {} // 服务端数据流模式 diff --git a/TestClient/DataManage/DataHandle.cpp b/TestClient/DataManage/DataHandle.cpp index 045954f..4148da0 100644 --- a/TestClient/DataManage/DataHandle.cpp +++ b/TestClient/DataManage/DataHandle.cpp @@ -83,7 +83,7 @@ void DataHandle::PrintValue(const ReadData& msg){ it->nameKey; string valueType = m_dataTypeMp[(*it).valueType]; printf("接收:dataType:%d,nameKey:%*s, strvalue:%*s, valueType:%s\n", - msg.dataType, 33, it->nameKey.data(), 13, StringHelper::AsciiToUtf8(it->strValue).data(), valueType.data()); + msg.dataType, 33, it->nameKey.data(), 13, it->strValue.data(), valueType.data()); ++it; } printf("共有参数%zd个...\n", msg.its.size()); @@ -450,5 +450,21 @@ void DataHandle::ConfigTest() { wd.items.emplace_back(Item{ "code", "usp" ,iSTRING }); PushMsg(wd); printf("controlrun is called...\n"); + + ::stream::ResponseAny resp; + stream::ComResponce result; + WriteData wdata{ CONFIGFUNC ,to_string(IOVERSIONSTR) }; + wdata.items.emplace_back(Item{"index","1",iINT}); + m_streamClient->Request(wdata, &resp); + if (resp.data().Is()) { + resp.data().UnpackTo(&result); + printf("IOVERSIONSTR resp:%s\n", result.data().data()); + } + + PushMsg(CONFIGFUNC, to_string(REDTESTCFGSTART)); + printf("redtestcfgstart is called...\n"); + + PushMsg(CONFIGFUNC, to_string(REDTESTCFGSTOP)); + printf("redtestcfgstop is called...\n"); } diff --git a/TestClient/DataManage/FunC.h b/TestClient/DataManage/FunC.h index f0e7de8..3f7af49 100644 --- a/TestClient/DataManage/FunC.h +++ b/TestClient/DataManage/FunC.h @@ -88,4 +88,8 @@ enum ConfigFunc { SAVEMACHINECONFIG, DELETEMACHINEIO, CONTROLRUN, + IOVERSIONSTR, + + REDTESTCFGSTART, //红光测试配置开始 + REDTESTCFGSTOP, //红光测试配置结束 }; \ No newline at end of file diff --git a/TestClient/DataManage/StreamClient.cpp b/TestClient/DataManage/StreamClient.cpp index 665e965..7f2df7e 100644 --- a/TestClient/DataManage/StreamClient.cpp +++ b/TestClient/DataManage/StreamClient.cpp @@ -149,6 +149,14 @@ int StreamClient::Request(const WriteData& writeData , ::stream::ResponseAny* re request.set_namekey(writeData.nameKey); request.set_strvalue(writeData.strValue); request.set_valuetype((stream::TYPE)writeData.valueType); + + for (auto wd = writeData.items.begin(); wd != writeData.items.end(); ++wd) { + ::stream::ParamInfo* paramInfo = request.add_item(); + paramInfo->set_namekey((*wd).nameKey); + paramInfo->set_strvalue((*wd).strValue); + paramInfo->set_valuetype((stream::TYPE)(*wd).valueType); + } + Status status = _stub->Simple(&context, request, response); return status.ok(); diff --git a/TestClient/PrintC.vcxproj.filters b/TestClient/PrintC.vcxproj.filters index 858e3be..2cfa783 100644 --- a/TestClient/PrintC.vcxproj.filters +++ b/TestClient/PrintC.vcxproj.filters @@ -512,15 +512,15 @@ UI + + utils + protobuf protobuf - - utils - diff --git a/TestClient/protobuf/stream.pb.cc b/TestClient/protobuf/stream.pb.cc index 2a0b078..327a184 100644 --- a/TestClient/protobuf/stream.pb.cc +++ b/TestClient/protobuf/stream.pb.cc @@ -235,8 +235,27 @@ struct ImgInfoResponceDefaultTypeInternal { PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ImgInfoResponceDefaultTypeInternal _ImgInfoResponce_default_instance_; + template +PROTOBUF_CONSTEXPR ComResponce::ComResponce(::_pbi::ConstantInitialized) + : _impl_{ + /*decltype(_impl_.data_)*/ { + &::_pbi::fixed_address_empty_string, + ::_pbi::ConstantInitialized{}, + }, + /*decltype(_impl_._cached_size_)*/ {}, + } {} +struct ComResponceDefaultTypeInternal { + PROTOBUF_CONSTEXPR ComResponceDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} + ~ComResponceDefaultTypeInternal() {} + union { + ComResponce _instance; + }; +}; + +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT + PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ComResponceDefaultTypeInternal _ComResponce_default_instance_; } // namespace stream -static ::_pb::Metadata file_level_metadata_stream_2eproto[11]; +static ::_pb::Metadata file_level_metadata_stream_2eproto[12]; static const ::_pb::EnumDescriptor* file_level_enum_descriptors_stream_2eproto[2]; static constexpr const ::_pb::ServiceDescriptor** file_level_service_descriptors_stream_2eproto = nullptr; @@ -367,6 +386,15 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE PROTOBUF_FIELD_OFFSET(::stream::ImgInfoResponce, _impl_.levelimage_), PROTOBUF_FIELD_OFFSET(::stream::ImgInfoResponce, _impl_.width_), PROTOBUF_FIELD_OFFSET(::stream::ImgInfoResponce, _impl_.height_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::stream::ComResponce, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _split_ + ~0u, // no sizeof(Split) + PROTOBUF_FIELD_OFFSET(::stream::ComResponce, _impl_.data_), }; static const ::_pbi::MigrationSchema @@ -382,6 +410,7 @@ static const ::_pbi::MigrationSchema {95, -1, -1, sizeof(::stream::Point)}, {105, -1, -1, sizeof(::stream::RegResponce)}, {114, -1, -1, sizeof(::stream::ImgInfoResponce)}, + {125, -1, -1, sizeof(::stream::ComResponce)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -396,6 +425,7 @@ static const ::_pb::Message* const file_default_instances[] = { &::stream::_Point_default_instance_._instance, &::stream::_RegResponce_default_instance_._instance, &::stream::_ImgInfoResponce_default_instance_._instance, + &::stream::_ComResponce_default_instance_._instance, }; const char descriptor_table_protodef_stream_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { "\n\014stream.proto\022\006stream\032\031google/protobuf/" @@ -424,19 +454,20 @@ const char descriptor_table_protodef_stream_2eproto[] PROTOBUF_SECTION_VARIABLE( "\n\004xPos\030\001 \001(\002\022\014\n\004yPos\030\002 \001(\002\"\033\n\013RegResponc" "e\022\014\n\004data\030\001 \001(\005\"D\n\017ImgInfoResponce\022\022\n\nle" "velImage\030\001 \001(\r\022\r\n\005width\030\002 \001(\005\022\016\n\006height\030" - "\003 \001(\005*\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\006iFLOA" - "T\020\005\022\013\n\007iSTRING\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\nD" - "ATAHANDLE\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.RequestInf" - "o\032\023.stream.ResponseAny\"\000\022=\n\014ServerStream" - "\022\023.stream.RequestInfo\032\024.stream.ResponseI" - "nfo\"\0000\001\022=\n\014ClientStream\022\023.stream.Request" - "Info\032\024.stream.ResponseInfo\"\000(\001\022<\n\tAllStr" - "eam\022\023.stream.RequestInfo\032\024.stream.Respon" - "seInfo\"\000(\0010\001B-\n\027io.grpc.examples.streamB" - "\013StreamProtoP\001\242\002\002STb\006proto3" + "\003 \001(\005\"\033\n\013ComResponce\022\014\n\004data\030\001 \001(\014*\223\001\n\004T" + "YPE\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\007iSTR" + "ING\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\nDATAHANDLE\022\n" + "\n\006UPDATE\020\000\022\007\n\003ADD\020\001\022\007\n\003DEL\020\0022\372\001\n\006Stream\022" + "4\n\006Simple\022\023.stream.RequestInfo\032\023.stream." + "ResponseAny\"\000\022=\n\014ServerStream\022\023.stream.R" + "equestInfo\032\024.stream.ResponseInfo\"\0000\001\022=\n\014" + "ClientStream\022\023.stream.RequestInfo\032\024.stre" + "am.ResponseInfo\"\000(\001\022<\n\tAllStream\022\023.strea" + "m.RequestInfo\032\024.stream.ResponseInfo\"\000(\0010" + "\001B-\n\027io.grpc.examples.streamB\013StreamProt" + "oP\001\242\002\002STb\006proto3" }; static const ::_pbi::DescriptorTable* const descriptor_table_stream_2eproto_deps[1] = { @@ -446,13 +477,13 @@ static ::absl::once_flag descriptor_table_stream_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_stream_2eproto = { false, false, - 1547, + 1576, descriptor_table_protodef_stream_2eproto, "stream.proto", &descriptor_table_stream_2eproto_once, descriptor_table_stream_2eproto_deps, 1, - 11, + 12, schemas, file_default_instances, TableStruct_stream_2eproto::offsets, @@ -3278,6 +3309,192 @@ void ImgInfoResponce::InternalSwap(ImgInfoResponce* other) { &descriptor_table_stream_2eproto_getter, &descriptor_table_stream_2eproto_once, file_level_metadata_stream_2eproto[10]); } +// =================================================================== + +class ComResponce::_Internal { + public: +}; + +ComResponce::ComResponce(::google::protobuf::Arena* arena) + : ::google::protobuf::Message(arena) { + SharedCtor(arena); + // @@protoc_insertion_point(arena_constructor:stream.ComResponce) +} +ComResponce::ComResponce(const ComResponce& from) : ::google::protobuf::Message() { + ComResponce* const _this = this; + (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.data_){}, + /*decltype(_impl_._cached_size_)*/ {}, + }; + _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( + from._internal_metadata_); + _impl_.data_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.data_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_data().empty()) { + _this->_impl_.data_.Set(from._internal_data(), _this->GetArenaForAllocation()); + } + + // @@protoc_insertion_point(copy_constructor:stream.ComResponce) +} +inline void ComResponce::SharedCtor(::_pb::Arena* arena) { + (void)arena; + new (&_impl_) Impl_{ + decltype(_impl_.data_){}, + /*decltype(_impl_._cached_size_)*/ {}, + }; + _impl_.data_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.data_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} +ComResponce::~ComResponce() { + // @@protoc_insertion_point(destructor:stream.ComResponce) + _internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>(); + SharedDtor(); +} +inline void ComResponce::SharedDtor() { + ABSL_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.data_.Destroy(); +} +void ComResponce::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +PROTOBUF_NOINLINE void ComResponce::Clear() { +// @@protoc_insertion_point(message_clear_start:stream.ComResponce) + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.data_.ClearToEmpty(); + _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); +} + +const char* ComResponce::_InternalParse( + const char* ptr, ::_pbi::ParseContext* ctx) { + ptr = ::_pbi::TcParser::ParseLoop(this, ptr, ctx, &_table_.header); + return ptr; +} + + +PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 +const ::_pbi::TcParseTable<0, 1, 0, 0, 2> ComResponce::_table_ = { + { + 0, // no _has_bits_ + 0, // no _extensions_ + 1, 0, // max_field_number, fast_idx_mask + offsetof(decltype(_table_), field_lookup_table), + 4294967294, // skipmap + offsetof(decltype(_table_), field_entries), + 1, // num_field_entries + 0, // num_aux_entries + offsetof(decltype(_table_), field_names), // no aux_entries + &_ComResponce_default_instance_._instance, + ::_pbi::TcParser::GenericFallback, // fallback + }, {{ + // bytes data = 1; + {::_pbi::TcParser::FastBS1, + {10, 63, 0, PROTOBUF_FIELD_OFFSET(ComResponce, _impl_.data_)}}, + }}, {{ + 65535, 65535 + }}, {{ + // bytes data = 1; + {PROTOBUF_FIELD_OFFSET(ComResponce, _impl_.data_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)}, + }}, + // no aux_entries + {{ + }}, +}; + +::uint8_t* ComResponce::_InternalSerialize( + ::uint8_t* target, + ::google::protobuf::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:stream.ComResponce) + ::uint32_t cached_has_bits = 0; + (void)cached_has_bits; + + // bytes data = 1; + if (!this->_internal_data().empty()) { + const std::string& _s = this->_internal_data(); + target = stream->WriteBytesMaybeAliased(1, _s, target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = + ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:stream.ComResponce) + return target; +} + +::size_t ComResponce::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:stream.ComResponce) + ::size_t total_size = 0; + + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // bytes data = 1; + if (!this->_internal_data().empty()) { + total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize( + this->_internal_data()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::google::protobuf::Message::ClassData ComResponce::_class_data_ = { + ::google::protobuf::Message::CopyWithSourceCheck, + ComResponce::MergeImpl +}; +const ::google::protobuf::Message::ClassData*ComResponce::GetClassData() const { return &_class_data_; } + + +void ComResponce::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:stream.ComResponce) + ABSL_DCHECK_NE(&from, _this); + ::uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_data().empty()) { + _this->_internal_set_data(from._internal_data()); + } + _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); +} + +void ComResponce::CopyFrom(const ComResponce& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:stream.ComResponce) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +PROTOBUF_NOINLINE bool ComResponce::IsInitialized() const { + return true; +} + +void ComResponce::InternalSwap(ComResponce* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.data_, lhs_arena, + &other->_impl_.data_, rhs_arena); +} + +::google::protobuf::Metadata ComResponce::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_stream_2eproto_getter, &descriptor_table_stream_2eproto_once, + file_level_metadata_stream_2eproto[11]); +} // @@protoc_insertion_point(namespace_scope) } // namespace stream namespace google { diff --git a/TestClient/protobuf/stream.pb.h b/TestClient/protobuf/stream.pb.h index 692b4e4..e627cb2 100644 --- a/TestClient/protobuf/stream.pb.h +++ b/TestClient/protobuf/stream.pb.h @@ -59,6 +59,9 @@ namespace stream { class ChainDataBlock; struct ChainDataBlockDefaultTypeInternal; extern ChainDataBlockDefaultTypeInternal _ChainDataBlock_default_instance_; +class ComResponce; +struct ComResponceDefaultTypeInternal; +extern ComResponceDefaultTypeInternal _ComResponce_default_instance_; class ImgInfoResponce; struct ImgInfoResponceDefaultTypeInternal; extern ImgInfoResponceDefaultTypeInternal _ImgInfoResponce_default_instance_; @@ -2291,6 +2294,170 @@ class ImgInfoResponce final : }; union { Impl_ _impl_; }; friend struct ::TableStruct_stream_2eproto; +};// ------------------------------------------------------------------- + +class ComResponce final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:stream.ComResponce) */ { + public: + inline ComResponce() : ComResponce(nullptr) {} + ~ComResponce() override; + template + explicit PROTOBUF_CONSTEXPR ComResponce(::google::protobuf::internal::ConstantInitialized); + + ComResponce(const ComResponce& from); + ComResponce(ComResponce&& from) noexcept + : ComResponce() { + *this = ::std::move(from); + } + + inline ComResponce& operator=(const ComResponce& from) { + CopyFrom(from); + return *this; + } + inline ComResponce& operator=(ComResponce&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance); + } + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>(); + } + + static const ::google::protobuf::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::google::protobuf::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::google::protobuf::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const ComResponce& default_instance() { + return *internal_default_instance(); + } + static inline const ComResponce* internal_default_instance() { + return reinterpret_cast( + &_ComResponce_default_instance_); + } + static constexpr int kIndexInFileMessages = + 11; + + friend void swap(ComResponce& a, ComResponce& b) { + a.Swap(&b); + } + inline void Swap(ComResponce* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::google::protobuf::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ComResponce* other) { + if (other == this) return; + ABSL_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + ComResponce* New(::google::protobuf::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::google::protobuf::Message::CopyFrom; + void CopyFrom(const ComResponce& from); + using ::google::protobuf::Message::MergeFrom; + void MergeFrom( const ComResponce& from) { + ComResponce::MergeImpl(*this, from); + } + private: + static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + ::size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final; + ::uint8_t* _InternalSerialize( + ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::google::protobuf::Arena* arena); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ComResponce* other); + + private: + friend class ::google::protobuf::internal::AnyMetadata; + static ::absl::string_view FullMessageName() { + return "stream.ComResponce"; + } + protected: + explicit ComResponce(::google::protobuf::Arena* arena); + public: + + static const ClassData _class_data_; + const ::google::protobuf::Message::ClassData*GetClassData() const final; + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kDataFieldNumber = 1, + }; + // bytes data = 1; + void clear_data() ; + const std::string& data() const; + template + void set_data(Arg_&& arg, Args_... args); + std::string* mutable_data(); + PROTOBUF_NODISCARD std::string* release_data(); + void set_allocated_data(std::string* ptr); + + private: + const std::string& _internal_data() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_data( + const std::string& value); + std::string* _internal_mutable_data(); + + public: + // @@protoc_insertion_point(class_scope:stream.ComResponce) + private: + class _Internal; + + friend class ::google::protobuf::internal::TcParser; + static const ::google::protobuf::internal::TcParseTable<0, 1, 0, 0, 2> _table_; + template friend class ::google::protobuf::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::google::protobuf::internal::ArenaStringPtr data_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + PROTOBUF_TSAN_DECLARE_MEMBER + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_stream_2eproto; }; // =================================================================== @@ -3471,6 +3638,61 @@ inline void ImgInfoResponce::_internal_set_height(::int32_t value) { _impl_.height_ = value; } +// ------------------------------------------------------------------- + +// ComResponce + +// bytes data = 1; +inline void ComResponce::clear_data() { + _impl_.data_.ClearToEmpty(); +} +inline const std::string& ComResponce::data() const { + // @@protoc_insertion_point(field_get:stream.ComResponce.data) + return _internal_data(); +} +template +inline PROTOBUF_ALWAYS_INLINE void ComResponce::set_data(Arg_&& arg, + Args_... args) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.data_.SetBytes(static_cast(arg), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:stream.ComResponce.data) +} +inline std::string* ComResponce::mutable_data() { + std::string* _s = _internal_mutable_data(); + // @@protoc_insertion_point(field_mutable:stream.ComResponce.data) + return _s; +} +inline const std::string& ComResponce::_internal_data() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.data_.Get(); +} +inline void ComResponce::_internal_set_data(const std::string& value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.data_.Set(value, GetArenaForAllocation()); +} +inline std::string* ComResponce::_internal_mutable_data() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + return _impl_.data_.Mutable( GetArenaForAllocation()); +} +inline std::string* ComResponce::release_data() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:stream.ComResponce.data) + return _impl_.data_.Release(); +} +inline void ComResponce::set_allocated_data(std::string* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.data_.SetAllocated(value, GetArenaForAllocation()); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.data_.IsDefault()) { + _impl_.data_.Set("", GetArenaForAllocation()); + } + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:stream.ComResponce.data) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ diff --git a/TestClient/protobuf/stream.proto b/TestClient/protobuf/stream.proto index bec3f9b..270abb1 100644 --- a/TestClient/protobuf/stream.proto +++ b/TestClient/protobuf/stream.proto @@ -42,7 +42,7 @@ message ParamInfo{ TYPE valueType = 3; //数据类型 } -message RequestInfo { +message RequestInfo { //读 uint32 dataType = 1; //信息类型 bytes nameKey = 2; //参数key bytes strValue = 3; //value值 @@ -51,7 +51,7 @@ message RequestInfo { repeated ParamInfo item = 6; //参数值列表(函数参数使用) } -message ResponseInfo { +message ResponseInfo { //写 uint32 dataType = 1; //信息类型 bool result = 2; //执行成功与否 repeated ParamInfo item = 3; //参数值 @@ -122,6 +122,11 @@ message ImgInfoResponce{ int32 height = 3; } +//注册功能返回信息 IOVersionStr接口返回值 +message ComResponce{ + bytes data = 1; +} + service Stream { rpc Simple(RequestInfo) returns (ResponseAny) {} // 简单模式 rpc ServerStream (RequestInfo) returns (stream ResponseInfo) {} // 服务端数据流模式 diff --git a/TestClient/问题记录.txt b/TestClient/问题记录.txt index 0f85655..359243a 100644 --- a/TestClient/问题记录.txt +++ b/TestClient/问题记录.txt @@ -4,4 +4,16 @@ m_alarmCfgMp SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); 注释掉了 -客户端参数要用带后缀的 \ No newline at end of file +客户端参数要用带后缀的 + +//点击时只执行一次代码 +static bool isenter = false; +if(点击tab){ + if(!isenter){ + func(); + isenter = true; + } +} +else { + isenter = false; +}