helics  3.3.0
MessageFederateManager.hpp
1 /*
2 Copyright (c) 2017-2022,
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:
45  Endpoint& registerEndpoint(std::string_view name, std::string_view type);
46 
52  Endpoint& registerTargetedEndpoint(std::string_view name, std::string_view type);
53 
55  bool hasMessage() const;
56  /* check if a given endpoint has any unread messages*/
57  static bool hasMessage(const Endpoint& ept);
58 
62  static uint64_t pendingMessageCount(const Endpoint& ept);
66  uint64_t pendingMessageCount() const;
70  static std::unique_ptr<Message> getMessage(const Endpoint& ept);
71  /* receive a communication message for any endpoint in the federate*/
72  std::unique_ptr<Message> getMessage();
73 
78  void updateTime(Time newTime, Time oldTime);
84  std::string localQuery(std::string_view queryStr) const;
85 
89  Endpoint& getEndpoint(std::string_view name);
90  const Endpoint& getEndpoint(std::string_view name) const;
91 
92  Endpoint& getEndpoint(int index);
93  const Endpoint& getEndpoint(int index) const;
94 
99  void setEndpointNotificationCallback(const std::function<void(Endpoint&, Time)>& callback);
104  static void
106  const std::function<void(Endpoint&, Time)>& callback);
107 
109  void disconnect();
111  int getEndpointCount() const;
112 
113  private:
114  class EndpointData {
115  public:
116  gmlc::containers::SimpleQueue<std::unique_ptr<Message>> messages;
117  std::function<void(Endpoint&, Time)> callback;
118  };
120  local_endpoints;
121  atomic_guarded<std::function<void(Endpoint&, Time)>> allCallback;
122  Time CurrentTime = Time::minVal();
123  Core* coreObject;
124  MessageFederate* mFed;
125  const LocalFederateId fedID;
128  guarded<std::vector<unsigned int>>
129  messageOrder;
130  private:
131  void removeOrderedMessage(unsigned int index);
132 };
133 } // namespace helics
helics::timeZero
constexpr Time timeZero
Definition: helicsTime.hpp:31
helicsCore.h
Common functions for the HELICS C api.
helics::Core::receiveCountAny
virtual uint64_t receiveCountAny(LocalFederateId federateID)=0
helics::initializationTime
constexpr Time initializationTime
Definition: helicsTime.hpp:40
helics::MessageFederateManager::startupToInitializeStateTransition
void startupToInitializeStateTransition()
Definition: MessageFederateManager.cpp:191
helics::MessageFederateManager::MessageFederateManager
MessageFederateManager(Core *coreOb, MessageFederate *mFed, LocalFederateId id)
Definition: MessageFederateManager.cpp:18
helics::Core::registerEndpoint
virtual InterfaceHandle registerEndpoint(LocalFederateId federateID, std::string_view name, std::string_view type)=0
helics::InterfaceHandle
Definition: LocalFederateId.hpp:65
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
helics::Endpoint
Definition: Endpoints.hpp:21
helics::MessageFederateManager::pendingMessageCount
uint64_t pendingMessageCount() const
Definition: MessageFederateManager.cpp:115
helics::MessageFederateManager::getEndpointCount
int getEndpointCount() const
Definition: MessageFederateManager.cpp:244
helics::MessageFederate
Definition: application_api/MessageFederate.hpp:22
helics::Core
Definition: core/Core.hpp:41
helics::MessageFederateManager::registerTargetedEndpoint
Endpoint & registerTargetedEndpoint(std::string_view name, std::string_view type)
Definition: MessageFederateManager.cpp:57
helics::RegistrationFailure
Definition: core-exceptions.hpp:85
MessageFederate.h
Functions related to message federates for the C api.
helics::MessageFederateManager::registerEndpoint
Endpoint & registerEndpoint(std::string_view name, std::string_view type)
Definition: MessageFederateManager.cpp:35
helics::Core::receiveAny
virtual std::unique_ptr< Message > receiveAny(LocalFederateId federateID, InterfaceHandle &endpoint_id)=0
helics::IterationResult
IterationResult
Definition: CoreTypes.hpp:83
helics::MessageFederateManager::getMessage
static std::unique_ptr< Message > getMessage(const Endpoint &ept)
Definition: MessageFederateManager.cpp:125
helics::MessageFederateManager::getEndpoint
Endpoint & getEndpoint(std::string_view name)
Definition: MessageFederateManager.cpp:214
helics::MessageFederateManager::initializeToExecuteStateTransition
void initializeToExecuteStateTransition(IterationResult result)
Definition: MessageFederateManager.cpp:193
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::IterationResult::NEXT_STEP
@ NEXT_STEP
helics::MessageFederateManager::setEndpointNotificationCallback
void setEndpointNotificationCallback(const std::function< void(Endpoint &, Time)> &callback)
Definition: MessageFederateManager.cpp:249
helics::MessageFederateManager::updateTime
void updateTime(Time newTime, Time oldTime)
Definition: MessageFederateManager.cpp:152
helics::Core::registerTargetedEndpoint
virtual InterfaceHandle registerTargetedEndpoint(LocalFederateId federateID, std::string_view name, std::string_view type)=0
helics::LocalFederateId
Definition: LocalFederateId.hpp:22
core-exceptions.hpp
gmlc::libguarded::shared_guarded
Definition: application_api/Federate.hpp:28
helics::EmptyCore
Definition: EmptyCore.hpp:19
helics::MessageFederateManager::disconnect
void disconnect()
Definition: MessageFederateManager.cpp:29
helics::MessageFederateManager::localQuery
std::string localQuery(std::string_view queryStr) const
Definition: MessageFederateManager.cpp:199
helics::MessageFederateManager::hasMessage
bool hasMessage() const
Definition: MessageFederateManager.cpp:79
helics::MessageFederateManager
Definition: MessageFederateManager.hpp:34
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:171