helics 3.7.0
Loading...
Searching...
No Matches
MessageFederateManager.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 "../common/GuardedTypes.hpp"
10#include "../core/Core.hpp"
11#include "../core/FederateIdExtra.hpp"
12#include "Endpoints.hpp"
13#include "data_view.hpp"
14#include "gmlc/containers/DualStringMappedVector.hpp"
15#include "gmlc/containers/SimpleQueue.hpp"
16
17#include <cstdint>
18#include <deque>
19#include <functional>
20#include <map>
21#include <memory>
22#include <string>
23#include <unordered_map>
24#include <unordered_set>
25#include <utility>
26#include <vector>
27namespace helics {
28class Core;
29class MessageFederate;
35 public:
39 MessageFederate* mFed,
41 bool singleThreaded);
47 Endpoint& registerEndpoint(std::string_view name, std::string_view type);
48
53 Endpoint& registerTargetedEndpoint(std::string_view name, std::string_view type);
54
58 Endpoint& registerDataSink(std::string_view name);
59
61 bool hasMessage() const;
62 /* check if a given endpoint has any unread messages*/
63 static bool hasMessage(const Endpoint& ept);
64
68 static uint64_t pendingMessageCount(const Endpoint& ept);
72 uint64_t pendingMessageCount() const;
76 static std::unique_ptr<Message> getMessage(const Endpoint& ept);
77 /* receive a communication message for any endpoint in the federate*/
78 std::unique_ptr<Message> getMessage();
79
84 void updateTime(Time newTime, Time oldTime);
90 std::string localQuery(std::string_view queryStr) const;
91
95 Endpoint& getEndpoint(std::string_view name);
96 const Endpoint& getEndpoint(std::string_view name) const;
97
98 Endpoint& getEndpoint(int index);
99 const Endpoint& getEndpoint(int index) const;
100
105 Endpoint& getDataSink(std::string_view name);
106 const Endpoint& getDataSink(std::string_view name) const;
107
112 void setEndpointNotificationCallback(const std::function<void(Endpoint&, Time)>& callback);
117 static void
119 const std::function<void(Endpoint&, Time)>& callback);
120
122 void disconnect();
124 int getEndpointCount() const;
125
126 private:
127 class EndpointData {
128 public:
129 gmlc::containers::SimpleQueue<std::unique_ptr<Message>> messages;
130 std::function<void(Endpoint&, Time)> callback;
131 };
133 shared_guarded_opt<gmlc::containers::DualStringMappedVector<Endpoint, InterfaceHandle>>
134 mLocalEndpoints;
135 atomic_guarded<std::function<void(Endpoint&, Time)>> allCallback;
136 Time CurrentTime = Time::minVal();
137 Core* coreObject;
138 MessageFederate* mFed;
139 const LocalFederateId fedID;
141 shared_guarded_opt<std::deque<EndpointData>> eptData;
143 guarded_opt<std::vector<unsigned int>> messageOrder;
144
145 private:
146 void removeOrderedMessage(unsigned int index);
147};
148} // namespace helics
Definition core/Core.hpp:41
Definition Endpoints.hpp:21
Definition LocalFederateId.hpp:22
Definition MessageFederateManager.hpp:34
int getEndpointCount() const
Definition MessageFederateManager.cpp:300
static std::unique_ptr< Message > getMessage(const Endpoint &ept)
Definition MessageFederateManager.cpp:157
Endpoint & registerTargetedEndpoint(std::string_view name, std::string_view type)
Definition MessageFederateManager.cpp:83
Endpoint & getDataSink(std::string_view name)
Definition MessageFederateManager.cpp:258
Endpoint & registerDataSink(std::string_view name)
Definition MessageFederateManager.cpp:60
void startupToInitializeStateTransition()
Definition MessageFederateManager.cpp:223
void updateTime(Time newTime, Time oldTime)
Definition MessageFederateManager.cpp:184
Endpoint & getEndpoint(std::string_view name)
Definition MessageFederateManager.cpp:245
void setEndpointNotificationCallback(const std::function< void(Endpoint &, Time)> &callback)
Definition MessageFederateManager.cpp:305
void initializeToExecuteStateTransition(iteration_time result)
Definition MessageFederateManager.cpp:225
void disconnect()
Definition MessageFederateManager.cpp:32
Endpoint & registerEndpoint(std::string_view name, std::string_view type)
Definition MessageFederateManager.cpp:38
bool hasMessage() const
Definition MessageFederateManager.cpp:105
std::string localQuery(std::string_view queryStr) const
Definition MessageFederateManager.cpp:230
uint64_t pendingMessageCount() const
Definition MessageFederateManager.cpp:142
Definition application_api/MessageFederate.hpp:24
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14
TimeRepresentation< count_time< 9 > > Time
Definition helicsTime.hpp:27
Definition helicsTime.hpp:46