helics  3.3.0
CoreBroker.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/JsonBuilder.hpp"
10 #include "ActionMessage.hpp"
11 #include "BasicHandleInfo.hpp"
12 #include "Broker.hpp"
13 #include "BrokerBase.hpp"
14 #include "FederateIdExtra.hpp"
15 #include "HandleManager.hpp"
16 #include "TimeDependencies.hpp"
17 #include "UnknownHandleManager.hpp"
18 #include "gmlc/concurrency/DelayedObjects.hpp"
19 #include "gmlc/concurrency/TriggerVariable.hpp"
20 #include "gmlc/containers/AirLock.hpp"
21 #include "gmlc/containers/DualStringMappedVector.hpp"
22 #include "gmlc/containers/SimpleQueue.hpp"
23 
24 #include <any>
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 ConnectionState : std::uint8_t {
42  CONNECTED = 0,
43  INIT_REQUESTED = 1,
44  OPERATING = 2,
45  ERROR_STATE = 40,
46  REQUEST_DISCONNECT = 48,
47  DISCONNECTED = 50
48 };
49 
51 class BasicFedInfo {
52  public:
53  const std::string name;
57  ConnectionState state{ConnectionState::CONNECTED};
58  bool nonCounting{false}; // indicator the federate shouldn't count toward limits or total
59  explicit BasicFedInfo(std::string_view fedname): name(fedname) {}
60 };
61 
64  public:
65  const std::string name;
66 
70  ConnectionState state{ConnectionState::CONNECTED};
73  bool _hasTimeDependency{false};
74  bool _core{false};
75  bool _nonLocal{false};
76  bool _route_key{false};
77  bool _sent_disconnect_ack{false};
78  bool _disable_ping{false};
79  bool _observer{false}; // indicator that the broker is an observer
80  // 1 byte gap
81  std::string routeInfo;
82  explicit BasicBrokerInfo(std::string_view brokerName): name(brokerName) {}
83 };
84 
85 class TimeCoordinator;
86 class Logger;
87 class TimeoutMonitor;
88 
93 class CoreBroker: public Broker, public BrokerBase {
94  protected:
95  bool _gateway = false;
96  private:
97  std::atomic<bool> _isRoot{false};
98  bool isRootc{false};
99  bool connectionEstablished{false};
100  int routeCount = 1;
101  gmlc::containers::
103  DualStringMappedVector<BasicFedInfo, GlobalFederateId, reference_stability::unstable>
104  mFederates;
106  gmlc::containers::
107  DualStringMappedVector<BasicBrokerInfo, GlobalBrokerId, reference_stability::unstable>
108  mBrokers;
110  std::string mPreviousLocalBrokerIdentifier;
111 
112  HandleManager handles;
113  UnknownHandleManager unknownHandles;
114  std::vector<std::pair<std::string, GlobalFederateId>> delayedDependencies;
117  std::unordered_map<GlobalFederateId, LocalFederateId> global_id_translation;
119  std::unordered_map<GlobalFederateId, route_id> routing_table;
121  std::unordered_map<std::string, route_id> knownExternalEndpoints;
122  std::unordered_map<std::string, std::string> global_values;
123  std::mutex name_mutex_;
124  std::atomic<int> queryCounter{1}; // counter for active queries going to the local API
125  bool force_connection{false};
126  gmlc::concurrency::DelayedObjects<std::string> activeQueries;
127  std::vector<std::tuple<fileops::JsonMapBuilder, std::vector<ActionMessage>, bool>> mapBuilders;
130  std::deque<std::pair<int32_t, decltype(std::chrono::steady_clock::now())>> queryTimeouts;
131 
132  std::vector<ActionMessage> earlyMessages;
133  gmlc::concurrency::TriggerVariable disconnection;
134  std::unique_ptr<TimeoutMonitor> timeoutMon;
136  std::atomic<uint16_t> nextAirLock{0};
137  std::array<gmlc::containers::AirLock<std::any>, 3> dataAirlocks;
139  // variables for a time logging federate
140  std::string
141  mTimeMonitorFederate;
142  GlobalFederateId mTimeMonitorFederateId{};
143  GlobalFederateId mTimeMonitorLocalFederateId{};
145  Time mTimeMonitorPeriod{timeZero};
146  Time mTimeMonitorLastLogTime{Time::minVal()};
147  Time mTimeMonitorCurrentTime{Time::minVal()};
148  std::atomic<double> simTime{mInvalidSimulationTime};
149  private:
153  virtual void processCommand(ActionMessage&& command) override;
159  void processPriorityCommand(ActionMessage&& command) override;
160 
162  void processBrokerConfigureCommands(ActionMessage& cmd);
164  gmlc::containers::SimpleQueue<ActionMessage> delayTransmitQueue;
165  /* function to transmit the delayed messages*/
166  void transmitDelayedMessages();
170  void routeMessage(ActionMessage& cmd, GlobalFederateId dest);
171  void routeMessage(ActionMessage&& cmd, GlobalFederateId dest);
174  void routeMessage(const ActionMessage& cmd);
175  void routeMessage(ActionMessage&& cmd);
177  void transmitToParent(ActionMessage&& cmd);
179  void propagateError(ActionMessage&& cmd);
181  void broadcast(ActionMessage& cmd);
182 
183  route_id fillMessageRouteInformation(ActionMessage& mess);
184 
186  void executeInitializationOperations();
188  uint16_t getNextAirlockIndex();
191  bool verifyBrokerKey(ActionMessage& mess) const;
194  bool verifyBrokerKey(std::string_view key) const;
195 
196  public:
199  virtual bool connect() override final;
202  virtual void disconnect() override final;
204  void unregister();
209  virtual void processDisconnect(bool skipUnregister = false) override final;
211  virtual bool isConnected() const override final;
214  virtual void setAsRoot() override final;
217  virtual bool isRoot() const override final { return _isRoot; };
218 
219  virtual bool isOpenToNewFederates() const override;
220 
221  virtual void setLoggingCallback(
222  std::function<void(int, std::string_view, std::string_view)> logFunction) override final;
223 
224  virtual bool waitForDisconnect(
225  std::chrono::milliseconds msToWait = std::chrono::milliseconds(0)) const override final;
226 
227  virtual void setTimeBarrier(Time barrierTime) override final;
228 
229  virtual void clearTimeBarrier() override final;
230 
231  virtual void globalError(int32_t errorCode, std::string_view errorString) override final;
232 
233  private:
236  virtual bool brokerConnect() = 0;
239  virtual void brokerDisconnect() = 0;
240 
241  protected:
248  virtual void transmit(route_id route, const ActionMessage& command) = 0;
256  virtual void transmit(route_id route, ActionMessage&& command) = 0;
265  virtual void addRoute(route_id rid, int interfaceId, std::string_view routeInfo) = 0;
269  virtual void removeRoute(route_id rid) = 0;
270 
271  public:
274  explicit CoreBroker(bool setAsRootBroker = false) noexcept;
276  explicit CoreBroker(std::string_view broker_name);
278  virtual ~CoreBroker();
280  virtual void configure(std::string_view configureString) override final;
283  virtual void configureFromArgs(int argc, char* argv[]) override final;
285  virtual void configureFromVector(std::vector<std::string> args) override final;
286 
290  bool allInitReady() const;
293 
295  void setIdentifier(std::string_view name);
297  virtual const std::string& getIdentifier() const override final { return identifier; }
298  virtual const std::string& getAddress() const override final;
299  virtual void setLoggingLevel(int logLevel) override final;
300  virtual void setLogFile(std::string_view lfile) override final;
301  virtual std::string
302  query(std::string_view target,
303  std::string_view queryStr,
304  HelicsSequencingModes mode = HELICS_SEQUENCING_MODE_FAST) override final;
305  virtual void setGlobal(std::string_view valueName, std::string_view value) override final;
306  virtual void sendCommand(std::string_view target,
307  std::string_view commandStr,
308  HelicsSequencingModes mode) override final;
309  virtual void makeConnections(const std::string& file) override final;
310  virtual void linkEndpoints(std::string_view source, std::string_view target) override final;
311  virtual void dataLink(std::string_view publication, std::string_view input) override final;
312 
313  virtual void addSourceFilterToEndpoint(std::string_view filter,
314  std::string_view endpoint) override final;
315 
316  virtual void addDestinationFilterToEndpoint(std::string_view filter,
317  std::string_view endpoint) override final;
318  virtual void addAlias(std::string_view interfaceKey, std::string_view alias) override final;
319 
320  protected:
321  virtual std::shared_ptr<helicsCLI11App> generateCLI() override;
322 
323  virtual double getSimulationTime() const override;
324 
325  private:
326  int getCountableFederates() const;
328  void checkDependencies();
330  void findAndNotifyInputTargets(BasicHandleInfo& handleInfo, const std::string& key);
331  void findAndNotifyPublicationTargets(BasicHandleInfo& handleInfo, const std::string& key);
332 
333  void findAndNotifyFilterTargets(BasicHandleInfo& handleInfo, const std::string& key);
334  void findAndNotifyEndpointTargets(BasicHandleInfo& handleInfo, const std::string& key);
336  void processDisconnectCommand(ActionMessage& command);
338  void processError(ActionMessage& command);
340  void disconnectBroker(BasicBrokerInfo& brk);
342  void markAsDisconnected(GlobalBrokerId brkid);
344  void checkInFlightQueries(GlobalBrokerId brkid);
346  void checkForNamedInterface(ActionMessage& command);
348  void removeNamedTarget(ActionMessage& command);
350  void processQueryCommand(ActionMessage& cmd);
352  void processQuery(ActionMessage& m);
354  void processInitCommand(ActionMessage& cmd);
356  void checkQueryTimeouts();
358  void processQueryResponse(const ActionMessage& m);
360  void processLocalQuery(const ActionMessage& m);
362  std::string generateQueryAnswer(std::string_view request, bool force_ordering);
364  std::string quickBrokerQueries(std::string_view request) const;
366  void processCommandInstruction(ActionMessage& m);
368  void processLocalCommandInstruction(ActionMessage& m);
370  std::string getNameList(std::string_view gidString) const;
372  route_id getRoute(GlobalFederateId fedid) const;
374  route_id getRoute(int32_t fedid) const { return getRoute(GlobalFederateId(fedid)); }
375 
376  const BasicBrokerInfo* getBrokerById(GlobalBrokerId brokerid) const;
377 
378  BasicBrokerInfo* getBrokerById(GlobalBrokerId brokerid);
379 
380  void addLocalInfo(BasicHandleInfo& handleInfo, const ActionMessage& m);
381  void addPublication(ActionMessage& m);
382  void addInput(ActionMessage& m);
383  void addEndpoint(ActionMessage& m);
384  void addFilter(ActionMessage& m);
385  void addTranslator(ActionMessage& m);
386  // Handle the registration of new brokers
387  void brokerRegistration(ActionMessage&& command);
388  // Helper function for linking interfaces
389  void linkInterfaces(ActionMessage& command);
390  // Handle the registration of new federates
391  void fedRegistration(ActionMessage&& command);
392 
393  // bool updateSourceFilterOperator (ActionMessage &m);
395  void initializeMapBuilder(std::string_view request,
396  std::uint16_t index,
397  bool reset,
398  bool force_ordering);
399 
400  std::string generateGlobalStatus(fileops::JsonMapBuilder& builder);
402  void sendErrorToImmediateBrokers(int errorCode);
404  void sendDisconnect(action_message_def::action_t disconnectType);
406  std::string generateFederationSummary() const;
408  void labelAsDisconnected(GlobalBrokerId brkid);
409 
411  void processTimeMonitorMessage(ActionMessage& m);
413  void loadTimeMonitor(bool firstLoad, std::string_view newFederate);
415  void generateTimeBarrier(ActionMessage& m);
416  int generateMapObjectCounter() const;
417  friend class TimeoutMonitor;
418 };
419 
420 } // namespace helics
helics::timeZero
constexpr Time timeZero
Definition: helicsTime.hpp:31
helics::destination_target
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:43
helics::BrokerBase::BrokerState::CONNECTED
@ CONNECTED
the connection process has completed
helics::CoreBroker::dataLink
virtual void dataLink(std::string_view publication, std::string_view input) override final
Definition: CoreBroker.cpp:185
helics::UnknownHandleManager::clearFederateUnknowns
void clearFederateUnknowns(GlobalFederateId id)
Definition: UnknownHandleManager.cpp:311
helics::message_process_result::processed
@ processed
the message was used to update the current state
helics::BrokerBase::isRunning
bool isRunning() const
Definition: BrokerBase.hpp:201
helics::CoreBroker::configure
virtual void configure(std::string_view configureString) override final
Definition: CoreBroker.cpp:2140
helics::indicator_flag
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:18
helics::BrokerBase::minBrokerCount
int32_t minBrokerCount
Definition: BrokerBase.hpp:56
helics::ActionMessage::name
void name(std::string_view name)
Definition: ActionMessage.hpp:107
helics::CoreBroker::addAlias
virtual void addAlias(std::string_view interfaceKey, std::string_view alias) override final
Definition: CoreBroker.cpp:210
helics::BrokerBase::BrokerState::CONFIGURED
@ CONFIGURED
the broker itself has been configured and is ready to connect
helics::BrokerBase::higher_broker_id
GlobalBrokerId higher_broker_id
the id code of the broker 1 level about this broker
Definition: BrokerBase.hpp:49
helics::BrokerBase::useJsonSerialization
bool useJsonSerialization
Definition: BrokerBase.hpp:145
helics::BrokerBase::brokerKey
std::string brokerKey
Definition: BrokerBase.hpp:71
helics::BrokerBase::timeout
Time timeout
timeout to wait to establish a broker connection before giving up
Definition: BrokerBase.hpp:63
helics::CoreBroker::generateCLI
virtual std::shared_ptr< helicsCLI11App > generateCLI() override
Definition: CoreBroker.cpp:2190
helics::UnknownHandleManager::checkForEndpointLinks
std::vector< std::string > checkForEndpointLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:113
HELICS_SEQUENCING_MODE_ORDERED
@ HELICS_SEQUENCING_MODE_ORDERED
Definition: helics_enums.h:399
helics::CoreBroker::getSimulationTime
virtual double getSimulationTime() const override
Definition: CoreBroker.cpp:2185
helics::optional_flag
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:53
helics::core_flag
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:74
helics::CoreBroker::configureFromVector
virtual void configureFromVector(std::vector< std::string > args) override final
Definition: CoreBroker.cpp:2170
helics::BrokerBase::asyncTime
bool asyncTime
flag indicating the use of async time keeping
Definition: BrokerBase.hpp:92
helics::BrokerBase::enable_profiling
bool enable_profiling
Definition: BrokerBase.hpp:146
helics::ERROR_LEVEL
@ ERROR_LEVEL
only print errors
Definition: logging.hpp:23
helics::cancel_flag
@ cancel_flag
flag indicating an operation is canceled
Definition: flagOperations.hpp:113
helics::action_message_def::action_t
action_t
Definition: ActionMessageDefintions.hpp:20
helics::gGlobalBrokerIdShift
constexpr IdentifierBaseType gGlobalBrokerIdShift
Definition: GlobalFederateId.hpp:23
helics::BrokerBase::BrokerState::TERMINATING
@ TERMINATING
the termination process has started
helics::CoreBroker::removeRoute
virtual void removeRoute(route_id rid)=0
helics::UnknownHandleManager::clearPublication
void clearPublication(const std::string &newPublication)
Definition: UnknownHandleManager.cpp:291
helics::BrokerBase::getGlobalId
GlobalBrokerId getGlobalId() const
Definition: BrokerBase.hpp:210
helics::BrokerBase::hasTimeDependency
bool hasTimeDependency
Definition: BrokerBase.hpp:136
helics_definitions.hpp
base helics enumerations for C++ API's, a namespace wrapper for the definitions defined in helics_enu...
helics::BasicFedInfo::route
route_id route
the routing information for data to be sent to the federate
Definition: CoreBroker.hpp:55
HELICS_LOG_LEVEL_WARNING
@ HELICS_LOG_LEVEL_WARNING
Definition: helics_enums.h:192
helics::BasicBrokerInfo::_sent_disconnect_ack
bool _sent_disconnect_ack
indicator that the disconnect ack has been sent
Definition: CoreBroker.hpp:77
helics::CoreBroker::disconnect
virtual void disconnect() override final
Definition: CoreBroker.cpp:2344
helics::UnknownHandleManager::checkForLinks
std::vector< std::string > checkForLinks(const std::string &newSource) const
Definition: UnknownHandleManager.cpp:107
helics::BasicBrokerInfo::_disable_ping
bool _disable_ping
indicator that the broker doesn't respond to pings
Definition: CoreBroker.hpp:78
helics::async_timing_flag
@ async_timing_flag
flag indicating use of asynchronous timing on a global level
Definition: flagOperations.hpp:81
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
helics::CoreBroker::addDestinationFilterToEndpoint
virtual void addDestinationFilterToEndpoint(std::string_view filter, std::string_view endpoint) override final
Definition: CoreBroker.cpp:201
helics::GlobalBrokerId::baseValue
constexpr BaseType baseValue() const
Definition: GlobalFederateId.hpp:35
loggingHelper.hpp
helics::BrokerBase::sendToLogger
bool sendToLogger(GlobalFederateId federateID, int logLevel, std::string_view name, std::string_view message, bool fromRemote=false) const
Definition: BrokerBase.cpp:343
LogManager.hpp
helics::BasicFedInfo::name
const std::string name
name of the federate
Definition: CoreBroker.hpp:53
helics::BrokerBase::global_id
std::atomic< GlobalBrokerId > global_id
Definition: BrokerBase.hpp:46
helics::BrokerBase::BrokerState::CONNECTING
@ CONNECTING
the connection process has started
helics::GlobalFederateId
Definition: GlobalFederateId.hpp:72
helics::ActionMessage
Definition: ActionMessage.hpp:30
helics::BrokerBase::uuid_like
bool uuid_like
will be set to true if the name looks like a uuid
Definition: BrokerBase.hpp:143
helics::parent_broker_id
constexpr GlobalBrokerId parent_broker_id
Definition: GlobalFederateId.hpp:64
helics::BasicBrokerInfo
Definition: CoreBroker.hpp:63
helics::CoreBroker::setIdentifier
void setIdentifier(std::string_view name)
Definition: CoreBroker.cpp:68
helics::InterfaceType::FILTER
@ FILTER
handle to a filter
helics::BrokerBase::brokerStateName
const friend std::string & brokerStateName(BrokerState state)
Definition: BrokerBase.cpp:965
helics::BasicBrokerInfo::name
const std::string name
the name of the broker
Definition: CoreBroker.hpp:65
helics::BrokerBase::parseArgs
int parseArgs(int argc, char *argv[])
Definition: BrokerBase.cpp:268
helics::InterfaceType::INPUT
@ INPUT
handle to a input interface
helics::BrokerBase::haltOperations
std::atomic< bool > haltOperations
flag indicating that no further message should be processed
Definition: BrokerBase.hpp:80
helics::UnknownHandleManager::hasUnknowns
bool hasUnknowns() const
Definition: UnknownHandleManager.cpp:144
helics::BrokerBase::mLogManager
std::shared_ptr< LogManager > mLogManager
object to handle the logging considerations
Definition: BrokerBase.hpp:110
helics::BrokerBase::maxLogLevel
std::atomic< int32_t > maxLogLevel
Definition: BrokerBase.hpp:51
helics::helicsCLI11App
Definition: helicsCLI11.hpp:42
helics::versionString
constexpr auto versionString
Definition: helicsVersion.hpp:18
helics::CoreBroker::getAllConnectionState
ConnectionState getAllConnectionState() const
Definition: CoreBroker.cpp:4142
helics::BrokerBase::configureBase
virtual void configureBase()
Definition: BrokerBase.cpp:295
helics::ActionMessage::counter
uint16_t counter
26 counter for filter tracking or message counter
Definition: ActionMessage.hpp:41
helics::CoreBroker::setLoggingCallback
virtual void setLoggingCallback(std::function< void(int, std::string_view, std::string_view)> logFunction) override final
Definition: CoreBroker.cpp:117
helics::CoreBroker::addSourceFilterToEndpoint
virtual void addSourceFilterToEndpoint(std::string_view filter, std::string_view endpoint) override final
Definition: CoreBroker.cpp:193
helics::BrokerBase::minChildCount
int32_t minChildCount
Definition: BrokerBase.hpp:60
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:142
helics::BasicBrokerInfo::_core
bool _core
if set to true the broker is a core, false is a broker
Definition: CoreBroker.hpp:74
helics::LogLevels
LogLevels
Definition: logging.hpp:20
helics::CoreBroker::getIdentifier
virtual const std::string & getIdentifier() const override final
Definition: CoreBroker.hpp:297
helics::toggleActionFlag
void toggleActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:160
helics::CoreBroker::query
virtual std::string query(std::string_view target, std::string_view queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST) override final
Definition: CoreBroker.cpp:3065
helics::CoreBroker::~CoreBroker
virtual ~CoreBroker()
Definition: CoreBroker.cpp:62
helics::InvalidParameter
Definition: core-exceptions.hpp:48
helics::CoreBroker::globalError
virtual void globalError(int32_t errorCode, std::string_view errorString) override final
Definition: CoreBroker.cpp:2283
helics::UnknownHandleManager::hasRequiredUnknowns
bool hasRequiredUnknowns() const
Definition: UnknownHandleManager.cpp:185
helics::BasicFedInfo::global_id
GlobalFederateId global_id
the identification code for the federate
Definition: CoreBroker.hpp:54
helics::BrokerBase::globalTime
bool globalTime
flag indicating that the broker should use a global time coordinator
Definition: BrokerBase.hpp:90
helics::BasicBrokerInfo::global_id
GlobalBrokerId global_id
the global identifier for the broker
Definition: CoreBroker.hpp:67
helics::UnknownHandleManager::checkForPublications
std::vector< targetInfo > checkForPublications(const std::string &newPublication) const
Definition: UnknownHandleManager.cpp:102
helics::BasicFedInfo
Definition: CoreBroker.hpp:51
helics::CoreBroker::setLoggingLevel
virtual void setLoggingLevel(int logLevel) override final
Definition: CoreBroker.cpp:3046
helics::CoreBroker::connect
virtual bool connect() override final
Definition: CoreBroker.cpp:2215
helics::BrokerBase::addActionMessage
void addActionMessage(const ActionMessage &m)
Definition: BrokerBase.cpp:551
helics::BrokerBase::generateLocalAddressString
virtual std::string generateLocalAddressString() const =0
helics::UnknownHandleManager::clearInput
void clearInput(const std::string &newInput)
Definition: UnknownHandleManager.cpp:285
helics::CoreBroker::isRoot
virtual bool isRoot() const override final
Definition: CoreBroker.hpp:217
helics::gRootBrokerID
constexpr GlobalBrokerId gRootBrokerID
Definition: GlobalFederateId.hpp:66
helics::BrokerFactory::findBroker
std::shared_ptr< Broker > findBroker(std::string_view brokerName)
Definition: BrokerFactory.cpp:183
helics::route_id
Definition: GlobalFederateId.hpp:184
helics::CoreBroker::clearTimeBarrier
virtual void clearTimeBarrier() override final
Definition: CoreBroker.cpp:2274
helics::UnknownHandleManager::clearEndpoint
void clearEndpoint(const std::string &newEndpoint)
Definition: UnknownHandleManager.cpp:297
helics::BrokerBase::timeCoord
std::unique_ptr< BaseTimeCoordinator > timeCoord
object managing the time control
Definition: BrokerBase.hpp:108
helics::UnknownHandleManager::checkForFilters
std::vector< targetInfo > checkForFilters(const std::string &newFilter) const
Definition: UnknownHandleManager.cpp:127
helics::CoreBroker::setTimeBarrier
virtual void setTimeBarrier(Time barrierTime) override final
Definition: CoreBroker.cpp:2263
helics::CoreBroker::processDisconnect
virtual void processDisconnect(bool skipUnregister=false) override final
Definition: CoreBroker.cpp:2307
helics::CoreBroker::isOpenToNewFederates
virtual bool isOpenToNewFederates() const override
Definition: CoreBroker.cpp:233
helics::ActionMessage::messageID
int32_t messageID
8 – message ID for a variety of purposes
Definition: ActionMessage.hpp:36
helics::BasicFedInfo::parent
GlobalBrokerId parent
the id of the parent broker/core
Definition: CoreBroker.hpp:56
helics::setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:130
helics::CoreBroker::isConnected
virtual bool isConnected() const override final
Definition: CoreBroker.cpp:2292
helics::BrokerBase::BrokerState::CONFIGURING
@ CONFIGURING
the broker is in the processing of configuring
helics::BrokerBase::currentMessageCounter
std::size_t currentMessageCounter() const
Definition: BrokerBase.hpp:292
helics::BasicHandleInfo
Definition: BasicHandleInfo.hpp:20
helics::CoreBroker::getAddress
virtual const std::string & getAddress() const override final
Definition: CoreBroker.cpp:77
helics::CoreBroker::allInitReady
bool allInitReady() const
Definition: CoreBroker.cpp:4169
helics::non_counting_flag
@ non_counting_flag
flag indicating that a federate should not count in any totals
Definition: flagOperations.hpp:90
helics::BasicBrokerInfo::routeInfo
std::string routeInfo
string describing the connection information for the route
Definition: CoreBroker.hpp:81
helics::BrokerBase::enteredExecutionMode
bool enteredExecutionMode
flag indicating that the broker has entered execution mode
Definition: BrokerBase.hpp:138
helics::GlobalBrokerId
Definition: GlobalFederateId.hpp:27
helics::UnknownHandleManager::checkForEndpoints
std::vector< targetInfo > checkForEndpoints(const std::string &newEndpoint) const
Definition: UnknownHandleManager.cpp:120
helics::CoreBroker::linkEndpoints
virtual void linkEndpoints(std::string_view source, std::string_view target) override final
Definition: CoreBroker.cpp:177
helics::ActionMessage::payload
SmallBuffer payload
buffer to contain the data payload
Definition: ActionMessage.hpp:48
helics::BrokerBase::terminate_on_error
bool terminate_on_error
flag indicating that the federation should halt on any error
Definition: BrokerBase.hpp:84
helics::InterfaceType::TRANSLATOR
@ TRANSLATOR
handle to a translator object
helics::ActionMessage::dest_id
GlobalFederateId dest_id
20 fed_id for a targeted message
Definition: ActionMessage.hpp:39
HelicsSequencingModes
HelicsSequencingModes
Definition: helics_enums.h:395
helics::HandleManager::getEndpoint
BasicHandleInfo * getEndpoint(std::string_view name)
Definition: HandleManager.cpp:203
helics::CoreBroker::waitForDisconnect
virtual bool waitForDisconnect(std::chrono::milliseconds msToWait=std::chrono::milliseconds(0)) const override final
Definition: CoreBroker.cpp:2298
helics::prettyPrintString
std::string prettyPrintString(const ActionMessage &command)
Definition: ActionMessage.cpp:846
helics::BrokerBase::processBaseCommands
std::pair< bool, std::vector< std::string_view > > processBaseCommands(ActionMessage &command)
Definition: BrokerBase.cpp:439
helics::observer_flag
@ observer_flag
flag indicating that a federate is an observer only
Definition: flagOperations.hpp:83
helics::BrokerBase::addBaseInformation
void addBaseInformation(Json::Value &base, bool hasParent) const
Definition: BrokerBase.cpp:510
helics::BasicBrokerInfo::parent
GlobalBrokerId parent
Definition: CoreBroker.hpp:69
helics::getSpecialFederateId
constexpr GlobalFederateId getSpecialFederateId(GlobalBrokerId broker, GlobalBrokerId::BaseType index)
Definition: GlobalFederateId.hpp:131
helics::BrokerBase::BrokerState::CREATED
@ CREATED
the broker has been created
helics::CoreBroker::_gateway
bool _gateway
set to true if this broker should act as a gateway.
Definition: CoreBroker.hpp:95
helics::ActionMessage::actionTime
Time actionTime
40 the time an action took place or will take place //32
Definition: ActionMessage.hpp:44
helics::parent_flag
@ parent_flag
flag indicating the message is from a parent object
Definition: flagOperations.hpp:32
helics::GlobalFederateId::isValid
constexpr bool isValid() const
Definition: GlobalFederateId.hpp:109
helics::generateInterfaceQueryResults
std::string generateInterfaceQueryResults(std::string_view request, const HandleManager &handles, const GlobalFederateId fed, const std::function< void(Json::Value &)> &addHeaderInfo)
Definition: queryHelpers.cpp:208
helics::CoreBroker::setAsRoot
virtual void setAsRoot() override final
Definition: CoreBroker.cpp:2207
helics::BrokerBase::BrokerState::TERMINATED
@ TERMINATED
the termination process has started
helics::slow_responding_flag
@ slow_responding_flag
flag indicating a federate, core or broker is slow responding
Definition: flagOperations.hpp:88
helics::BrokerBase::BrokerState::ERRORED
@ ERRORED
an error was encountered
helics::ActionMessage::setDestination
void setDestination(GlobalHandle hand)
Definition: ActionMessage.hpp:99
helics::BasicBrokerInfo::_route_key
bool _route_key
indicator that the broker has a unique route id
Definition: CoreBroker.hpp:76
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::CoreBroker::setLogFile
virtual void setLogFile(std::string_view lfile) override final
Definition: CoreBroker.cpp:3055
helics::InterfaceType::ENDPOINT
@ ENDPOINT
handle to an endpoint
helics::UnknownHandleManager::clearFilter
void clearFilter(const std::string &newFilter)
Definition: UnknownHandleManager.cpp:304
helics::UnknownHandleManager::processUnknowns
void processUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:211
HELICS_SEQUENCING_MODE_FAST
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:397
helics::clearActionFlag
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:153
helics::BasicBrokerInfo::_nonLocal
bool _nonLocal
indicator that the broker has a subbroker as a parent.
Definition: CoreBroker.hpp:75
helics::BrokerBase::queryTimeout
Time queryTimeout
Definition: BrokerBase.hpp:65
helics::UnknownHandleManager::processRequiredUnknowns
void processRequiredUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:258
helics::global_timing_flag
@ global_timing_flag
flag indicating to use global timing (overload of indicator flag)
Definition: flagOperations.hpp:76
helics::checkActionFlag
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:138
helics::MessageProcessingResult::NEXT_STEP
@ NEXT_STEP
indicator that the iterations have completed
helics::UnknownHandleManager::checkForInputs
std::vector< targetInfo > checkForInputs(const std::string &newInput) const
Definition: UnknownHandleManager.cpp:96
helics::gGlobalFederateIdShift
constexpr IdentifierBaseType gGlobalFederateIdShift
Definition: GlobalFederateId.hpp:21
helics::BasicBrokerInfo::_hasTimeDependency
bool _hasTimeDependency
Definition: CoreBroker.hpp:73
helics::WARNING
@ WARNING
print/log warning and errors
Definition: logging.hpp:25
helics::BrokerBase::setTickForwarding
void setTickForwarding(TickForwardingReasons reason, bool value=true)
Definition: BrokerBase.cpp:858
helics::CoreBroker::sendCommand
virtual void sendCommand(std::string_view target, std::string_view commandStr, HelicsSequencingModes mode) override final
Definition: CoreBroker.cpp:3161
helics::use_json_serialization_flag
@ use_json_serialization_flag
flag to indicate it should use the json packetization
Definition: flagOperations.hpp:79
helics::CoreBroker::configureFromArgs
virtual void configureFromArgs(int argc, char *argv[]) override final
Definition: CoreBroker.cpp:2155
helics::TimeoutMonitor
Definition: TimeoutMonitor.h:27
helics::clone_flag
@ clone_flag
flag indicating the filter is a clone filter or the data needs to be cloned
Definition: flagOperations.hpp:55
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:537
helics::required_flag
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:45
helics::CoreBroker
Definition: CoreBroker.hpp:93
helics::BrokerBase::BrokerState::OPERATING
@ OPERATING
normal operating conditions
helics::BasicBrokerInfo::state
ConnectionState state
specify the current status of the broker
Definition: CoreBroker.hpp:71
helics::loadTimeFromString
Time loadTimeFromString(std::string_view timeString)
Definition: timeOperations.cpp:21
helics::Broker
Definition: core/Broker.hpp:18
helics::ConnectionState
ConnectionState
Definition: CoreBroker.hpp:41
helics::stateString
const std::string & stateString(OperatingState state)
Definition: CommonCore.cpp:56
helics::UnknownHandleManager::processNonOptionalUnknowns
void processNonOptionalUnknowns(const std::function< void(const std::string &name, char type, GlobalHandle)> &cfunc) const
Definition: UnknownHandleManager.cpp:228
helics::BrokerBase::actionQueue
gmlc::containers::BlockingPriorityQueue< ActionMessage > actionQueue
primary routing queue
Definition: BrokerBase.hpp:109
helics::error_flag
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:17
helics::BrokerBase::minFederateCount
int32_t minFederateCount
Definition: BrokerBase.hpp:54
helics::BrokerBase::identifier
std::string identifier
an identifier for the broker
Definition: BrokerBase.hpp:70
helics::CoreBroker::addRoute
virtual void addRoute(route_id rid, int interfaceId, std::string_view routeInfo)=0
helics::BrokerBase
Definition: BrokerBase.hpp:42
helics::CoreBroker::setGlobal
virtual void setGlobal(std::string_view valueName, std::string_view value) override final
Definition: CoreBroker.cpp:3152
helics::BrokerBase::setErrorState
void setErrorState(int eCode, std::string_view estring)
Definition: BrokerBase.cpp:396
helics::isPriorityCommand
bool isPriorityCommand(const ActionMessage &command) noexcept
Definition: ActionMessage.hpp:232
BrokerBase.hpp
helics::BrokerBase::address
std::string address
network location of the broker
Definition: BrokerBase.hpp:76
helics::CoreBroker::makeConnections
virtual void makeConnections(const std::string &file) override final
Definition: CoreBroker.cpp:168
helics::BrokerFactory::unregisterBroker
void unregisterBroker(std::string_view name)
Definition: BrokerFactory.cpp:302
helics::InterfaceType::PUBLICATION
@ PUBLICATION
handle to output interface
helics::ActionMessage::source_id
GlobalFederateId source_id
12 – for federate_id or route_id
Definition: ActionMessage.hpp:37
helics::UnknownHandleManager::hasNonOptionalUnknowns
bool hasNonOptionalUnknowns() const
Definition: UnknownHandleManager.cpp:151
helics::BrokerBase::global_broker_id_local
GlobalBrokerId global_broker_id_local
Definition: BrokerBase.hpp:47
helics::bufferToJson
void bufferToJson(const LogBuffer &buffer, Json::Value &base)
Definition: LogBuffer.cpp:60
helics::child_flag
@ child_flag
flag indicating a message is from a child object
Definition: flagOperations.hpp:35
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:171
helics::CoreBroker::unregister
void unregister()
Definition: CoreBroker.cpp:2326
helics::generateJsonErrorResponse
std::string generateJsonErrorResponse(JsonErrorCodes code, const std::string &message)
Definition: JsonGeneration.hpp:36