From 3e191ac65bd65f678e9a344163f74d181726f6bd Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期二, 13 四月 2021 08:48:40 +0800
Subject: [PATCH] refactor, add TODO.
---
src/failed_msg.h | 1 +
src/timed_queue.h | 36 +++++++++++++++++++++++++-----------
2 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/src/failed_msg.h b/src/failed_msg.h
index 2d57abc..73030ba 100644
--- a/src/failed_msg.h
+++ b/src/failed_msg.h
@@ -23,6 +23,7 @@
#include "timed_queue.h"
#include <string>
+//TODO change storage to map<Remote,list<TimedData<Msg>>>, to avoid retry failed remotes messages.
class FailedMsgQ
{
typedef std::function<bool(void *)> Func;
diff --git a/src/timed_queue.h b/src/timed_queue.h
index 14e318d..b2a941b 100644
--- a/src/timed_queue.h
+++ b/src/timed_queue.h
@@ -24,23 +24,37 @@
#include <string>
template <class Data, class ClockType = std::chrono::steady_clock>
-class TimedQueue
+class TimedData
{
public:
typedef ClockType Clock;
typedef typename Clock::time_point TimePoint;
typedef typename Clock::duration Duration;
+ TimedData(const TimePoint &expire, const Data &data) :
+ expire_(expire), data_(data) {}
+ TimedData(const TimePoint &expire, Data &&data) :
+ expire_(expire), data_(std::move(data)) {}
+ bool Expired() { return Clock::now() > expire_; }
+ Data &data() { return data_; }
+ Data const &data() const { return data_; }
+
private:
- struct Record {
- TimePoint expire_;
- Data data_;
- Record(const TimePoint &expire, const Data &data) :
- expire_(expire), data_(data) {}
- Record(const TimePoint &expire, Data &&data) :
- expire_(expire), data_(std::move(data)) {}
- bool Expired() { return Clock::now() > expire_; }
- };
+ TimePoint expire_;
+ Data data_;
+};
+
+template <class Data, class ClockType = std::chrono::steady_clock>
+class TimedQueue
+{
+ typedef TimedData<Data, ClockType> Record;
+
+public:
+ typedef typename Record::Clock Clock;
+ typedef typename Record::TimePoint TimePoint;
+ typedef typename Record::Duration Duration;
+
+private:
typedef std::list<Record> Queue;
Synced<Queue> queue_;
@@ -62,7 +76,7 @@
do {
if (it->Expired()) {
it = q.erase(it);
- } else if (func(it->data_)) {
+ } else if (func(it->data())) {
it = q.erase(it);
} else {
++it;
--
Gitblit v1.8.0