From cf0a3209b51babf72469d962914db0dac2e5f52c Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 27 十二月 2022 14:13:30 +0800 Subject: [PATCH] add get msg timeout --- cbhomeclient.cpp | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 37 insertions(+), 16 deletions(-) diff --git a/cbhomeclient.cpp b/cbhomeclient.cpp index c101e66..b2d084a 100644 --- a/cbhomeclient.cpp +++ b/cbhomeclient.cpp @@ -82,7 +82,7 @@ Msg to_bus(client* cli, F&& f, Args&&... args){ Msg mesg; if (std::forward<F>(f)(cli->bus, std::forward<Args>(args)...)) - mesg = std::move(msg(crop<Is...>(tuple<Args...>(std::forward<Args>(args)...)))); + mesg = msg(crop<Is...>(tuple<Args...>(std::forward<Args>(args)...))); return mesg; } @@ -96,7 +96,7 @@ tie(d, s) = tp; if (m.ParseFromArray(d, s)) { bus_free(d, s); - msg = std::move(make_tuple(true, std::move(m))); + msg = make_tuple(true, std::move(m)); break; } m.Clear(); @@ -110,8 +110,8 @@ template <size_t... Is, class F, class... Args> MsgCR to_center(client* cli, F&& f, Args&&... args){ MsgCR msg(dummy()); - auto vmsg = std::move(to_bus<Is...>(cli, std::forward<F>(f), std::forward<Args>(args)...)); - if (!vmsg.empty()) msg = std::move(parse(cli, vmsg.at(0))); + auto vmsg = to_bus<Is...>(cli, std::forward<F>(f), std::forward<Args>(args)...); + if (!vmsg.empty()) msg = parse(cli, vmsg.at(0)); return msg; } @@ -124,8 +124,8 @@ const auto& tpc = tlist.SerializeAsString(); void* replymsg = NULL; int replysize = 0; - msg = std::move(to_center<2,3>(cli, std::forward<F>(f), - tpc.data(), tpc.size(), &replymsg, &replysize, sndto)); + msg = to_center<2,3>(cli, std::forward<F>(f), + tpc.data(), tpc.size(), &replymsg, &replysize, sndto); return msg; } @@ -248,11 +248,7 @@ delete cli; } -struct csubmsg* bus_client_get_submsg(void* handle){ - client* cli = ptr(handle); - Msg msg = std::move(cli->sub_q->pop()); - if (msg.empty()) return NULL; - +static struct csubmsg* parse_submsg(const Msg& msg){ void* procid = NULL, *data = NULL; int pids = 0, size = 0; @@ -265,12 +261,23 @@ return pmsg; } - -struct creqmsg* bus_client_get_reqmsg(void* handle, void** src){ +struct csubmsg* bus_client_get_submsg_intime(void* handle, const size_t ms){ client* cli = ptr(handle); - Msg msg = std::move(cli->readreq_q->pop()); + Msg msg = cli->sub_q->pop(ms); if (msg.empty()) return NULL; + return parse_submsg(msg); +} + +struct csubmsg* bus_client_get_submsg(void* handle){ + client* cli = ptr(handle); + Msg msg = cli->sub_q->pop(); + if (msg.empty()) return NULL; + + return parse_submsg(msg); +} + +static struct creqmsg* parse_reqmsg(const Msg& msg, void** src){ void* procid = NULL, *data = NULL; int pids = 0, size = 0; @@ -284,14 +291,28 @@ return pmsg; } +struct creqmsg* bus_client_get_reqmsg_intime(void* handle, void** src, const size_t ms){ + client* cli = ptr(handle); + Msg msg = cli->readreq_q->pop(ms); + if (msg.empty()) return NULL; + + return parse_reqmsg(msg, src); +} +struct creqmsg* bus_client_get_reqmsg(void* handle, void** src){ + client* cli = ptr(handle); + Msg msg = cli->readreq_q->pop(); + if (msg.empty()) return NULL; + + return parse_reqmsg(msg, src); +} int bus_client_request(void* handle, struct creqmsg* msg, struct crepmsg** repmsg){ void* procid = NULL, *reply = NULL; int pids = 0, replys = 0; - auto vmsg = std::move(to_bus<4,5,6,7>(ptr(handle), bus_request, (void*)NULL, 0, + auto vmsg = to_bus<4,5,6,7>(ptr(handle), bus_request, (void*)NULL, 0, msg->msg, msg->msgl, &procid, &pids, - &reply, &replys, sndto)); + &reply, &replys, sndto); if (!vmsg.empty()){ void* procid = NULL, *data = NULL; int pids = 0, size = 0; -- Gitblit v1.8.0