helics  2.8.1
MessageTimer.hpp
1 /*
2 Copyright (c) 2017-2021,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #pragma once
8 
9 #include "../common/AsioContextManager.h"
10 #include "ActionMessage.hpp"
11 
12 #include <asio/steady_timer.hpp>
13 #include <memory>
14 #include <mutex>
15 #include <vector>
16 
17 namespace helics {
20 class 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);
39  bool updateTimer(int32_t timerIndex, time_type expirationTime);
43  bool addTimeToTimer(int32_t timerIndex, std::chrono::nanoseconds time);
45  void updateMessage(int32_t timerIndex, ActionMessage mess);
47  void sendMessage(int32_t timerIndex);
48 
49  private:
50  std::mutex timerLock;
51  std::vector<ActionMessage> buffers;
52  std::vector<time_type> expirationTimes;
53  const std::function<void(ActionMessage&&)>
54  sendFunction;
55  std::vector<std::shared_ptr<asio::steady_timer>> timers;
56  std::shared_ptr<AsioContextManager>
57  contextPtr;
58  decltype(contextPtr->startContextLoop())
59  loopHandle;
60 };
61 } // namespace helics
helics::MessageTimer::addTimer
int32_t addTimer(time_type expirationTime, ActionMessage mess)
Definition: MessageTimer.cpp:39
helics::ActionMessage
Definition: ActionMessage.hpp:29
AsioContextManager
Definition: AsioContextManager.h:42
helics::MessageTimer::addTimeToTimer
bool addTimeToTimer(int32_t timerIndex, std::chrono::nanoseconds time)
Definition: MessageTimer.cpp:100
helics::MessageTimer::sendMessage
void sendMessage(int32_t timerIndex)
Definition: MessageTimer.cpp:142
helics::MessageTimer::cancelTimer
void cancelTimer(int32_t index)
Definition: MessageTimer.cpp:64
helics::MessageTimer::updateTimer
void updateTimer(int32_t timerIndex, time_type expirationTime, ActionMessage mess)
Definition: MessageTimer.cpp:84
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::MessageTimer::addTimerFromNow
int32_t addTimerFromNow(std::chrono::nanoseconds time, ActionMessage mess)
Definition: MessageTimer.cpp:34
helics::MessageTimer::cancelAll
void cancelAll()
Definition: MessageTimer.cpp:73
helics::MessageTimer::updateMessage
void updateMessage(int32_t timerIndex, ActionMessage mess)
Definition: MessageTimer.cpp:134
helics::MessageTimer
Definition: MessageTimer.hpp:20
AsioContextManager::startContextLoop
LoopHandle startContextLoop()
Definition: AsioContextManager.cpp:151