diff --git a/src/messages.h b/src/messages.h index 08b0903..faa2d73 100644 --- a/src/messages.h +++ b/src/messages.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include @@ -13,6 +14,7 @@ enum class EMessageType : uint32_t { APPEND_ENTRIES_RESPONSE = 5, COMMAND_REQUEST = 6, COMMAND_RESPONSE = 7, + TIMEOUT = 8, }; struct TMessage { @@ -67,12 +69,19 @@ struct TAppendEntriesResponse: public TMessage { uint32_t Success; }; -struct CommandRequest: public TMessage { +struct TCommandRequest: public TMessage { + static constexpr EMessageType MessageType = EMessageType::COMMAND_REQUEST; char Data[0]; }; -struct CommandResponse: public TMessage { +struct TCommandResponse: public TMessage { + static constexpr EMessageType MessageType = EMessageType::COMMAND_RESPONSE; +}; +struct TTimeout: public TMessage { + static constexpr EMessageType MessageType = EMessageType::TIMEOUT; + static constexpr std::chrono::milliseconds Election = std::chrono::milliseconds(5000); + static constexpr std::chrono::milliseconds Heartbeat = std::chrono::milliseconds(2000); }; template diff --git a/src/raft.cpp b/src/raft.cpp index 712943f..991b2ac 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -8,7 +8,10 @@ TRaft::TRaft(int node, const std::vector& nodes, const TTimeSource& ts) , Npeers(nodes.size()) , Nservers(nodes.size()+1) , StateFunc([&](uint64_t now, const TMessageHolder &message) { - follower(now, message); + return follower(now, message); }) , LastTime(TimeSource.now()) { } + +void TRaft::follower(uint64_t now, const TMessageHolder& message) { +}