From 1c92e4cbc85f9501660444cb76ebb06770da9376 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期五, 21 五月 2021 15:36:11 +0800 Subject: [PATCH] reserve #xxx proc id for internal use. --- utest/api_test.cpp | 1 + box/center_topic_node.cpp | 11 +++++++++-- src/topic_node.h | 3 ++- src/topic_node.cpp | 8 +++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/box/center_topic_node.cpp b/box/center_topic_node.cpp index 82b38ca..859aa8b 100644 --- a/box/center_topic_node.cpp +++ b/box/center_topic_node.cpp @@ -79,7 +79,7 @@ ProcInfo info; info.set_proc_id("#center.node"); info.set_name("center node"); - if (!pnode_->Register(info, reply, timeout)) { + if (!pnode_->UniRegister(true, info, reply, timeout)) { throw std::runtime_error("center node register failed."); } @@ -92,7 +92,14 @@ auto onRequest = [this](void *src_info, std::string &client_proc_id, MsgRequestTopic &request) { auto reply = MakeReply<MsgRequestTopicReply>(eSuccess); if (request.topic() == kTopicQueryProc) { - auto data = (*pscenter_)->QueryProc(request.data()); + std::string id; + if (!request.data().empty()) { + Json json; + if (json.parse(request.data())) { + id = json.get("proc_id", ""); + } + } + auto data = (*pscenter_)->QueryProc(id); *reply.mutable_errmsg() = data.errmsg(); reply.set_data(ToJson(data)); } else { diff --git a/src/topic_node.cpp b/src/topic_node.cpp index fce7ed6..124d329 100644 --- a/src/topic_node.cpp +++ b/src/topic_node.cpp @@ -143,8 +143,14 @@ for (auto &p : sockets_) { p->Stop(); } } -bool TopicNode::Register(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms) +bool TopicNode::UniRegister(const bool internal, ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms) { + auto ValidUserProcId = [](const std::string &id) { return !id.empty() && id[0] != '#'; }; + if (!internal && !ValidUserProcId(proc.proc_id())) { + SetLastError(eInvalidInput, "invalid proc id :'" + proc.proc_id() + "'"); + return false; + } + { std::lock_guard<std::mutex> lk(mutex_); info_ = proc; diff --git a/src/topic_node.h b/src/topic_node.h index c115010..c421048 100644 --- a/src/topic_node.h +++ b/src/topic_node.h @@ -43,7 +43,8 @@ ~TopicNode(); // topic node - bool Register(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms); + bool Register(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms) { return UniRegister(false, proc, reply_body, timeout_ms); } + bool UniRegister(const bool internal, ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms); bool Unregister(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms); bool Heartbeat(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms); bool Heartbeat(const int timeout_ms); diff --git a/utest/api_test.cpp b/utest/api_test.cpp index fb1587b..5fa46da 100644 --- a/utest/api_test.cpp +++ b/utest/api_test.cpp @@ -206,6 +206,7 @@ // query procs with normal topic request MsgRequestTopic req; req.set_topic("@center_query_procs"); + // req.set_data("{\"proc_id\":\"#center.node\"}"); std::string s(req.SerializeAsString()); // Sleep(10ms, false); std::string dest(BHAddress().SerializeAsString()); -- Gitblit v1.8.0