helics  2.8.1
application_api/MessageFederate.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 "Federate.hpp"
10 #include "data_view.hpp"
11 
12 #include <functional>
13 #include <memory>
14 #include <string>
15 
16 namespace helics {
17 class MessageFederateManager;
18 class Endpoint;
20 class HELICS_CXX_EXPORT MessageFederate:
21  public virtual Federate // using virtual inheritance to allow combination federate
22 {
23  public:
29  MessageFederate(const std::string& fedName, const FederateInfo& fi);
37  MessageFederate(const std::string& fedName,
38  const std::shared_ptr<Core>& core,
39  const FederateInfo& fi = FederateInfo{});
40 
48  MessageFederate(const std::string& fedName,
49  CoreApp& core,
50  const FederateInfo& fi = FederateInfo{});
51 
56  MessageFederate(const std::string& name, const std::string& configString);
61  explicit MessageFederate(const std::string& configString);
62 
69  explicit MessageFederate(const char* configString);
71  MessageFederate(MessageFederate&& mFed) noexcept;
73  MessageFederate(const MessageFederate& mFed) = delete;
78  explicit MessageFederate(bool res);
79  // copy constructor and copy assignment are disabled
81  virtual ~MessageFederate();
83  MessageFederate& operator=(MessageFederate&& mFed) noexcept;
85  MessageFederate& operator=(const MessageFederate& mFed) = delete;
86 
87  protected:
88  virtual void startupToInitializeStateTransition() override;
89  virtual void initializeToExecuteStateTransition(iteration_result result) override;
90  virtual void updateTime(Time newTime, Time oldTime) override;
91  virtual std::string localQuery(const std::string& queryStr) const override;
92 
93  public:
99  Endpoint& registerEndpoint(const std::string& eptName = std::string(),
100  const std::string& type = std::string());
101 
108  Endpoint& registerGlobalEndpoint(const std::string& eptName,
109  const std::string& type = std::string());
110 
117  Endpoint& registerIndexedEndpoint(const std::string& eptName,
118  int index1,
119  const std::string& type = std::string())
120  {
121  return registerGlobalEndpoint(eptName + '_' + std::to_string(index1), type);
122  }
123 
124  virtual void registerInterfaces(const std::string& configString) override;
125 
131  void registerMessageInterfaces(const std::string& configString);
132 
133  private:
138  void registerMessageInterfacesJson(const std::string& jsonString);
139 
144  void registerMessageInterfacesToml(const std::string& tomlString);
145 
146  public:
153  void registerKnownCommunicationPath(const Endpoint& localEndpoint,
154  const std::string& remoteEndpoint);
159  void subscribe(const Endpoint& ept, const std::string& key);
161  bool hasMessage() const;
162  /* check if a given endpoint has any unread messages*/
163  bool hasMessage(const Endpoint& ept) const;
164 
168  uint64_t pendingMessages(const Endpoint& ept) const;
172  uint64_t pendingMessages() const;
176  std::unique_ptr<Message> getMessage(const Endpoint& ept);
181  std::unique_ptr<Message> getMessage();
182 
190  void sendMessage(const Endpoint& source,
191  const std::string& dest,
192  const char* data,
193  size_t dataLength)
194  {
195  sendMessage(source, dest, data_view(data, dataLength));
196  }
203  void sendMessage(const Endpoint& source, const std::string& dest, const data_view& message);
212  void sendMessage(const Endpoint& source,
213  const std::string& dest,
214  const char* data,
215  size_t dataLength,
216  Time sendTime)
217  {
218  sendMessage(source, dest, data_view(data, dataLength), sendTime);
219  }
227  void sendMessage(const Endpoint& source,
228  const std::string& dest,
229  const data_view& message,
230  Time sendTime);
236  void sendMessage(const Endpoint& source, std::unique_ptr<Message> message);
237 
243  void sendMessage(const Endpoint& source, const Message& message);
244 
248  Endpoint& getEndpoint(const std::string& name) const;
249 
253  Endpoint& getEndpoint(int index) const;
254 
258  void setMessageNotificationCallback(const std::function<void(Endpoint&, Time)>& callback);
263  void setMessageNotificationCallback(const Endpoint& ept,
264  const std::function<void(Endpoint&, Time)>& callback);
265 
267  void addSourceFilter(const Endpoint& ept, const std::string& filterName);
269  void addDestinationFilter(const Endpoint& ept, const std::string& filterName);
270 
271  virtual void disconnect() override;
272 
274  int getEndpointCount() const;
275 
276  private:
278  std::unique_ptr<MessageFederateManager> mfManager;
279 };
280 } // namespace helics
data
@ data
print timing+data transmissions
Definition: loggingHelper.hpp:30
helics::MessageFederate::sendMessage
void sendMessage(const Endpoint &source, const std::string &dest, const char *data, size_t dataLength, Time sendTime)
Definition: application_api/MessageFederate.hpp:212
helics::MessageFederate::sendMessage
void sendMessage(const Endpoint &source, const std::string &dest, const char *data, size_t dataLength)
Definition: application_api/MessageFederate.hpp:190
helics::iteration_result
iteration_result
Definition: core-types.hpp:81
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
helics::Endpoint
Definition: Endpoints.hpp:18
helics::data_view
Definition: data_view.hpp:22
helics::MessageFederate
Definition: application_api/MessageFederate.hpp:20
helics::CoreApp
Definition: application_api/CoreApp.hpp:25
helics::FederateInfo
Definition: FederateInfo.hpp:20
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::Federate
Definition: application_api/Federate.hpp:44
helics::MessageFederate::registerIndexedEndpoint
Endpoint & registerIndexedEndpoint(const std::string &eptName, int index1, const std::string &type=std::string())
Definition: application_api/MessageFederate.hpp:117
helics::Message
Definition: core-data.hpp:146