From 39848cdcbf905a1cc26bb77914dbfc5af2276ab3 Mon Sep 17 00:00:00 2001 From: Alexey Ozeritskiy Date: Sat, 25 Nov 2023 20:59:55 +0300 Subject: [PATCH] Connector --- src/server.cpp | 13 +++++++++++++ src/server.h | 5 ++++- src/timesource.h | 4 ++-- test/test_raft.cpp | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index caf54cc..579d145 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -80,6 +80,19 @@ NNet::TTestTask TNode::DoDrain() { co_return; } +NNet::TTestTask TNode::DoConnect() { + while (!Connected) { + try { + auto deadline = TimeSource->Now() + std::chrono::milliseconds(15000); + co_await Socket.Connect(deadline); + Connected = true; + } catch (const std::exception& ex) { + std::cout << "Error on connect: " << ex.what() << "\n"; + } + } + co_return; +} + NNet::TSimpleTask TRaftServer::InboundConnection(NNet::TSocket socket) { try { while (true) { diff --git a/src/server.h b/src/server.h index 7c0ba66..e09bf48 100644 --- a/src/server.h +++ b/src/server.h @@ -109,10 +109,11 @@ class TWriter { class TNode: public INode { public: - TNode(NNet::TPoll& poller, uint32_t id, NNet::TAddress address) + TNode(NNet::TPoll& poller, uint32_t id, NNet::TAddress address, const std::shared_ptr& ts) : Poller(poller) , Id(id) , Address(address) + , TimeSource(ts) { } void Send(const TMessageHolder& message) override; @@ -120,10 +121,12 @@ class TNode: public INode { private: NNet::TTestTask DoDrain(); + NNet::TTestTask DoConnect(); NNet::TPoll& Poller; uint32_t Id; NNet::TAddress Address; + std::shared_ptr TimeSource; NNet::TPoll::TSocket Socket; bool Connected = false; diff --git a/src/timesource.h b/src/timesource.h index 9656069..f8c7c5a 100644 --- a/src/timesource.h +++ b/src/timesource.h @@ -3,7 +3,7 @@ #include struct ITimeSource { - using Time = std::chrono::time_point; + using Time = std::chrono::time_point; virtual ~ITimeSource() = default; virtual Time Now() = 0; }; @@ -11,6 +11,6 @@ struct ITimeSource { class TTimeSource: public ITimeSource { public: Time Now() override { - return std::chrono::system_clock::now(); + return std::chrono::steady_clock::now(); } }; diff --git a/test/test_raft.cpp b/test/test_raft.cpp index 36c751d..fb90213 100644 --- a/test/test_raft.cpp +++ b/test/test_raft.cpp @@ -45,7 +45,7 @@ class TFakeNode: public INode { class TFakeTimeSource: public ITimeSource { public: TFakeTimeSource() - : T(std::chrono::system_clock::now()) + : T(std::chrono::steady_clock::now()) { } ITimeSource::Time Now() override {