helics  3.5.2
MessageFederateManager.hpp
1 /*
2 Copyright (c) 2017-2024,
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/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>
27 namespace helics {
28 class Core;
29 class MessageFederate;
35  public:
39  MessageFederate* mFed,
40  LocalFederateId id,
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:292
static std::unique_ptr< Message > getMessage(const Endpoint &ept)
Definition: MessageFederateManager.cpp:149
Endpoint & registerTargetedEndpoint(std::string_view name, std::string_view type)
Definition: MessageFederateManager.cpp:81
Endpoint & getDataSink(std::string_view name)
Definition: MessageFederateManager.cpp:250
Endpoint & registerDataSink(std::string_view name)
Definition: MessageFederateManager.cpp:58
void startupToInitializeStateTransition()
Definition: MessageFederateManager.cpp:215
void updateTime(Time newTime, Time oldTime)
Definition: MessageFederateManager.cpp:176
Endpoint & getEndpoint(std::string_view name)
Definition: MessageFederateManager.cpp:237
void setEndpointNotificationCallback(const std::function< void(Endpoint &, Time)> &callback)
Definition: MessageFederateManager.cpp:297
void initializeToExecuteStateTransition(iteration_time result)
Definition: MessageFederateManager.cpp:217
void disconnect()
Definition: MessageFederateManager.cpp:30
MessageFederateManager(Core *coreOb, MessageFederate *mFed, LocalFederateId id, bool singleThreaded)
Definition: MessageFederateManager.cpp:18
Endpoint & registerEndpoint(std::string_view name, std::string_view type)
Definition: MessageFederateManager.cpp:36
bool hasMessage() const
Definition: MessageFederateManager.cpp:103
std::string localQuery(std::string_view queryStr) const
Definition: MessageFederateManager.cpp:222
uint64_t pendingMessageCount() const
Definition: MessageFederateManager.cpp:139
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:43