mesy_nng: pass the last operations result value to retry_predicate

This commit is contained in:
Florian Lüke 2024-11-22 12:11:43 +01:00
parent 9e95897283
commit a0857b203b

View file

@ -204,7 +204,8 @@ inline void log_pipe_info(nng_pipe p, const char *info)
spdlog::info("{}: {}={}", info, NNG_OPT_REMADDR, remoteAddress); spdlog::info("{}: {}={}", info, NNG_OPT_REMADDR, remoteAddress);
} }
using retry_predicate = std::function<bool ()>; // 'res' is the result of the last nng function call.
using retry_predicate = std::function<bool (int res)>;
class RetryNTimes class RetryNTimes
{ {
@ -213,7 +214,7 @@ class RetryNTimes
: maxTries_(maxTries) : maxTries_(maxTries)
{} {}
bool operator()() bool operator()(int)
{ {
return attempt_++ < maxTries_; return attempt_++ < maxTries_;
} }
@ -242,7 +243,7 @@ inline int send_message_retry(nng_socket socket, nng_msg *msg, retry_predicate r
if (res == NNG_ETIMEDOUT) if (res == NNG_ETIMEDOUT)
spdlog::trace("send_message_retry: {} - send timeout (msg={})", debugInfo, fmt::ptr(msg)); spdlog::trace("send_message_retry: {} - send timeout (msg={})", debugInfo, fmt::ptr(msg));
if (!rp()) if (!rp(res))
return res; return res;
} }
} while (res == NNG_ETIMEDOUT); } while (res == NNG_ETIMEDOUT);
@ -286,7 +287,7 @@ std::optional<T> msg_trim_read(nng_msg *msg)
{ {
const auto oldlen = nng_msg_len(msg); (void) oldlen; const auto oldlen = nng_msg_len(msg); (void) oldlen;
if (nng_msg_len(msg) < sizeof(T)) if (nng_msg_len(msg) < sizeof(T))
return {}; return std::nullopt;
T result = *reinterpret_cast<T *>(nng_msg_body(msg)); T result = *reinterpret_cast<T *>(nng_msg_body(msg));
nng_msg_trim(msg, sizeof(T)); nng_msg_trim(msg, sizeof(T));