From 76833fe1f409cb401a156944ce6831f03edc00c8 Mon Sep 17 00:00:00 2001 From: wangxx1809 Date: Tue, 18 Jun 2024 17:44:32 +0800 Subject: [PATCH] =?UTF-8?q?AlarmCfgWrapper=E9=80=9A=E4=BF=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=8F=8A=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrintS/Config/ConfigManager.cpp | 30 +++ PrintS/Config/ConfigManager.h | 2 +- PrintS/Config/bean/AlarmCfg.cpp | 43 +++-- PrintS/Config/bean/AlarmCfg.h | 14 +- PrintS/Config/dao/AlarmCfgDao.cpp | 2 - PrintS/DataManage/DataHandle.cpp | 1 + PrintS/DataManage/RWData.h | 11 ++ PrintS/DataManage/StreamServer.cpp | 5 + PrintS/PrintS.vcxproj | 3 + PrintS/output/Release/config.hbd | Bin 323584 -> 323584 bytes PrintS/output/Release/log/2024.hbd | Bin 163840 -> 167936 bytes PrintS/protobuf/stream.pb.cc | 245 +++++++++++++++++++------ PrintS/protobuf/stream.pb.h | 173 ++++++++++++++++- PrintS/protobuf/stream.proto | 6 +- TestClient/DataManage/DataHandle.cpp | 46 +++-- TestClient/DataManage/RWData.h | 10 +- TestClient/DataManage/StreamClient.cpp | 3 +- TestClient/PrintC.vcxproj | 1 + TestClient/protobuf/stream.pb.cc | 245 +++++++++++++++++++------ TestClient/protobuf/stream.pb.h | 173 ++++++++++++++++- TestClient/protobuf/stream.proto | 6 +- 21 files changed, 860 insertions(+), 159 deletions(-) diff --git a/PrintS/Config/ConfigManager.cpp b/PrintS/Config/ConfigManager.cpp index 4cb260f..c3d224d 100644 --- a/PrintS/Config/ConfigManager.cpp +++ b/PrintS/Config/ConfigManager.cpp @@ -490,6 +490,34 @@ 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)); + + int index = 0; auto item = m_ScannerControlCfgDao->m_ScannerControlCfgMap.begin(); while (item != m_ScannerControlCfgDao->m_ScannerControlCfgMap.end()) { @@ -588,6 +616,8 @@ void ConfigManager::UpdateCfg(const ReadData& rd) { m_PowderEstimateCfg.Update(rd,POWDERESTIMATECFGPARAM); break; case COMMUNICATIONCFG: UpdateCommunicationCfg(rd); break; + case ALARMCFG: + m_AlarmCfgWrapper->UpdateCfg(rd.nameKey, (bool)ConverType::TryToI(rd.strValue)); break; default: break; diff --git a/PrintS/Config/ConfigManager.h b/PrintS/Config/ConfigManager.h index 95e45fd..099ed1b 100644 --- a/PrintS/Config/ConfigManager.h +++ b/PrintS/Config/ConfigManager.h @@ -96,7 +96,7 @@ public: ParamLimitCfg* GetParamLimitCfg() { return &m_ParamLimitCfg; } //已传 MachineCfg* GetMachineCfg() { return &m_MachineCfg; } //已传 Machine* GetMachine() { return m_Machine; } //不用传 - AlarmCfgWrapper* GetAlarmCfg() { return m_AlarmCfgWrapper; } + AlarmCfgWrapper* GetAlarmCfg() { return m_AlarmCfgWrapper; } //已传 RecoatCheckCfg* GetRecoatCheckCfg() { return &m_RecoatCheckCfg; } //已传 diff --git a/PrintS/Config/bean/AlarmCfg.cpp b/PrintS/Config/bean/AlarmCfg.cpp index b0a9f27..c675145 100644 --- a/PrintS/Config/bean/AlarmCfg.cpp +++ b/PrintS/Config/bean/AlarmCfg.cpp @@ -3,13 +3,11 @@ #include "../../LanguageManager.h" #include "../../Toast.h" -AlarmCfg::AlarmCfg() -:m_IsAlarm(false) -, m_IsShow(true) -, m_AlarmInfo("") -, m_AlarmContinueTick(0) -, m_CheckAlarmSetTick(40) -, m_Shielding(false) +AlarmCfg::AlarmCfg() //这个不用加m_baseMp + : m_IsEnable(false) + , m_IsAlarm(false) + , m_IsShow(true) + , m_CheckAlarmSetTick(40) { } @@ -18,18 +16,18 @@ AlarmCfg::~AlarmCfg() } AlarmCfg::AlarmCfg(string code, string content, int type) - :m_Code(code) + : m_Code(code) , m_Content(content) , m_Type(type) - , m_IsAlarm(false) , m_IsEnable(true) + , m_IsAlarm(false) , m_IsShow(true) - , m_AlarmInfo("") - , m_AlarmContinueTick(0) , m_CheckAlarmSetTick(40) - , m_Shielding(false) { - + //size_t ptrSize = sizeof(nullptr); //指针大小 + //void* startPtr = &m_startFlag + 1; + //size_t count = ((size_t)&m_endFlag - (size_t)startPtr) / ptrSize; + //InsertMp(startPtr, count, "_"+code); } string AlarmCfg::GetUpdateSql() @@ -50,7 +48,7 @@ string AlarmCfg::GetUpdateSql() void AlarmCfg::SetUse(bool isUse) { m_IsShow = isUse; - if (!isUse)m_IsEnable = isUse; + if (!isUse) m_IsEnable =isUse; } string AlarmCfg::GetTypeInfo(int t) @@ -311,4 +309,21 @@ void AlarmCfgWrapper::Init() { void AlarmCfgWrapper::InitShowVec() { +} + +void AlarmCfgWrapper::UpdateCfg(const string& key, bool isEnable) { + do { + if (m_StopAlarmCfgMap.find(key) != m_StopAlarmCfgMap.end()) { + m_StopAlarmCfgMap[key]->m_IsEnable = isEnable; + break; + } + if (m_PauseAlarmCfgMap.find(key) != m_PauseAlarmCfgMap.end()) { + m_PauseAlarmCfgMap[key]->m_IsEnable = isEnable; + break; + } + if (m_WarnAlarmCfgMap.find(key) != m_WarnAlarmCfgMap.end()) { + m_WarnAlarmCfgMap[key]->m_IsEnable = isEnable; + break; + } + } while (false); } \ No newline at end of file diff --git a/PrintS/Config/bean/AlarmCfg.h b/PrintS/Config/bean/AlarmCfg.h index 9d33b02..204ef0f 100644 --- a/PrintS/Config/bean/AlarmCfg.h +++ b/PrintS/Config/bean/AlarmCfg.h @@ -12,7 +12,7 @@ using namespace std; #define ALARM_TYPE_WARN 2 #define ALARM_TYPE_AUTO_PAUSE 3 -class AlarmCfg +class AlarmCfg { public: AlarmCfg(); @@ -25,15 +25,14 @@ public: int m_id; int m_Type; string m_Code; - string m_Content; - bool m_IsEnable; - bool m_IsAlarm; - bool m_IsShow; + string m_Content; //传 + bool m_IsEnable; //传 + bool m_IsAlarm; //传 + bool m_IsShow; //传 string m_AlarmInfo; unsigned int m_AlarmContinueTick; unsigned int m_CheckAlarmSetTick; bool m_Shielding; - public: static const string TABLE_NAME; static const string FIELD_ID; @@ -49,6 +48,7 @@ public: ~AlarmCfgWrapper(); void Init(); + void UpdateCfg(const string& key, bool isEnable); private: void InitShowVec(); public: @@ -56,7 +56,7 @@ public: map m_PauseAlarmCfgMap; map m_WarnAlarmCfgMap; - map m_AllAlarmMap; + map m_AllAlarmMap; //是上面3个map之和 vector m_StopAlarmShowVec; map m_ScannerComAlarmMap; diff --git a/PrintS/Config/dao/AlarmCfgDao.cpp b/PrintS/Config/dao/AlarmCfgDao.cpp index d24f0ef..0abf1ed 100644 --- a/PrintS/Config/dao/AlarmCfgDao.cpp +++ b/PrintS/Config/dao/AlarmCfgDao.cpp @@ -61,7 +61,6 @@ void AlarmCfgDao::InitBeforeFind() AlarmCfg* ScannerPowerExceptionAlarm = new AlarmCfg("ScannerPowerExceptionAlarm", u8"振镜电源异常报警", ALARM_TYPE_STOP); cfg->m_StopAlarmCfgMap[ScannerPowerExceptionAlarm->m_Code] = ScannerPowerExceptionAlarm; - AlarmCfg* HeatingPowerAirSwitchAlarm = new AlarmCfg("HeatingPowerAirSwitchAlarm", u8"加热电源空开报警", ALARM_TYPE_STOP); cfg->m_StopAlarmCfgMap[HeatingPowerAirSwitchAlarm->m_Code] = HeatingPowerAirSwitchAlarm; @@ -95,7 +94,6 @@ void AlarmCfgDao::InitBeforeFind() AlarmCfg* Laser8Alarm = new AlarmCfg("Laser8Alarm", u8"激光器8报警", ALARM_TYPE_STOP); cfg->m_StopAlarmCfgMap[Laser8Alarm->m_Code] = Laser8Alarm; - AlarmCfg* Laser1ComAlarm = new AlarmCfg("Laser1ComAlarm", u8"激光器1通讯报警", ALARM_TYPE_STOP); cfg->m_StopAlarmCfgMap[Laser1ComAlarm->m_Code] = Laser1ComAlarm; diff --git a/PrintS/DataManage/DataHandle.cpp b/PrintS/DataManage/DataHandle.cpp index 5ef3d6e..dd212d9 100644 --- a/PrintS/DataManage/DataHandle.cpp +++ b/PrintS/DataManage/DataHandle.cpp @@ -118,6 +118,7 @@ void DataHandle::DataCallBackHandle(const ReadData& msg, const std::list& case RECOATCHECKCFG: case POWDERESTIMATECFG: case COMMUNICATIONCFG: + case ALARMCFG: ConfigManager::GetInstance()->UpdateCfg(msg); break; case REQUEST: diff --git a/PrintS/DataManage/RWData.h b/PrintS/DataManage/RWData.h index 4aa0c77..37bcd48 100644 --- a/PrintS/DataManage/RWData.h +++ b/PrintS/DataManage/RWData.h @@ -33,6 +33,7 @@ enum READTYPE { RECOATCHECKCFG, POWDERESTIMATECFG, COMMUNICATIONCFG, + ALARMCFG, LOADPARAM, //装载参数 @@ -111,6 +112,11 @@ enum WRITETYPE { POWDERESTIMATECFGPARAM, //PowderEstimateCfg 参数 COMMUNICATIONCFGPARAM, //CommunicationCfg 参数 + STOPALARMCFGPARAM, //AlarmCfgWrapper stop参数 + PAUSEALARMCFGPARAM, //AlarmCfgWrapper pause参数 + WARNALARMCFGPARAM, //AlarmCfgWrapper warn参数 + + MOLDCFGPARAM, LOADCFGPARAM, ARMCFGPARAM, @@ -133,6 +139,11 @@ struct Item { std::string nameKey; //参数key std::string strValue; //value DATATYPE valueType; //数据类型 + + std::string content; //alarmcfgwrapper使用 + bool isEnable; + bool isAlarm; + bool isShow; }; class ClientInfo; diff --git a/PrintS/DataManage/StreamServer.cpp b/PrintS/DataManage/StreamServer.cpp index f2e9942..935ea0d 100644 --- a/PrintS/DataManage/StreamServer.cpp +++ b/PrintS/DataManage/StreamServer.cpp @@ -90,6 +90,11 @@ Status StreamServer::AllStream(ServerContext* context, grpc::ServerReaderWriter< paramInfo->set_namekey((*wd).nameKey); paramInfo->set_strvalue((*wd).strValue); paramInfo->set_valuetype((stream::TYPE)(*wd).valueType); + + paramInfo->set_context(wd->content); + paramInfo->set_isenable(wd->isEnable); + paramInfo->set_isalarm(wd->isAlarm); + paramInfo->set_isshow(wd->isShow); } stream->Write(response); } diff --git a/PrintS/PrintS.vcxproj b/PrintS/PrintS.vcxproj index 291c6d7..493a994 100644 --- a/PrintS/PrintS.vcxproj +++ b/PrintS/PrintS.vcxproj @@ -132,6 +132,9 @@ 4996 OldStyle /D "_CRT_SECURE_NO_WARNINGS" /D "_WINSOCK_DEPRECATED_NO_WARNINGS" %(AdditionalOptions) + + + true Console diff --git a/PrintS/output/Release/config.hbd b/PrintS/output/Release/config.hbd index a54a2ec45a7a603e7d3e63e0b7652e1375eb2820..a30fe96c013fb142b98482dfe82c5a765b220095 100644 GIT binary patch delta 12411 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 delta 12411 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 B8rc8< delta 20662 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 hJgjLwMviNPWi<=?>P3bOUmAHW0~Yz0t}9sr( @@ -583,7 +600,16 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { if (!from._internal_strvalue().empty()) { _this->_impl_.strvalue_.Set(from._internal_strvalue(), _this->GetArenaForAllocation()); } - _this->_impl_.valuetype_ = from._impl_.valuetype_; + _impl_.context_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.context_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_context().empty()) { + _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_)); // @@protoc_insertion_point(copy_constructor:stream.ParamInfo) } @@ -592,7 +618,11 @@ inline void ParamInfo::SharedCtor(::_pb::Arena* arena) { new (&_impl_) Impl_{ decltype(_impl_.namekey_){}, decltype(_impl_.strvalue_){}, + decltype(_impl_.context_){}, decltype(_impl_.valuetype_){0}, + decltype(_impl_.isenable_){false}, + decltype(_impl_.isalarm_){false}, + decltype(_impl_.isshow_){false}, /*decltype(_impl_._cached_size_)*/ {}, }; _impl_.namekey_.InitDefault(); @@ -603,6 +633,10 @@ inline void ParamInfo::SharedCtor(::_pb::Arena* arena) { #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING _impl_.strvalue_.Set("", GetArenaForAllocation()); #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.context_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.context_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING } ParamInfo::~ParamInfo() { // @@protoc_insertion_point(destructor:stream.ParamInfo) @@ -613,6 +647,7 @@ inline void ParamInfo::SharedDtor() { ABSL_DCHECK(GetArenaForAllocation() == nullptr); _impl_.namekey_.Destroy(); _impl_.strvalue_.Destroy(); + _impl_.context_.Destroy(); } void ParamInfo::SetCachedSize(int size) const { _impl_._cached_size_.Set(size); @@ -626,7 +661,10 @@ PROTOBUF_NOINLINE void ParamInfo::Clear() { _impl_.namekey_.ClearToEmpty(); _impl_.strvalue_.ClearToEmpty(); - _impl_.valuetype_ = 0; + _impl_.context_.ClearToEmpty(); + ::memset(&_impl_.valuetype_, 0, static_cast<::size_t>( + reinterpret_cast(&_impl_.isshow_) - + reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.isshow_)); _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); } @@ -638,15 +676,15 @@ const char* ParamInfo::_InternalParse( PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { +const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { { 0, // no _has_bits_ 0, // no _extensions_ - 3, 24, // max_field_number, fast_idx_mask + 7, 56, // max_field_number, fast_idx_mask offsetof(decltype(_table_), field_lookup_table), - 4294967288, // skipmap + 4294967168, // skipmap offsetof(decltype(_table_), field_entries), - 3, // num_field_entries + 7, // num_field_entries 0, // num_aux_entries offsetof(decltype(_table_), field_names), // no aux_entries &_ParamInfo_default_instance_._instance, @@ -662,6 +700,18 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { // .stream.TYPE valueType = 3; {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(ParamInfo, _impl_.valuetype_), 63>(), {24, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.valuetype_)}}, + // bytes context = 4; + {::_pbi::TcParser::FastBS1, + {34, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.context_)}}, + // bool isEnable = 5; + {::_pbi::TcParser::SingularVarintNoZag1(), + {40, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isenable_)}}, + // bool isAlarm = 6; + {::_pbi::TcParser::SingularVarintNoZag1(), + {48, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isalarm_)}}, + // bool isShow = 7; + {::_pbi::TcParser::SingularVarintNoZag1(), + {56, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_)}}, }}, {{ 65535, 65535 }}, {{ @@ -674,6 +724,18 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { // .stream.TYPE valueType = 3; {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.valuetype_), 0, 0, (0 | ::_fl::kFcSingular | ::_fl::kOpenEnum)}, + // bytes context = 4; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.context_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)}, + // bool isEnable = 5; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isenable_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBool)}, + // bool isAlarm = 6; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isalarm_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBool)}, + // bool isShow = 7; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBool)}, }}, // no aux_entries {{ @@ -706,6 +768,33 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { 3, this->_internal_valuetype(), target); } + // bytes context = 4; + if (!this->_internal_context().empty()) { + const std::string& _s = this->_internal_context(); + target = stream->WriteBytesMaybeAliased(4, _s, target); + } + + // bool isEnable = 5; + if (this->_internal_isenable() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray( + 5, this->_internal_isenable(), target); + } + + // bool isAlarm = 6; + if (this->_internal_isalarm() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray( + 6, this->_internal_isalarm(), target); + } + + // bool isShow = 7; + if (this->_internal_isshow() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray( + 7, this->_internal_isshow(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( @@ -735,12 +824,33 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { this->_internal_strvalue()); } + // bytes context = 4; + if (!this->_internal_context().empty()) { + total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize( + this->_internal_context()); + } + // .stream.TYPE valueType = 3; if (this->_internal_valuetype() != 0) { total_size += 1 + ::_pbi::WireFormatLite::EnumSize(this->_internal_valuetype()); } + // bool isEnable = 5; + if (this->_internal_isenable() != 0) { + total_size += 2; + } + + // bool isAlarm = 6; + if (this->_internal_isalarm() != 0) { + total_size += 2; + } + + // bool isShow = 7; + if (this->_internal_isshow() != 0) { + total_size += 2; + } + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } @@ -765,9 +875,21 @@ void ParamInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::p if (!from._internal_strvalue().empty()) { _this->_internal_set_strvalue(from._internal_strvalue()); } + if (!from._internal_context().empty()) { + _this->_internal_set_context(from._internal_context()); + } if (from._internal_valuetype() != 0) { _this->_internal_set_valuetype(from._internal_valuetype()); } + if (from._internal_isenable() != 0) { + _this->_internal_set_isenable(from._internal_isenable()); + } + if (from._internal_isalarm() != 0) { + _this->_internal_set_isalarm(from._internal_isalarm()); + } + if (from._internal_isshow() != 0) { + _this->_internal_set_isshow(from._internal_isshow()); + } _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); } @@ -791,7 +913,14 @@ void ParamInfo::InternalSwap(ParamInfo* other) { &other->_impl_.namekey_, rhs_arena); ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.strvalue_, lhs_arena, &other->_impl_.strvalue_, rhs_arena); - swap(_impl_.valuetype_, other->_impl_.valuetype_); + ::_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_.valuetype_)>( + reinterpret_cast(&_impl_.valuetype_), + reinterpret_cast(&other->_impl_.valuetype_)); } ::google::protobuf::Metadata ParamInfo::GetMetadata() const { diff --git a/PrintS/protobuf/stream.pb.h b/PrintS/protobuf/stream.pb.h index e627cb2..50f06fd 100644 --- a/PrintS/protobuf/stream.pb.h +++ b/PrintS/protobuf/stream.pb.h @@ -310,7 +310,11 @@ class ParamInfo final : enum : int { kNameKeyFieldNumber = 1, kStrValueFieldNumber = 2, + kContextFieldNumber = 4, kValueTypeFieldNumber = 3, + kIsEnableFieldNumber = 5, + kIsAlarmFieldNumber = 6, + kIsShowFieldNumber = 7, }; // bytes nameKey = 1; void clear_namekey() ; @@ -343,6 +347,22 @@ class ParamInfo final : const std::string& value); std::string* _internal_mutable_strvalue(); + public: + // bytes context = 4; + void clear_context() ; + const std::string& context() const; + template + void set_context(Arg_&& arg, Args_... args); + std::string* mutable_context(); + PROTOBUF_NODISCARD std::string* release_context(); + void set_allocated_context(std::string* ptr); + + private: + const std::string& _internal_context() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_context( + const std::string& value); + std::string* _internal_mutable_context(); + public: // .stream.TYPE valueType = 3; void clear_valuetype() ; @@ -353,20 +373,54 @@ class ParamInfo final : ::stream::TYPE _internal_valuetype() const; void _internal_set_valuetype(::stream::TYPE value); + public: + // bool isEnable = 5; + void clear_isenable() ; + bool isenable() const; + void set_isenable(bool value); + + private: + bool _internal_isenable() const; + void _internal_set_isenable(bool value); + + public: + // bool isAlarm = 6; + void clear_isalarm() ; + bool isalarm() const; + void set_isalarm(bool value); + + private: + bool _internal_isalarm() const; + void _internal_set_isalarm(bool value); + + public: + // bool isShow = 7; + void clear_isshow() ; + bool isshow() const; + void set_isshow(bool value); + + private: + bool _internal_isshow() const; + void _internal_set_isshow(bool value); + public: // @@protoc_insertion_point(class_scope:stream.ParamInfo) private: class _Internal; friend class ::google::protobuf::internal::TcParser; - static const ::google::protobuf::internal::TcParseTable<2, 3, 0, 0, 2> _table_; + static const ::google::protobuf::internal::TcParseTable<3, 7, 0, 0, 2> _table_; template friend class ::google::protobuf::Arena::InternalHelper; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; struct Impl_ { ::google::protobuf::internal::ArenaStringPtr namekey_; ::google::protobuf::internal::ArenaStringPtr strvalue_; + ::google::protobuf::internal::ArenaStringPtr context_; int valuetype_; + bool isenable_; + bool isalarm_; + bool isshow_; mutable ::google::protobuf::internal::CachedSize _cached_size_; PROTOBUF_TSAN_DECLARE_MEMBER }; @@ -2600,6 +2654,123 @@ inline void ParamInfo::_internal_set_valuetype(::stream::TYPE value) { _impl_.valuetype_ = value; } +// bytes context = 4; +inline void ParamInfo::clear_context() { + _impl_.context_.ClearToEmpty(); +} +inline const std::string& ParamInfo::context() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.context) + return _internal_context(); +} +template +inline PROTOBUF_ALWAYS_INLINE void ParamInfo::set_context(Arg_&& arg, + Args_... args) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.context_.SetBytes(static_cast(arg), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:stream.ParamInfo.context) +} +inline std::string* ParamInfo::mutable_context() { + std::string* _s = _internal_mutable_context(); + // @@protoc_insertion_point(field_mutable:stream.ParamInfo.context) + return _s; +} +inline const std::string& ParamInfo::_internal_context() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.context_.Get(); +} +inline void ParamInfo::_internal_set_context(const std::string& value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.context_.Set(value, GetArenaForAllocation()); +} +inline std::string* ParamInfo::_internal_mutable_context() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + return _impl_.context_.Mutable( GetArenaForAllocation()); +} +inline std::string* ParamInfo::release_context() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:stream.ParamInfo.context) + return _impl_.context_.Release(); +} +inline void ParamInfo::set_allocated_context(std::string* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.context_.SetAllocated(value, GetArenaForAllocation()); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.context_.IsDefault()) { + _impl_.context_.Set("", GetArenaForAllocation()); + } + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:stream.ParamInfo.context) +} + +// bool isEnable = 5; +inline void ParamInfo::clear_isenable() { + _impl_.isenable_ = false; +} +inline bool ParamInfo::isenable() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.isEnable) + return _internal_isenable(); +} +inline void ParamInfo::set_isenable(bool value) { + _internal_set_isenable(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.isEnable) +} +inline bool ParamInfo::_internal_isenable() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.isenable_; +} +inline void ParamInfo::_internal_set_isenable(bool value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.isenable_ = value; +} + +// bool isAlarm = 6; +inline void ParamInfo::clear_isalarm() { + _impl_.isalarm_ = false; +} +inline bool ParamInfo::isalarm() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.isAlarm) + return _internal_isalarm(); +} +inline void ParamInfo::set_isalarm(bool value) { + _internal_set_isalarm(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.isAlarm) +} +inline bool ParamInfo::_internal_isalarm() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.isalarm_; +} +inline void ParamInfo::_internal_set_isalarm(bool value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.isalarm_ = value; +} + +// bool isShow = 7; +inline void ParamInfo::clear_isshow() { + _impl_.isshow_ = false; +} +inline bool ParamInfo::isshow() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.isShow) + return _internal_isshow(); +} +inline void ParamInfo::set_isshow(bool value) { + _internal_set_isshow(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.isShow) +} +inline bool ParamInfo::_internal_isshow() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.isshow_; +} +inline void ParamInfo::_internal_set_isshow(bool value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.isshow_ = value; +} + // ------------------------------------------------------------------- // RequestInfo diff --git a/PrintS/protobuf/stream.proto b/PrintS/protobuf/stream.proto index 270abb1..6a1d0a3 100644 --- a/PrintS/protobuf/stream.proto +++ b/PrintS/protobuf/stream.proto @@ -38,8 +38,12 @@ enum DATAHANDLE { message ParamInfo{ bytes nameKey = 1; //参数key bytes strValue = 2; //value - //bool isOutput = 2; //是否只读 TYPE valueType = 3; //数据类型 + + bytes context = 4; //alarmcfg 使用 + bool isEnable = 5; + bool isAlarm = 6; + bool isShow = 7; } message RequestInfo { //读 diff --git a/TestClient/DataManage/DataHandle.cpp b/TestClient/DataManage/DataHandle.cpp index 0211368..d08f40d 100644 --- a/TestClient/DataManage/DataHandle.cpp +++ b/TestClient/DataManage/DataHandle.cpp @@ -82,11 +82,19 @@ void DataHandle::PrintValue(const ReadData& msg){ while (it != msg.its.end()) { 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, it->strValue.data(), valueType.data()); + 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); + } + else { + printf("接收:dataType:%d,nameKey:%*s, strvalue:%*s, valueType:%s\n", + msg.dataType, 33, it->nameKey.data(), 13, it->strValue.data(), valueType.data()); + } ++it; } printf("共有参数%zd个...\n", msg.its.size()); + if(m_printIndex == LASERPARAM || m_printIndex == XYSCANSTATE){ static int count = 0; ++count; @@ -170,18 +178,21 @@ void DataHandle::ParamReadUsage() { printf(" 33: " COLOR_YELLOW "print recoatcheck cfg param data...\n" COLOR_RESET); printf(" 34: " COLOR_YELLOW "print powderestimate cfg param data...\n" COLOR_RESET); printf(" 35: " COLOR_YELLOW "print communication cfg param data...\n" COLOR_RESET); + 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(" 36: " COLOR_YELLOW "print moldcfg param data...\n" COLOR_RESET); - printf(" 37: " COLOR_YELLOW "print loadcfg param data...\n" COLOR_RESET); - printf(" 38: " COLOR_YELLOW "print armcfgparam data...\n" COLOR_RESET); - printf(" 39: " COLOR_YELLOW "print supplycfgparam data...\n" COLOR_RESET); - printf(" 40: " COLOR_YELLOW "print cleancfgparam data...\n" COLOR_RESET); - printf(" 41: " COLOR_YELLOW "print elecfgparam data...\n" COLOR_RESET); - printf(" 42: " COLOR_YELLOW "print loadparamrsp data...\n" COLOR_RESET); - printf(" 43: " COLOR_YELLOW "print scan ctrl state data...\n" COLOR_RESET); - printf(" 44: " COLOR_YELLOW "print scan ctrl Param data...\n" COLOR_RESET); - printf(" 45: " COLOR_YELLOW "print xy scan state data...\n" COLOR_RESET); - printf(" 46: " COLOR_YELLOW "print camera 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); } int DataHandle::Request(int index) { @@ -309,6 +320,15 @@ void DataHandle::UpdateParam(const string& input) { case COMMUNICATIONCFGPARAM: PushMsg(COMMUNICATIONCFG, "Type_XT_PURIFIER", to_string(4), iINT); //CommunicationCfg test break; + case STOPALARMCFGPARAM: //AlarmCfgWrapper stop参数 + PushMsg(ALARMCFG, "WindOverLimitAlarm", to_string(0), iINT); + break; + case PAUSEALARMCFGPARAM: //AlarmCfgWrapper pause参数 + PushMsg(ALARMCFG, "HeatingDisconnectAlarm", to_string(0), iINT); + break; + case WARNALARMCFGPARAM: //AlarmCfgWrapper warn参数 + PushMsg(ALARMCFG, "SupplyPipeBlockWarn", to_string(0), iINT); + break; case ELECFGPARAM: break; case LOADPARAMRSP: diff --git a/TestClient/DataManage/RWData.h b/TestClient/DataManage/RWData.h index 3a77770..c01d057 100644 --- a/TestClient/DataManage/RWData.h +++ b/TestClient/DataManage/RWData.h @@ -47,6 +47,9 @@ enum READTYPE { RECOATCHECKCFGPARAM, //RecoatCheckCfg 参数 POWDERESTIMATECFGPARAM, //PowderestimateCfg 参数 COMMUNICATIONCFGPARAM, //CommunicationCfg 参数 + STOPALARMCFGPARAM, //AlarmCfgWrapper stop参数 + PAUSEALARMCFGPARAM, //AlarmCfgWrapper pause参数 + WARNALARMCFGPARAM, //AlarmCfgWrapper warn参数 MOLDCFGPARAM, LOADCFGPARAM, @@ -89,6 +92,11 @@ struct Item { std::string strValue; //value //bool isOutPut; //是否只读 false:只读 DATATYPE valueType; //数据类型 + + std::string content; //alarmcfgwrapper使用 + bool isEnable; + bool isAlarm; + bool isShow; }; struct ReadData { @@ -129,9 +137,9 @@ enum WRITETYPE { RECOATCHECKCFG, POWDERESTIMATECFG, COMMUNICATIONCFG, + ALARMCFG, LOADPARAM, //装载参数 - SCANCTRLFUNC, //振镜控制函数 REQUEST = 100, //获取配置信息 test用 diff --git a/TestClient/DataManage/StreamClient.cpp b/TestClient/DataManage/StreamClient.cpp index 7f2df7e..c66f37c 100644 --- a/TestClient/DataManage/StreamClient.cpp +++ b/TestClient/DataManage/StreamClient.cpp @@ -73,7 +73,8 @@ void StreamClient::AllStream() { readData.dataType = (READTYPE)readInfo.datatype(); for (const ::stream::ParamInfo& it : readInfo.item()) { - readData.its.emplace_back(Item{ it.namekey(),it.strvalue(),(DATATYPE)it.valuetype()}); + readData.its.emplace_back(Item{ it.namekey(),it.strvalue(),(DATATYPE)it.valuetype() + ,it.context(),it.isenable(),it.isalarm(),it.isshow()}); //printf("接收到服务端消息:dataType:%d,nameKey:%s, strvalue:%s,valueType:%d\n", // readData.dataType, it.namekey().data(), it.strvalue().c_str(), it.valuetype()); } diff --git a/TestClient/PrintC.vcxproj b/TestClient/PrintC.vcxproj index 664cb1f..80d8948 100644 --- a/TestClient/PrintC.vcxproj +++ b/TestClient/PrintC.vcxproj @@ -127,6 +127,7 @@ 4996 Disabled + true Console diff --git a/TestClient/protobuf/stream.pb.cc b/TestClient/protobuf/stream.pb.cc index 327a184..2cc1ee5 100644 --- a/TestClient/protobuf/stream.pb.cc +++ b/TestClient/protobuf/stream.pb.cc @@ -32,7 +32,14 @@ PROTOBUF_CONSTEXPR ParamInfo::ParamInfo(::_pbi::ConstantInitialized) &::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}, }, + /*decltype(_impl_.context_)*/ { + &::_pbi::fixed_address_empty_string, + ::_pbi::ConstantInitialized{}, + }, /*decltype(_impl_.valuetype_)*/ 0, + /*decltype(_impl_.isenable_)*/ false, + /*decltype(_impl_.isalarm_)*/ false, + /*decltype(_impl_.isshow_)*/ false, /*decltype(_impl_._cached_size_)*/ {}, } {} struct ParamInfoDefaultTypeInternal { @@ -272,6 +279,10 @@ const ::uint32_t TableStruct_stream_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.namekey_), PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.strvalue_), PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.valuetype_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.context_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isenable_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isalarm_), + PROTOBUF_FIELD_OFFSET(::stream::ParamInfo, _impl_.isshow_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::stream::RequestInfo, _internal_metadata_), ~0u, // no _extensions_ @@ -400,17 +411,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)}, - {11, -1, -1, sizeof(::stream::RequestInfo)}, - {25, -1, -1, sizeof(::stream::ResponseInfo)}, - {36, 45, -1, sizeof(::stream::ResponseAny)}, - {46, -1, -1, sizeof(::stream::LayerData)}, - {59, -1, -1, sizeof(::stream::LayerDataBlock)}, - {73, -1, -1, sizeof(::stream::VectorDataBlock)}, - {85, -1, -1, sizeof(::stream::ChainDataBlock)}, - {95, -1, -1, sizeof(::stream::Point)}, - {105, -1, -1, sizeof(::stream::RegResponce)}, - {114, -1, -1, sizeof(::stream::ImgInfoResponce)}, - {125, -1, -1, sizeof(::stream::ComResponce)}, + {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)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -429,45 +440,47 @@ 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\"O\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.s" - "tream.TYPE\"\254\001\n\013RequestInfo\022\020\n\010dataType\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\nhand" - "leType\030\005 \001(\0162\022.stream.DATAHANDLE\022\037\n\004item" - "\030\006 \003(\0132\021.stream.ParamInfo\"Q\n\014ResponseInf" - "o\022\020\n\010dataType\030\001 \001(\r\022\016\n\006result\030\002 \001(\010\022\037\n\004i" - "tem\030\003 \003(\0132\021.stream.ParamInfo\"1\n\013Response" - "Any\022\"\n\004data\030\001 \001(\0132\024.google.protobuf.Any\"" - "\210\001\n\tLayerData\022\023\n\013zCooldinate\030\001 \001(\002\022\016\n\006po" - "wder\030\002 \001(\002\022\026\n\016layerThickness\030\003 \001(\002\022.\n\016la" - "yerDataBlock\030\004 \003(\0132\026.stream.LayerDataBlo" - "ck\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\013chainBlocks\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\010" - "pointVec\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\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\"\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" + "any.proto\"\223\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" }; static const ::_pbi::DescriptorTable* const descriptor_table_stream_2eproto_deps[1] = { @@ -477,7 +490,7 @@ static ::absl::once_flag descriptor_table_stream_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_stream_2eproto = { false, false, - 1576, + 1645, descriptor_table_protodef_stream_2eproto, "stream.proto", &descriptor_table_stream_2eproto_once, @@ -564,7 +577,11 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { new (&_impl_) Impl_{ decltype(_impl_.namekey_){}, decltype(_impl_.strvalue_){}, + decltype(_impl_.context_){}, decltype(_impl_.valuetype_){}, + decltype(_impl_.isenable_){}, + decltype(_impl_.isalarm_){}, + decltype(_impl_.isshow_){}, /*decltype(_impl_._cached_size_)*/ {}, }; _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( @@ -583,7 +600,16 @@ ParamInfo::ParamInfo(const ParamInfo& from) : ::google::protobuf::Message() { if (!from._internal_strvalue().empty()) { _this->_impl_.strvalue_.Set(from._internal_strvalue(), _this->GetArenaForAllocation()); } - _this->_impl_.valuetype_ = from._impl_.valuetype_; + _impl_.context_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.context_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_context().empty()) { + _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_)); // @@protoc_insertion_point(copy_constructor:stream.ParamInfo) } @@ -592,7 +618,11 @@ inline void ParamInfo::SharedCtor(::_pb::Arena* arena) { new (&_impl_) Impl_{ decltype(_impl_.namekey_){}, decltype(_impl_.strvalue_){}, + decltype(_impl_.context_){}, decltype(_impl_.valuetype_){0}, + decltype(_impl_.isenable_){false}, + decltype(_impl_.isalarm_){false}, + decltype(_impl_.isshow_){false}, /*decltype(_impl_._cached_size_)*/ {}, }; _impl_.namekey_.InitDefault(); @@ -603,6 +633,10 @@ inline void ParamInfo::SharedCtor(::_pb::Arena* arena) { #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING _impl_.strvalue_.Set("", GetArenaForAllocation()); #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.context_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.context_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING } ParamInfo::~ParamInfo() { // @@protoc_insertion_point(destructor:stream.ParamInfo) @@ -613,6 +647,7 @@ inline void ParamInfo::SharedDtor() { ABSL_DCHECK(GetArenaForAllocation() == nullptr); _impl_.namekey_.Destroy(); _impl_.strvalue_.Destroy(); + _impl_.context_.Destroy(); } void ParamInfo::SetCachedSize(int size) const { _impl_._cached_size_.Set(size); @@ -626,7 +661,10 @@ PROTOBUF_NOINLINE void ParamInfo::Clear() { _impl_.namekey_.ClearToEmpty(); _impl_.strvalue_.ClearToEmpty(); - _impl_.valuetype_ = 0; + _impl_.context_.ClearToEmpty(); + ::memset(&_impl_.valuetype_, 0, static_cast<::size_t>( + reinterpret_cast(&_impl_.isshow_) - + reinterpret_cast(&_impl_.valuetype_)) + sizeof(_impl_.isshow_)); _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); } @@ -638,15 +676,15 @@ const char* ParamInfo::_InternalParse( PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { +const ::_pbi::TcParseTable<3, 7, 0, 0, 2> ParamInfo::_table_ = { { 0, // no _has_bits_ 0, // no _extensions_ - 3, 24, // max_field_number, fast_idx_mask + 7, 56, // max_field_number, fast_idx_mask offsetof(decltype(_table_), field_lookup_table), - 4294967288, // skipmap + 4294967168, // skipmap offsetof(decltype(_table_), field_entries), - 3, // num_field_entries + 7, // num_field_entries 0, // num_aux_entries offsetof(decltype(_table_), field_names), // no aux_entries &_ParamInfo_default_instance_._instance, @@ -662,6 +700,18 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { // .stream.TYPE valueType = 3; {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(ParamInfo, _impl_.valuetype_), 63>(), {24, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.valuetype_)}}, + // bytes context = 4; + {::_pbi::TcParser::FastBS1, + {34, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.context_)}}, + // bool isEnable = 5; + {::_pbi::TcParser::SingularVarintNoZag1(), + {40, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isenable_)}}, + // bool isAlarm = 6; + {::_pbi::TcParser::SingularVarintNoZag1(), + {48, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isalarm_)}}, + // bool isShow = 7; + {::_pbi::TcParser::SingularVarintNoZag1(), + {56, 63, 0, PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_)}}, }}, {{ 65535, 65535 }}, {{ @@ -674,6 +724,18 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { // .stream.TYPE valueType = 3; {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.valuetype_), 0, 0, (0 | ::_fl::kFcSingular | ::_fl::kOpenEnum)}, + // bytes context = 4; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.context_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)}, + // bool isEnable = 5; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isenable_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBool)}, + // bool isAlarm = 6; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isalarm_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBool)}, + // bool isShow = 7; + {PROTOBUF_FIELD_OFFSET(ParamInfo, _impl_.isshow_), 0, 0, + (0 | ::_fl::kFcSingular | ::_fl::kBool)}, }}, // no aux_entries {{ @@ -706,6 +768,33 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { 3, this->_internal_valuetype(), target); } + // bytes context = 4; + if (!this->_internal_context().empty()) { + const std::string& _s = this->_internal_context(); + target = stream->WriteBytesMaybeAliased(4, _s, target); + } + + // bool isEnable = 5; + if (this->_internal_isenable() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray( + 5, this->_internal_isenable(), target); + } + + // bool isAlarm = 6; + if (this->_internal_isalarm() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray( + 6, this->_internal_isalarm(), target); + } + + // bool isShow = 7; + if (this->_internal_isshow() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray( + 7, this->_internal_isshow(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( @@ -735,12 +824,33 @@ const ::_pbi::TcParseTable<2, 3, 0, 0, 2> ParamInfo::_table_ = { this->_internal_strvalue()); } + // bytes context = 4; + if (!this->_internal_context().empty()) { + total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize( + this->_internal_context()); + } + // .stream.TYPE valueType = 3; if (this->_internal_valuetype() != 0) { total_size += 1 + ::_pbi::WireFormatLite::EnumSize(this->_internal_valuetype()); } + // bool isEnable = 5; + if (this->_internal_isenable() != 0) { + total_size += 2; + } + + // bool isAlarm = 6; + if (this->_internal_isalarm() != 0) { + total_size += 2; + } + + // bool isShow = 7; + if (this->_internal_isshow() != 0) { + total_size += 2; + } + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } @@ -765,9 +875,21 @@ void ParamInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::p if (!from._internal_strvalue().empty()) { _this->_internal_set_strvalue(from._internal_strvalue()); } + if (!from._internal_context().empty()) { + _this->_internal_set_context(from._internal_context()); + } if (from._internal_valuetype() != 0) { _this->_internal_set_valuetype(from._internal_valuetype()); } + if (from._internal_isenable() != 0) { + _this->_internal_set_isenable(from._internal_isenable()); + } + if (from._internal_isalarm() != 0) { + _this->_internal_set_isalarm(from._internal_isalarm()); + } + if (from._internal_isshow() != 0) { + _this->_internal_set_isshow(from._internal_isshow()); + } _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); } @@ -791,7 +913,14 @@ void ParamInfo::InternalSwap(ParamInfo* other) { &other->_impl_.namekey_, rhs_arena); ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.strvalue_, lhs_arena, &other->_impl_.strvalue_, rhs_arena); - swap(_impl_.valuetype_, other->_impl_.valuetype_); + ::_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_.valuetype_)>( + reinterpret_cast(&_impl_.valuetype_), + reinterpret_cast(&other->_impl_.valuetype_)); } ::google::protobuf::Metadata ParamInfo::GetMetadata() const { diff --git a/TestClient/protobuf/stream.pb.h b/TestClient/protobuf/stream.pb.h index e627cb2..50f06fd 100644 --- a/TestClient/protobuf/stream.pb.h +++ b/TestClient/protobuf/stream.pb.h @@ -310,7 +310,11 @@ class ParamInfo final : enum : int { kNameKeyFieldNumber = 1, kStrValueFieldNumber = 2, + kContextFieldNumber = 4, kValueTypeFieldNumber = 3, + kIsEnableFieldNumber = 5, + kIsAlarmFieldNumber = 6, + kIsShowFieldNumber = 7, }; // bytes nameKey = 1; void clear_namekey() ; @@ -343,6 +347,22 @@ class ParamInfo final : const std::string& value); std::string* _internal_mutable_strvalue(); + public: + // bytes context = 4; + void clear_context() ; + const std::string& context() const; + template + void set_context(Arg_&& arg, Args_... args); + std::string* mutable_context(); + PROTOBUF_NODISCARD std::string* release_context(); + void set_allocated_context(std::string* ptr); + + private: + const std::string& _internal_context() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_context( + const std::string& value); + std::string* _internal_mutable_context(); + public: // .stream.TYPE valueType = 3; void clear_valuetype() ; @@ -353,20 +373,54 @@ class ParamInfo final : ::stream::TYPE _internal_valuetype() const; void _internal_set_valuetype(::stream::TYPE value); + public: + // bool isEnable = 5; + void clear_isenable() ; + bool isenable() const; + void set_isenable(bool value); + + private: + bool _internal_isenable() const; + void _internal_set_isenable(bool value); + + public: + // bool isAlarm = 6; + void clear_isalarm() ; + bool isalarm() const; + void set_isalarm(bool value); + + private: + bool _internal_isalarm() const; + void _internal_set_isalarm(bool value); + + public: + // bool isShow = 7; + void clear_isshow() ; + bool isshow() const; + void set_isshow(bool value); + + private: + bool _internal_isshow() const; + void _internal_set_isshow(bool value); + public: // @@protoc_insertion_point(class_scope:stream.ParamInfo) private: class _Internal; friend class ::google::protobuf::internal::TcParser; - static const ::google::protobuf::internal::TcParseTable<2, 3, 0, 0, 2> _table_; + static const ::google::protobuf::internal::TcParseTable<3, 7, 0, 0, 2> _table_; template friend class ::google::protobuf::Arena::InternalHelper; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; struct Impl_ { ::google::protobuf::internal::ArenaStringPtr namekey_; ::google::protobuf::internal::ArenaStringPtr strvalue_; + ::google::protobuf::internal::ArenaStringPtr context_; int valuetype_; + bool isenable_; + bool isalarm_; + bool isshow_; mutable ::google::protobuf::internal::CachedSize _cached_size_; PROTOBUF_TSAN_DECLARE_MEMBER }; @@ -2600,6 +2654,123 @@ inline void ParamInfo::_internal_set_valuetype(::stream::TYPE value) { _impl_.valuetype_ = value; } +// bytes context = 4; +inline void ParamInfo::clear_context() { + _impl_.context_.ClearToEmpty(); +} +inline const std::string& ParamInfo::context() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.context) + return _internal_context(); +} +template +inline PROTOBUF_ALWAYS_INLINE void ParamInfo::set_context(Arg_&& arg, + Args_... args) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.context_.SetBytes(static_cast(arg), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:stream.ParamInfo.context) +} +inline std::string* ParamInfo::mutable_context() { + std::string* _s = _internal_mutable_context(); + // @@protoc_insertion_point(field_mutable:stream.ParamInfo.context) + return _s; +} +inline const std::string& ParamInfo::_internal_context() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.context_.Get(); +} +inline void ParamInfo::_internal_set_context(const std::string& value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.context_.Set(value, GetArenaForAllocation()); +} +inline std::string* ParamInfo::_internal_mutable_context() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + return _impl_.context_.Mutable( GetArenaForAllocation()); +} +inline std::string* ParamInfo::release_context() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:stream.ParamInfo.context) + return _impl_.context_.Release(); +} +inline void ParamInfo::set_allocated_context(std::string* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.context_.SetAllocated(value, GetArenaForAllocation()); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.context_.IsDefault()) { + _impl_.context_.Set("", GetArenaForAllocation()); + } + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:stream.ParamInfo.context) +} + +// bool isEnable = 5; +inline void ParamInfo::clear_isenable() { + _impl_.isenable_ = false; +} +inline bool ParamInfo::isenable() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.isEnable) + return _internal_isenable(); +} +inline void ParamInfo::set_isenable(bool value) { + _internal_set_isenable(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.isEnable) +} +inline bool ParamInfo::_internal_isenable() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.isenable_; +} +inline void ParamInfo::_internal_set_isenable(bool value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.isenable_ = value; +} + +// bool isAlarm = 6; +inline void ParamInfo::clear_isalarm() { + _impl_.isalarm_ = false; +} +inline bool ParamInfo::isalarm() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.isAlarm) + return _internal_isalarm(); +} +inline void ParamInfo::set_isalarm(bool value) { + _internal_set_isalarm(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.isAlarm) +} +inline bool ParamInfo::_internal_isalarm() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.isalarm_; +} +inline void ParamInfo::_internal_set_isalarm(bool value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.isalarm_ = value; +} + +// bool isShow = 7; +inline void ParamInfo::clear_isshow() { + _impl_.isshow_ = false; +} +inline bool ParamInfo::isshow() const { + // @@protoc_insertion_point(field_get:stream.ParamInfo.isShow) + return _internal_isshow(); +} +inline void ParamInfo::set_isshow(bool value) { + _internal_set_isshow(value); + // @@protoc_insertion_point(field_set:stream.ParamInfo.isShow) +} +inline bool ParamInfo::_internal_isshow() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.isshow_; +} +inline void ParamInfo::_internal_set_isshow(bool value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.isshow_ = value; +} + // ------------------------------------------------------------------- // RequestInfo diff --git a/TestClient/protobuf/stream.proto b/TestClient/protobuf/stream.proto index 270abb1..6a1d0a3 100644 --- a/TestClient/protobuf/stream.proto +++ b/TestClient/protobuf/stream.proto @@ -38,8 +38,12 @@ enum DATAHANDLE { message ParamInfo{ bytes nameKey = 1; //参数key bytes strValue = 2; //value - //bool isOutput = 2; //是否只读 TYPE valueType = 3; //数据类型 + + bytes context = 4; //alarmcfg 使用 + bool isEnable = 5; + bool isAlarm = 6; + bool isShow = 7; } message RequestInfo { //读