helics  2.8.1
CoreBroker.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/JsonBuilder.hpp"
10 #include "ActionMessage.hpp"
11 #include "BasicHandleInfo.hpp"
12 #include "Broker.hpp"
13 #include "BrokerBase.hpp"
14 #include "HandleManager.hpp"
15 #include "TimeDependencies.hpp"
16 #include "UnknownHandleManager.hpp"
17 #include "federate_id_extra.hpp"
18 #include "gmlc/concurrency/DelayedObjects.hpp"
19 #include "gmlc/concurrency/TriggerVariable.hpp"
20 #include "gmlc/containers/AirLock.hpp"
21 #include "gmlc/containers/DualMappedVector.hpp"
22 #include "gmlc/containers/SimpleQueue.hpp"
23 #include "helics/external/any.hpp"
24 
25 #include <array>
26 #include <atomic>
27 #include <deque>
28 #include <functional>
29 #include <map>
30 #include <memory>
31 #include <string>
32 #include <thread>
33 #include <tuple>
34 #include <unordered_map>
35 #include <utility>
36 #include <vector>
37 
38 namespace helics {
39 
41 enum class connection_state : std::uint8_t {
42  connected = 0,
43  init_requested = 1,
44  operating = 2,
45  error = 40,
46  request_disconnect = 48,
47  disconnected = 50
48 };
49 
51 class BasicFedInfo {
52  public:
53  const std::string name;
57  connection_state state{connection_state::connected};
58  bool nonCounting{false}; // indicator the federate shouldn't count toward limits or total
59  explicit BasicFedInfo(const std::string& fedname): name(fedname) {}
60 };
61 
64  public:
65  const std::string name;
66 
70 
72  connection_state::connected};
73 
75  false};
76  bool _core{false};
77  bool _nonLocal{false};
78  bool _route_key{false};
79  bool _sent_disconnect_ack{false};
80  bool _disable_ping{false};
81  // 1 byte gap
82  std::string routeInfo;
83  explicit BasicBrokerInfo(const std::string& brokerName): name(brokerName) {}
84 };
85 
86 class TimeCoordinator;
87 class Logger;
88 class TimeoutMonitor;
89 
94 class CoreBroker: public Broker, public BrokerBase {
95  protected:
96  bool _gateway = false;
97  private:
98  std::atomic<bool> _isRoot{false};
99  bool isRootc{false};
100  bool connectionEstablished{false};
101  int routeCount = 1;
102  gmlc::containers::DualMappedVector<BasicFedInfo, std::string, global_federate_id>
103  _federates;
104  gmlc::containers::DualMappedVector<BasicBrokerInfo, std::string, global_broker_id>
105  _brokers;
106  std::string
107  previous_local_broker_identifier;
108 
109  HandleManager handles;
110  UnknownHandleManager unknownHandles;
111  std::vector<std::pair<std::string, global_federate_id>>
112  delayedDependencies;
113  std::unordered_map<global_federate_id, local_federate_id>
114  global_id_translation;
115  std::unordered_map<global_federate_id, route_id>
116  routing_table;
117  std::unordered_map<std::string, route_id>
118  knownExternalEndpoints;
119  std::unordered_map<std::string, std::string> global_values;
121  std::mutex name_mutex_;
122  std::atomic<int> queryCounter{1}; // counter for active queries going to the local API
123  gmlc::concurrency::DelayedObjects<std::string> activeQueries;
124  std::vector<std::tuple<JsonMapBuilder, std::vector<ActionMessage>, bool>> mapBuilders;
127  std::deque<std::pair<int32_t, decltype(std::chrono::steady_clock::now())>> queryTimeouts;
128 
129  std::vector<ActionMessage> earlyMessages;
130  gmlc::concurrency::TriggerVariable disconnection;
131  std::unique_ptr<TimeoutMonitor>
132  timeoutMon;
133  std::atomic<uint16_t> nextAirLock{0};
134  std::array<gmlc::containers::AirLock<stx::any>, 3>
135  dataAirlocks;
136  private:
140  virtual void processCommand(ActionMessage&& command) override;
146  void processPriorityCommand(ActionMessage&& command) override;
147 
149  void processBrokerConfigureCommands(ActionMessage& cmd);
150 
151  gmlc::containers::SimpleQueue<ActionMessage>
152  delayTransmitQueue;
153  /* function to transmit the delayed messages*/
155  void transmitDelayedMessages();
159  void routeMessage(ActionMessage& cmd, global_federate_id dest);
160  void routeMessage(ActionMessage&& cmd, global_federate_id dest);
163  void routeMessage(const ActionMessage& cmd);
164  void routeMessage(ActionMessage&& cmd);
166  void transmitToParent(ActionMessage&& cmd);
168  void propagateError(ActionMessage&& cmd);
170  void broadcast(ActionMessage& cmd);
171 
172  route_id fillMessageRouteInformation(ActionMessage& mess);
173 
175  void executeInitializationOperations();
177  uint16_t getNextAirlockIndex();
180  bool verifyBrokerKey(ActionMessage& mess) const;
183  bool verifyBrokerKey(const std::string& key) const;
184 
185  public:
188  virtual bool connect() override final;
191  virtual void disconnect() override final;
193  void unregister();
198  virtual void processDisconnect(bool skipUnregister = false) override final;
200  virtual bool isConnected() const override final;
203  virtual void setAsRoot() override final;
206  virtual bool isRoot() const override final { return _isRoot; };
207 
208  virtual bool isOpenToNewFederates() const override;
209 
210  virtual void
211  setLoggingCallback(const std::function<void(int, const std::string&, const std::string&)>&
212  logFunction) override final;
213 
214  virtual bool waitForDisconnect(
215  std::chrono::milliseconds msToWait = std::chrono::milliseconds(0)) const override final;
216 
217  virtual void setTimeBarrier(Time barrierTime) override final;
218 
219  virtual void clearTimeBarrier() override final;
220 
221  virtual void globalError(int32_t errorCode, const std::string& errorString) override final;
222 
223  private:
226  virtual bool brokerConnect() = 0;
229  virtual void brokerDisconnect() = 0;
230 
231  protected:
238  virtual void transmit(route_id route, const ActionMessage& command) = 0;
246  virtual void transmit(route_id route, ActionMessage&& command) = 0;
255  virtual void addRoute(route_id rid, int interfaceId, const std::string& routeInfo) = 0;
259  virtual void removeRoute(route_id rid) = 0;
260 
261  public:
264  explicit CoreBroker(bool setAsRootBroker = false) noexcept;
266  explicit CoreBroker(const std::string& broker_name);
268  virtual ~CoreBroker();
270  virtual void configure(const std::string& configureString) override final;
273  virtual void configureFromArgs(int argc, char* argv[]) override final;
275  virtual void configureFromVector(std::vector<std::string> args) override final;
276 
280  bool allInitReady() const;
283 
285  void setIdentifier(const std::string& name);
287  virtual const std::string& getIdentifier() const override final { return identifier; }
288  virtual const std::string& getAddress() const override final;
289  virtual void setLoggingLevel(int logLevel) override final;
290  virtual void setLogFile(const std::string& lfile) override final;
291  virtual std::string
292  query(const std::string& target,
293  const std::string& queryStr,
295  virtual void setGlobal(const std::string& valueName, const std::string& value) override final;
296  virtual void makeConnections(const std::string& file) override final;
297  virtual void dataLink(const std::string& publication, const std::string& input) override final;
298 
299  virtual void addSourceFilterToEndpoint(const std::string& filter,
300  const std::string& endpoint) override final;
301 
302  virtual void addDestinationFilterToEndpoint(const std::string& filter,
303  const std::string& endpoint) override final;
304 
305  protected:
306  virtual std::shared_ptr<helicsCLI11App> generateCLI() override;
307 
308  private:
309  int getCountableFederates() const;
311  void checkDependencies();
313  void FindandNotifyInputTargets(BasicHandleInfo& handleInfo);
314  void FindandNotifyPublicationTargets(BasicHandleInfo& handleInfo);
315 
316  void FindandNotifyFilterTargets(BasicHandleInfo& handleInfo);
317  void FindandNotifyEndpointTargets(BasicHandleInfo& handleInfo);
319  void processDisconnect(ActionMessage& command);
321  void processError(ActionMessage& command);
323  void disconnectBroker(BasicBrokerInfo& brk);
325  void markAsDisconnected(global_broker_id brkid);
327  void checkInFlightQueries(global_broker_id brkid);
329  void checkForNamedInterface(ActionMessage& command);
331  void removeNamedTarget(ActionMessage& command);
333  void processQueryCommand(ActionMessage& cmd);
335  void processQuery(ActionMessage& m);
336 
338  void checkQueryTimeouts();
340  void processQueryResponse(const ActionMessage& m);
342  void processLocalQuery(const ActionMessage& m);
344  std::string generateQueryAnswer(const std::string& request, bool force_ordering);
346  std::string getNameList(std::string gidString) const;
348  route_id getRoute(global_federate_id fedid) const;
350  route_id getRoute(int32_t fedid) const { return getRoute(global_federate_id(fedid)); }
351 
352  const BasicBrokerInfo* getBrokerById(global_broker_id brokerid) const;
353 
354  BasicBrokerInfo* getBrokerById(global_broker_id brokerid);
355 
356  void addLocalInfo(BasicHandleInfo& handleInfo, const ActionMessage& m);
357  void addPublication(ActionMessage& m);
358  void addInput(ActionMessage& m);
359  void addEndpoint(ActionMessage& m);
360  void addFilter(ActionMessage& m);
361 
362  // bool updateSourceFilterOperator (ActionMessage &m);
364  void initializeMapBuilder(const std::string& request,
365  std::uint16_t index,
366  bool reset,
367  bool force_ordering);
368 
369  std::string generateGlobalStatus(JsonMapBuilder& builder);
370 
372  void sendErrorToImmediateBrokers(int errorCode);
374  void sendDisconnect();
376  std::string generateFederationSummary() const;
378  void labelAsDisconnected(global_broker_id brkid);
379 
381  void generateTimeBarrier(ActionMessage& m);
382  int generateMapObjectCounter() const;
383  friend class TimeoutMonitor;
384 };
385 
386 } // namespace helics
helics::timeZero
constexpr Time timeZero
Definition: helics-time.hpp:31
generateJsonString
std::string generateJsonString(const Json::Value &block)
Definition: JsonProcessingFunctions.cpp:97
helics::BrokerBase::broker_state_t::configuring
@ configuring
the broker is in the processing of configuring
helics::BrokerBase::broker_state_t::terminated
@ terminated
the termination process has started
helics::ActionMessage::source_id
global_federate_id source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:36
helics::BrokerBase::isRunning
bool isRunning() const
Definition: BrokerBase.hpp:181
helics::BrokerBase::minBrokerCount
int32_t minBrokerCount
the minimum number of brokers that must connect before entering init mode
Definition: BrokerBase.hpp:47
helics::BrokerBase::broker_state_t::errored
@ errored
an error was encountered
slow_responding_flag
constexpr uint16_t slow_responding_flag
overload of extra_flag4 indicating a federate, core or broker is slow responding
Definition: flagOperations.hpp:37
helics::BrokerBase::useJsonSerialization
bool useJsonSerialization
Definition: BrokerBase.hpp:128
helics::BrokerBase::brokerKey
std::string brokerKey
Definition: BrokerBase.hpp:59
helics::BrokerBase::timeout
Time timeout
timeout to wait to establish a broker connection before giving up
Definition: BrokerBase.hpp:53
helics::CoreBroker::setLoggingCallback
virtual void setLoggingCallback(const std::function< void(int, const std::string &, const std::string &)> &logFunction) override final
Definition: CoreBroker.cpp:110
helics::CoreBroker::generateCLI
virtual std::shared_ptr< helicsCLI11App > generateCLI() override
Definition: CoreBroker.cpp:1752
helics::CoreBroker::configureFromVector
virtual void configureFromVector(std::vector< std::string > args) override final
Definition: CoreBroker.cpp:1737
helics::BrokerBase::enable_profiling
bool enable_profiling
indicator that profiling is enabled
Definition: BrokerBase.hpp:129
helics::CoreBroker::setLogFile
virtual void setLogFile(const std::string &lfile) override final
Definition: CoreBroker.cpp:2512
helics::CoreBroker::addSourceFilterToEndpoint
virtual void addSourceFilterToEndpoint(const std::string &filter, const std::string &endpoint) override final
Definition: CoreBroker.cpp:178
helics::global_broker_id_shift
constexpr identififier_base_type global_broker_id_shift
Definition: global_federate_id.hpp:22
helics::global_broker_id
Definition: global_federate_id.hpp:26
helics::CoreBroker::removeRoute
virtual void removeRoute(route_id rid)=0
helics::UnknownHandleManager::clearPublication
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:263
helics::BrokerBase::hasTimeDependency
bool hasTimeDependency
set to true if the broker has Time dependencies
Definition: BrokerBase.hpp:119
helics::BrokerBase::broker_state_t::operating
@ operating
normal operating conditions
helics_definitions.hpp
base helics enumerations for C++ API's, a namespace wrapper for the definitions defined in helics_enu...
warning
@ warning
print/log warning and errors
Definition: loggingHelper.hpp:23
helics::global_federate_id
Definition: global_federate_id.hpp:68
helics::BasicFedInfo::route
route_id route
the routing information for data to be sent to the federate
Definition: CoreBroker.hpp:55
helics::BasicBrokerInfo::_sent_disconnect_ack
bool _sent_disconnect_ack
indicator that the disconnect ack has been sent
Definition: CoreBroker.hpp:79
helics::BrokerBase::getGlobalId
global_broker_id getGlobalId() const
Definition: BrokerBase.hpp:190
helics::CoreBroker::disconnect
virtual void disconnect() override final
Definition: CoreBroker.cpp:1897
helics::CoreBroker::getAllConnectionState
connection_state getAllConnectionState() const
Definition: CoreBroker.cpp:3400
helics::BrokerBase::broker_state_t::terminating
@ terminating
the termination process has started
helics::parent_broker_id
constexpr global_broker_id parent_broker_id
Definition: global_federate_id.hpp:60
helics::UnknownHandleManager::checkForLinks
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:103
helics::BasicBrokerInfo::_disable_ping
bool _disable_ping
indicator that the broker doesn't respond to pings
Definition: CoreBroker.hpp:80
helics::CoreBroker::configure
virtual void configure(const std::string &configureString) override final
Definition: CoreBroker.cpp:1707
helics::BrokerBase::setErrorState
void setErrorState(int eCode, const std::string &estring)
Definition: BrokerBase.cpp:468
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
loggingHelper.hpp
helics::BasicFedInfo::name
const std::string name
name of the federate
Definition: CoreBroker.hpp:53
helics::ActionMessage
Definition: ActionMessage.hpp:29
helics::BrokerBase::uuid_like
bool uuid_like
will be set to true if the name looks like a uuid
Definition: BrokerBase.hpp:126
helics::BasicBrokerInfo
Definition: CoreBroker.hpp:63
helics::BasicBrokerInfo::name
const std::string name
the name of the broker
Definition: CoreBroker.hpp:65
helics::UnknownHandleManager::processNonOptionalUnknowns
void processNonOptionalUnknowns(std::function< void(const std::string &name, char type, global_handle)> cfunc) const
Definition: UnknownHandleManager.cpp:200
helics::BrokerBase::parseArgs
int parseArgs(int argc, char *argv[])
Definition: BrokerBase.cpp:299
helics::global_broker_id::baseValue
constexpr base_type baseValue() const
Definition: global_federate_id.hpp:34
helics::BrokerBase::haltOperations
std::atomic< bool > haltOperations
flag indicating that no further message should be processed
Definition: BrokerBase.hpp:73
helics::UnknownHandleManager::hasUnknowns
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:134
helics::CoreBroker::setGlobal
virtual void setGlobal(const std::string &valueName, const std::string &value) override final
Definition: CoreBroker.cpp:2582
helics::helicsCLI11App
Definition: helicsCLI11.hpp:41
helics::versionString
constexpr auto versionString
Definition: helicsVersion.hpp:16
helics::BrokerBase::configureBase
virtual void configureBase()
Definition: BrokerBase.cpp:326
helics::ActionMessage::counter
uint16_t counter
26 counter for filter tracking or message counter
Definition: ActionMessage.hpp:40
helics::UnknownHandleManager::processRequiredUnknowns
void processRequiredUnknowns(std::function< void(const std::string &name, char type, global_handle)> cfunc) const
Definition: UnknownHandleManager.cpp:230
helics::BrokerBase::timeCoord
std::unique_ptr< ForwardingTimeCoordinator > timeCoord
object managing the time control
Definition: BrokerBase.hpp:93
helics::BrokerBase::broker_state_t::configured
@ configured
the broker itself has been configured and is ready to connect
checkActionFlag
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:75
helics::CoreBroker::transmit
virtual void transmit(route_id route, const ActionMessage &command)=0
helics::BrokerBase::no_ping
bool no_ping
indicator that the broker is not very responsive to ping requests
Definition: BrokerBase.hpp:125
helics::BasicBrokerInfo::_core
bool _core
if set to true the broker is a core false is a broker;
Definition: CoreBroker.hpp:76
helics::CoreBroker::getIdentifier
virtual const std::string & getIdentifier() const override final
Definition: CoreBroker.hpp:287
helics_sequencing_mode
helics_sequencing_mode
Definition: helics_enums.h:333
helics::CoreBroker::setIdentifier
void setIdentifier(const std::string &name)
Definition: CoreBroker.cpp:61
helics::BrokerFactory::unregisterBroker
void unregisterBroker(const std::string &name)
Definition: BrokerFactory.cpp:295
helics::CoreBroker::~CoreBroker
virtual ~CoreBroker()
Definition: CoreBroker.cpp:55
helics::InvalidParameter
Definition: core-exceptions.hpp:48
helics::UnknownHandleManager::hasRequiredUnknowns
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:174
helics::handle_type::filter
@ filter
handle to a filter
helics::UnknownHandleManager::checkForPublications
std::vector< targetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:98
helics::BasicFedInfo
Definition: CoreBroker.hpp:51
helics::CoreBroker::setLoggingLevel
virtual void setLoggingLevel(int logLevel) override final
Definition: CoreBroker.cpp:2503
helics::CoreBroker::connect
virtual bool connect() override final
Definition: CoreBroker.cpp:1769
helics::BrokerBase::addActionMessage
void addActionMessage(const ActionMessage &m)
Definition: BrokerBase.cpp:544
helics::BrokerBase::generateLocalAddressString
virtual std::string generateLocalAddressString() const =0
helics::BrokerBase::broker_state_t::connecting
@ connecting
the connection process has started
helics::UnknownHandleManager::clearInput
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:257
child_flag
constexpr uint16_t child_flag
overload of extra_flag4 indicating a message is from a child object
Definition: flagOperations.hpp:46
helics::BrokerBase::broker_state_t::connected
@ connected
the connection process has completed
helics::CoreBroker::isRoot
virtual bool isRoot() const override final
Definition: CoreBroker.hpp:206
helics::route_id
Definition: global_federate_id.hpp:171
helics::CoreBroker::clearTimeBarrier
virtual void clearTimeBarrier() override final
Definition: CoreBroker.cpp:1826
helics::UnknownHandleManager::clearEndpoint
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:269
helics::BrokerBase::broker_state_t::created
@ created
the broker has been created
helics::ActionMessage::payload
std::string payload
Definition: ActionMessage.hpp:44
clone_flag
@ clone_flag
flag indicating the filter is a clone filter or the data needs to be cloned
Definition: flagOperations.hpp:25
helics::UnknownHandleManager::checkForFilters
std::vector< targetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:117
helics::CoreBroker::setTimeBarrier
virtual void setTimeBarrier(Time barrierTime) override final
Definition: CoreBroker.cpp:1815
helics::BrokerFactory::findBroker
std::shared_ptr< Broker > findBroker(const std::string &brokerName)
Definition: BrokerFactory.cpp:185
clearActionFlag
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:90
helics::CoreBroker::processDisconnect
virtual void processDisconnect(bool skipUnregister=false) override final
Definition: CoreBroker.cpp:1859
helics::BrokerBase::global_id
std::atomic< global_broker_id > global_id
the unique identifier for the broker(core or broker)
Definition: BrokerBase.hpp:36
helics::CoreBroker::isOpenToNewFederates
virtual bool isOpenToNewFederates() const override
Definition: CoreBroker.cpp:211
helics::ActionMessage::messageID
int32_t messageID
8 – message ID for a variety of purposes
Definition: ActionMessage.hpp:35
helics::BrokerBase::brokerStateName
const friend std::string & brokerStateName(broker_state_t state)
Definition: BrokerBase.cpp:918
helics::CoreBroker::isConnected
virtual bool isConnected() const override final
Definition: CoreBroker.cpp:1844
helics::BrokerBase::global_broker_id_local
global_broker_id global_broker_id_local
Definition: BrokerBase.hpp:38
loadJsonStr
Json::Value loadJsonStr(const std::string &jsonString)
Definition: JsonProcessingFunctions.cpp:50
helics::CoreBroker::query
virtual std::string query(const std::string &target, const std::string &queryStr, helics_sequencing_mode mode=helics_sequencing_mode_fast) override final
Definition: CoreBroker.cpp:2518
helics::BrokerBase::currentMessageCounter
std::size_t currentMessageCounter() const
Definition: BrokerBase.hpp:264
indicator_flag
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:21
helics::BasicHandleInfo
Definition: BasicHandleInfo.hpp:36
helics::CoreBroker::getAddress
virtual const std::string & getAddress() const override final
Definition: CoreBroker.cpp:70
use_json_serialization_flag
@ use_json_serialization_flag
flag to indicate it should use the json packetization
Definition: flagOperations.hpp:22
helics::CoreBroker::allInitReady
bool allInitReady() const
Definition: CoreBroker.cpp:3427
fed
@ fed
special logging command for message coming from a fed
Definition: loggingHelper.hpp:32
helics::BasicBrokerInfo::routeInfo
std::string routeInfo
string describing the connection information for the route
Definition: CoreBroker.hpp:82
helics::BasicBrokerInfo::parent
global_broker_id parent
the id of the parent broker/core
Definition: CoreBroker.hpp:69
helics::BrokerBase::enteredExecutionMode
bool enteredExecutionMode
flag indicating that the broker has entered execution mode
Definition: BrokerBase.hpp:120
helics::UnknownHandleManager::checkForEndpoints
std::vector< targetInfo > checkForEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:110
setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:67
cancel_flag
constexpr uint16_t cancel_flag
overload of extra_flag3 indicating an operation is canceled
Definition: flagOperations.hpp:40
helics::BasicBrokerInfo::global_id
global_broker_id global_id
the global identifier for the broker
Definition: CoreBroker.hpp:67
helics::HandleManager::getEndpoint
BasicHandleInfo * getEndpoint(const std::string &name)
Definition: HandleManager.cpp:204
helics::BrokerBase::terminate_on_error
bool terminate_on_error
flag indicating that the federation should halt on any error
Definition: BrokerBase.hpp:77
helics::CoreBroker::waitForDisconnect
virtual bool waitForDisconnect(std::chrono::milliseconds msToWait=std::chrono::milliseconds(0)) const override final
Definition: CoreBroker.cpp:1850
helics::prettyPrintString
std::string prettyPrintString(const ActionMessage &command)
Definition: ActionMessage.cpp:861
empty_flag
@ empty_flag
flag indicating the interface is nameless
Definition: flagOperations.hpp:33
parent_flag
constexpr uint16_t parent_flag
overload of extra_flag3 indicating the message is from a parent object
Definition: flagOperations.hpp:43
error_flag
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:20
non_counting_flag
constexpr uint16_t non_counting_flag
overload of nameless_interface_flag indicating that a federate should not count in any totals
Definition: flagOperations.hpp:49
helics::handle_type::input
@ input
handle to a input interface
helics::BrokerBase::setLoggingFile
void setLoggingFile(const std::string &lfile)
Definition: BrokerBase.cpp:486
helics::CoreBroker::_gateway
bool _gateway
set to true if this broker should act as a gateway.
Definition: CoreBroker.hpp:96
helics::ActionMessage::actionTime
Time actionTime
40 the time an action took place or will take place //32
Definition: ActionMessage.hpp:43
helics::CoreBroker::setAsRoot
virtual void setAsRoot() override final
Definition: CoreBroker.cpp:1761
log_level
log_level
Definition: loggingHelper.hpp:20
helics::BasicBrokerInfo::_route_key
bool _route_key
indicator that the broker has a unique route id
Definition: CoreBroker.hpp:78
destination_target
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:17
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
error
@ error
only print errors
Definition: loggingHelper.hpp:22
required_flag
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:18
helics::CoreBroker::addRoute
virtual void addRoute(route_id rid, int interfaceId, const std::string &routeInfo)=0
optional_flag
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:24
helics::UnknownHandleManager::clearFilter
void clearFilter(const std::string &newFilter)
Definition: UnknownHandleManager.cpp:275
helics::BasicBrokerInfo::state
connection_state state
specify the current status of the broker
Definition: CoreBroker.hpp:71
helics::BasicBrokerInfo::_nonLocal
bool _nonLocal
indicator that the broker has a subbroker as a parent.
Definition: CoreBroker.hpp:77
helics::BasicFedInfo::global_id
global_federate_id global_id
the identification code for the federate
Definition: CoreBroker.hpp:54
helics::BrokerBase::queryTimeout
Time queryTimeout
Definition: BrokerBase.hpp:55
core_flag
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:19
helics::CoreBroker::globalError
virtual void globalError(int32_t errorCode, const std::string &errorString) override final
Definition: CoreBroker.cpp:1835
helics::UnknownHandleManager::checkForInputs
std::vector< targetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:92
helics::BasicBrokerInfo::_hasTimeDependency
bool _hasTimeDependency
flag indicating that a broker has general endpoints it is coordinating
Definition: CoreBroker.hpp:74
helics::CoreBroker::dataLink
virtual void dataLink(const std::string &publication, const std::string &input) override final
Definition: CoreBroker.cpp:170
helics::BrokerBase::setTickForwarding
void setTickForwarding(TickForwardingReasons reason, bool value=true)
Definition: BrokerBase.cpp:838
helics::CoreBroker::configureFromArgs
virtual void configureFromArgs(int argc, char *argv[]) override final
Definition: CoreBroker.cpp:1722
helics::TimeoutMonitor
Definition: TimeoutMonitor.h:27
helics::ActionMessage::setDestination
void setDestination(global_handle hand)
Definition: ActionMessage.hpp:100
helics::BrokerBase::sendToLogger
virtual bool sendToLogger(global_federate_id federateID, int logLevel, const std::string &name, const std::string &message) const
Definition: BrokerBase.cpp:359
helics::BasicBrokerInfo::route
route_id route
the identifier for the route to take to the broker
Definition: CoreBroker.hpp:68
helics::BrokerBase::logFlush
void logFlush()
Definition: BrokerBase.cpp:524
helics::CoreBroker
Definition: CoreBroker.hpp:94
helics::handle_type::endpoint
@ endpoint
handle to an endpoint
helics::UnknownHandleManager::clearFederateUnknowns
void clearFederateUnknowns(global_federate_id id)
Definition: UnknownHandleManager.cpp:282
helics::BrokerBase::higher_broker_id
global_broker_id higher_broker_id
the id code of the broker 1 level about this broker
Definition: BrokerBase.hpp:40
helics::Broker
Definition: core/Broker.hpp:18
helics::ActionMessage::dest_id
global_federate_id dest_id
20 fed_id for a targeted message
Definition: ActionMessage.hpp:38
helics_sequencing_mode_fast
@ helics_sequencing_mode_fast
Definition: helics_enums.h:335
helics::BrokerBase::actionQueue
gmlc::containers::BlockingPriorityQueue< ActionMessage > actionQueue
primary routing queue
Definition: BrokerBase.hpp:94
helics::CoreBroker::addDestinationFilterToEndpoint
virtual void addDestinationFilterToEndpoint(const std::string &filter, const std::string &endpoint) override final
Definition: CoreBroker.cpp:186
helics::BrokerBase::minFederateCount
int32_t minFederateCount
the minimum number of federates that must connect before entering init mode
Definition: BrokerBase.hpp:45
helics::BrokerBase::identifier
std::string identifier
an identifier for the broker
Definition: BrokerBase.hpp:58
helics::connection_state
connection_state
Definition: CoreBroker.hpp:41
helics::root_broker_id
constexpr global_broker_id root_broker_id
Definition: global_federate_id.hpp:62
helics::BrokerBase
Definition: BrokerBase.hpp:34
helics::message_processing_result::next_step
@ next_step
indicator that the iterations have completed
helics::isPriorityCommand
bool isPriorityCommand(const ActionMessage &command) noexcept
Definition: ActionMessage.hpp:232
helics::handle_type::publication
@ publication
handle to output interface
helics::state_string
const std::string & state_string(operation_state state)
Definition: CommonCore.cpp:47
helics::BasicFedInfo::parent
global_broker_id parent
the id of the parent broker/core
Definition: CoreBroker.hpp:56
helics::global_federate_id_shift
constexpr identififier_base_type global_federate_id_shift
Definition: global_federate_id.hpp:20
BrokerBase.hpp
helics::BrokerBase::address
std::string address
network location of the broker
Definition: BrokerBase.hpp:64
helics::ActionMessage::name
std::string & name
alias payload to a name reference for registration functions
Definition: ActionMessage.hpp:46
helics::CoreBroker::makeConnections
virtual void makeConnections(const std::string &file) override final
Definition: CoreBroker.cpp:161
helics::UnknownHandleManager::hasNonOptionalUnknowns
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:141
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:249
helics::CoreBroker::unregister
void unregister()
Definition: CoreBroker.cpp:1879