helics  2.8.1
MessageFederateManager.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/GuardedTypes.hpp"
10 #include "../core/Core.hpp"
11 #include "../core/federate_id_extra.hpp"
12 #include "Endpoints.hpp"
13 #include "data_view.hpp"
14 #include "gmlc/containers/DualMappedVector.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:
45  Endpoint& registerEndpoint(const std::string& name, const std::string& type);
46 
52  void registerKnownCommunicationPath(const Endpoint& localEndpoint,
53  const std::string& remoteEndpoint);
58  void subscribe(const Endpoint& ept, const std::string& pubName);
60  bool hasMessage() const;
61  /* check if a given endpoint has any unread messages*/
62  static bool hasMessage(const Endpoint& ept);
63 
67  static uint64_t pendingMessages(const Endpoint& ept);
71  uint64_t pendingMessages() const;
75  static std::unique_ptr<Message> getMessage(const Endpoint& ept);
76  /* receive a communication message for any endpoint in the federate*/
77  std::unique_ptr<Message> getMessage();
78 
79 
80  void sendMessage(const Endpoint& source, const std::string& dest, const data_view& message);
81 
82  void sendMessage(const Endpoint& source,
83  const std::string& dest,
84  const data_view& message,
85  Time sendTime);
86 
87  void sendMessage(const Endpoint& source, std::unique_ptr<Message> message);
88 
93  void updateTime(Time newTime, Time oldTime);
99  std::string localQuery(const std::string& queryStr) const;
100 
104  Endpoint& getEndpoint(const std::string& name);
105  const Endpoint& getEndpoint(const std::string& name) const;
106 
107  Endpoint& getEndpoint(int index);
108  const Endpoint& getEndpoint(int index) const;
109 
114  void setEndpointNotificationCallback(const std::function<void(Endpoint&, Time)>& callback);
119  static void
121  const std::function<void(Endpoint&, Time)>& callback);
122 
124  void disconnect();
126  int getEndpointCount() const;
127 
129  void addSourceFilter(const Endpoint& ept, const std::string& filterName);
131  void addDestinationFilter(const Endpoint& ept, const std::string& filterName);
132 
133  private:
134  class EndpointData {
135  public:
136  gmlc::containers::SimpleQueue<std::unique_ptr<Message>> messages;
137  atomic_guarded<std::function<void(Endpoint&, Time)>> callback;
138  };
140  gmlc::containers::
141  DualMappedVector<Endpoint, std::string, interface_handle, reference_stability::stable>>
142  local_endpoints;
143  atomic_guarded<std::function<void(Endpoint&, Time)>> allCallback;
144  Time CurrentTime = Time::minVal();
145  Core* coreObject;
146  MessageFederate* mFed;
147  const local_federate_id fedID;
149  eptData;
150  guarded<std::vector<unsigned int>>
151  messageOrder;
152  private: // private functions
153  void removeOrderedMessage(unsigned int index);
154 };
155 } // namespace helics
helics::timeZero
constexpr Time timeZero
Definition: helics-time.hpp:31
helics::Core::receiveCountAny
virtual uint64_t receiveCountAny(local_federate_id federateID)=0
helics::initializationTime
constexpr Time initializationTime
Definition: helics-time.hpp:38
helics::MessageFederateManager::getEndpoint
Endpoint & getEndpoint(const std::string &name)
Definition: MessageFederateManager.cpp:234
helics::MessageFederateManager::initializeToExecuteStateTransition
void initializeToExecuteStateTransition(iteration_result result)
Definition: MessageFederateManager.cpp:213
helics::MessageFederateManager::registerEndpoint
Endpoint & registerEndpoint(const std::string &name, const std::string &type)
Definition: MessageFederateManager.cpp:32
helics::Core::send
virtual void send(interface_handle sourceHandle, const std::string &destination, const char *data, uint64_t length)=0
helics::iteration_result::next_step
@ next_step
helics::MessageFederateManager::startupToInitializeStateTransition
void startupToInitializeStateTransition()
Definition: MessageFederateManager.cpp:211
helics::MessageFederateManager::registerKnownCommunicationPath
void registerKnownCommunicationPath(const Endpoint &localEndpoint, const std::string &remoteEndpoint)
give the core a hint for known communication paths Specifying a path that is not present will cause t...
Definition: MessageFederateManager.cpp:62
helics::Core::addDestinationTarget
virtual void addDestinationTarget(interface_handle handle, const std::string &dest)=0
helics::local_federate_id
Definition: federate_id.hpp:22
helics::iteration_result
iteration_result
Definition: core-types.hpp:81
helics::Core::addSourceTarget
virtual void addSourceTarget(interface_handle handle, const std::string &name)=0
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
helics::MessageFederateManager::localQuery
std::string localQuery(const std::string &queryStr) const
Definition: MessageFederateManager.cpp:219
helics.h
Common functions for the HELICS C api.
helics::Endpoint
Definition: Endpoints.hpp:18
helics::Core::sendMessage
virtual void sendMessage(interface_handle sourceHandle, std::unique_ptr< Message > message)=0
helics::Endpoint::getName
const std::string & getName() const
Definition: Endpoints.hpp:202
helics::MessageFederateManager::getEndpointCount
int getEndpointCount() const
Definition: MessageFederateManager.cpp:264
helics::data_view
Definition: data_view.hpp:22
helics::MessageFederate
Definition: application_api/MessageFederate.hpp:20
helics::Core::sendEvent
virtual void sendEvent(Time time, interface_handle sourceHandle, const std::string &destination, const char *data, uint64_t length)=0
helics::Core
Definition: core/Core.hpp:42
helics::MessageFederateManager::subscribe
void subscribe(const Endpoint &ept, const std::string &pubName)
Definition: MessageFederateManager.cpp:68
helics::RegistrationFailure
Definition: core-exceptions.hpp:85
MessageFederate.h
Functions related to message federates for the C api.
fed
@ fed
special logging command for message coming from a fed
Definition: loggingHelper.hpp:32
helics::MessageFederateManager::addSourceFilter
void addSourceFilter(const Endpoint &ept, const std::string &filterName)
Definition: MessageFederateManager.cpp:269
helics::interface_handle
Definition: federate_id.hpp:65
helics::MessageFederateManager::getMessage
static std::unique_ptr< Message > getMessage(const Endpoint &ept)
Definition: MessageFederateManager.cpp:119
helics::Core::receiveAny
virtual std::unique_ptr< Message > receiveAny(local_federate_id federateID, interface_handle &endpoint_id)=0
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::MessageFederateManager::setEndpointNotificationCallback
void setEndpointNotificationCallback(const std::function< void(Endpoint &, Time)> &callback)
Definition: MessageFederateManager.cpp:281
helics::MessageFederateManager::updateTime
void updateTime(Time newTime, Time oldTime)
Definition: MessageFederateManager.cpp:166
helics::Core::registerEndpoint
virtual interface_handle registerEndpoint(local_federate_id federateID, const std::string &name, const std::string &type)=0
helics::MessageFederateManager::pendingMessages
uint64_t pendingMessages() const
Definition: MessageFederateManager.cpp:109
core-exceptions.hpp
gmlc::libguarded::shared_guarded
Definition: application_api/Federate.hpp:26
helics::MessageFederateManager::addDestinationFilter
void addDestinationFilter(const Endpoint &ept, const std::string &filterName)
Definition: MessageFederateManager.cpp:275
helics::MessageFederateManager::MessageFederateManager
MessageFederateManager(Core *coreOb, MessageFederate *mFed, local_federate_id id)
Definition: MessageFederateManager.cpp:17
helics::MessageFederateManager::disconnect
void disconnect()
Definition: MessageFederateManager.cpp:26
helics::Core::registerFrequentCommunicationsPair
virtual void registerFrequentCommunicationsPair(const std::string &source, const std::string &dest)=0
helics::MessageFederateManager::hasMessage
bool hasMessage() const
Definition: MessageFederateManager.cpp:73
helics::MessageFederateManager
Definition: MessageFederateManager.hpp:34
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:249