helics 3.7.0
Loading...
Searching...
No Matches
MessageTimer.hpp
1/*
2Copyright (c) 2017-2026,
3Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Energy
4Innovation LLC. See the top-level NOTICE for additional details. All rights reserved.
5SPDX-License-Identifier: BSD-3-Clause
6*/
7#pragma once
8
9#include "ActionMessage.hpp"
10#include "gmlc/networking/AsioContextManager.h"
11
12#include <asio/steady_timer.hpp>
13#include <memory>
14#include <mutex>
15#include <vector>
16
17namespace helics {
20class MessageTimer: public std::enable_shared_from_this<MessageTimer> {
21 public:
22 using time_type = decltype(std::chrono::steady_clock::now());
23 explicit MessageTimer(std::function<void(ActionMessage&&)> sFunction);
26 int32_t addTimerFromNow(std::chrono::nanoseconds time, ActionMessage mess);
29 int32_t addTimer(time_type expirationTime, ActionMessage mess);
31 void cancelTimer(int32_t index);
33 void cancelAll();
35 void updateTimer(int32_t timerIndex, time_type expirationTime, ActionMessage mess);
37 void updateTimerFromNow(int32_t timerIndex, std::chrono::nanoseconds time, ActionMessage mess);
41 bool updateTimer(int32_t timerIndex, time_type expirationTime);
45 bool addTimeToTimer(int32_t timerIndex, std::chrono::nanoseconds time);
47 void updateMessage(int32_t timerIndex, ActionMessage mess);
49 void sendMessage(int32_t timerIndex);
50
51 private:
52 std::mutex timerLock;
53 std::vector<ActionMessage> buffers;
54 std::vector<time_type> expirationTimes;
56 const std::function<void(ActionMessage&&)> sendFunction;
57 std::vector<std::shared_ptr<asio::steady_timer>> timers;
59 std::shared_ptr<gmlc::networking::AsioContextManager> contextPtr;
61 decltype(contextPtr->startContextLoop()) loopHandle;
62};
63} // namespace helics
Definition ActionMessage.hpp:30
Definition MessageTimer.hpp:20
int32_t addTimer(time_type expirationTime, ActionMessage mess)
Definition MessageTimer.cpp:42
void updateMessage(int32_t timerIndex, ActionMessage mess)
Definition MessageTimer.cpp:151
void updateTimerFromNow(int32_t timerIndex, std::chrono::nanoseconds time, ActionMessage mess)
Definition MessageTimer.cpp:104
void cancelTimer(int32_t index)
Definition MessageTimer.cpp:67
bool addTimeToTimer(int32_t timerIndex, std::chrono::nanoseconds time)
Definition MessageTimer.cpp:111
void sendMessage(int32_t timerIndex)
Definition MessageTimer.cpp:159
void updateTimer(int32_t timerIndex, time_type expirationTime, ActionMessage mess)
Definition MessageTimer.cpp:87
int32_t addTimerFromNow(std::chrono::nanoseconds time, ActionMessage mess)
Definition MessageTimer.cpp:37
void cancelAll()
Definition MessageTimer.cpp:76
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14