reserve #xxx proc id for internal use.
| | |
| | | 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."); |
| | | } |
| | | |
| | |
| | | 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 { |
| | |
| | | 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; |
| | |
| | | ~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); |
| | |
| | | // 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()); |