1#ifndef LEADER_KEY_STORAGE_H
2#define LEADER_KEY_STORAGE_H
40 mutable std::mutex _mutex;
43 std::atomic<std::chrono::steady_clock::time_point> _last_update_time;
66 std::lock_guard<std::mutex>
lock(_mutex);
72 _last_update_time.store(std::chrono::steady_clock::now(), std::memory_order_release);
83 std::lock_guard<std::mutex>
lock(_mutex);
84 return _current_leader_id;
94 std::lock_guard<std::mutex>
lock(_mutex);
95 if (_current_group_mac_key != key) {
98 for (
size_t i = 0;
i < 16; ++
i) {
104 for (
size_t i = 0;
i < 16; ++
i) {
113 _current_group_mac_key = key;
114 _last_update_time.store(std::chrono::steady_clock::now(), std::memory_order_release);
125 std::lock_guard<std::mutex>
lock(_mutex);
129 for (
size_t i = 0;
i < 16; ++
i) {
136 return _current_group_mac_key;
146 return _last_update_time.load(std::memory_order_acquire);
149inline LeaderKeyStorage::LeaderKeyStorage() :
150 _current_leader_id(
Ethernet::NULL_ADDRESS),
152 _current_group_mac_key.fill(0);
static std::string mac_to_string(Address addr)
Definition ethernet.h:36
Thread-safe singleton for leader key storage.
Definition leaderKeyStorage.h:25
MacKeyType getGroupMacKey() const
Get the current group MAC key.
Definition leaderKeyStorage.h:124
void setLeaderId(const Ethernet::Address &leader_id)
Set the current leader ID.
Definition leaderKeyStorage.h:65
std::chrono::steady_clock::time_point getLastUpdateTime() const
Get the last update time.
Definition leaderKeyStorage.h:145
static LeaderKeyStorage & getInstance()
Get the singleton instance.
Definition leaderKeyStorage.h:54
Ethernet::Address getLeaderId() const
Get the current leader ID.
Definition leaderKeyStorage.h:82
void setGroupMacKey(const MacKeyType &key)
Set the current group MAC key.
Definition leaderKeyStorage.h:93
@ INF
Definition debug.h:208
Select_Debug<(Traits< T >::debugged &&Traits< Debug >::error)> db(Debug_Error l)
Definition debug.h:166
@ TRC
Definition debug.h:231
std::array< uint8_t, 16 > MacKeyType
Definition leaderKeyStorage.h:15