helics  3.0.1
MultiBroker.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 
8 #pragma once
9 #include "../core/CoreBroker.hpp"
10 #include "../network/NetworkBroker.hpp"
11 
12 #include <memory>
13 #include <string>
14 #include <utility>
15 #include <vector>
16 
17 namespace helics {
18 class ActionMessage;
19 class CommsInterface;
20 
21 // small function to call to force symbol linkages
22 bool allowMultiBroker();
23 
26 class MultiBroker: public CoreBroker {
27  protected:
28  std::atomic<int> disconnectionStage{0};
29  std::vector<std::unique_ptr<CommsInterface>> comms;
30  std::unique_ptr<CommsInterface>
34  std::string configFile;
35  std::atomic<bool> brokerInitialized{false};
37  std::vector<std::pair<route_id, int>> routingTable; // index of the routes
38  public:
40  MultiBroker() noexcept;
41 
45  explicit MultiBroker(const std::string& brokerName);
46 
48  ~MultiBroker();
49 
50  private:
51  virtual bool brokerConnect() override;
52  virtual void brokerDisconnect() override;
53  virtual bool tryReconnect() override;
55  virtual std::shared_ptr<helicsCLI11App> generateCLI() override;
56 
57  protected:
59  virtual std::string generateLocalAddressString() const override;
60 
61  public:
62  virtual void transmit(route_id rid, const ActionMessage& cmd) override;
63  virtual void transmit(route_id rid, ActionMessage&& cmd) override;
64 
65  virtual void addRoute(route_id rid, int interfaceId, const std::string& routeInfo) override;
66 
67  virtual void removeRoute(route_id rid) override;
68 };
69 } // namespace helics
helics::MultiBroker
Definition: MultiBroker.hpp:26
helics::BrokerBase::joinAllThreads
void joinAllThreads()
Definition: BrokerBase.cpp:91
helics::MultiBroker::type
CoreType type
the core type of the master controller
Definition: MultiBroker.hpp:36
helics::MultiBroker::generateLocalAddressString
virtual std::string generateLocalAddressString() const override
Definition: MultiBroker.cpp:217
helics::CoreType::MULTI
@ MULTI
use the multi-broker
helics::MultiBroker::netInfo
NetworkBrokerData netInfo
structure containing the networking information
Definition: MultiBroker.hpp:32
helics::CoreBroker::generateCLI
virtual std::shared_ptr< helicsCLI11App > generateCLI() override
Definition: CoreBroker.cpp:1896
helics::CoreType
CoreType
Definition: CoreTypes.hpp:36
helics::MultiBroker::addRoute
virtual void addRoute(route_id rid, int interfaceId, const std::string &routeInfo) override
Definition: MultiBroker.cpp:277
helics::CoreType::INPROC
@ INPROC
core/broker using a stripped down in process core type
helics::NetworkBrokerData
Definition: NetworkBrokerData.hpp:36
helics::NetworkCommsInterface::getAddress
std::string getAddress() const
Definition: NetworkCommsInterface.cpp:228
helics::ActionMessage
Definition: ActionMessage.hpp:30
helics::MultiBroker::~MultiBroker
~MultiBroker()
Definition: MultiBroker.cpp:70
helics::BrokerBase::haltOperations
std::atomic< bool > haltOperations
flag indicating that no further message should be processed
Definition: BrokerBase.hpp:77
helics::CoreType::DEFAULT
@ DEFAULT
ZMQ if available or UDP.
helics::helicsCLI11App
Definition: helicsCLI11.hpp:41
helics::BrokerFactory::addAssociatedBrokerType
void addAssociatedBrokerType(const std::string &name, CoreType type)
Definition: BrokerFactory.cpp:309
helics::CoreBroker::getIdentifier
virtual const std::string & getIdentifier() const override final
Definition: CoreBroker.hpp:288
helics::MultiBroker::comms
std::vector< std::unique_ptr< CommsInterface > > comms
the actual comms objects
Definition: MultiBroker.hpp:29
helics::InterfaceTypes::TCP
@ TCP
using tcp ports for communication
helics::BrokerBase::addActionMessage
void addActionMessage(const ActionMessage &m)
Definition: BrokerBase.cpp:572
helics::BrokerBase::getLoggingCallback
std::function< void(int, const std::string &, const std::string &)> getLoggingCallback() const
Definition: BrokerBase.cpp:84
helics::route_id
Definition: GlobalFederateId.hpp:168
helics::MultiBroker::transmit
virtual void transmit(route_id rid, const ActionMessage &cmd) override
Definition: MultiBroker.cpp:235
helics::CoreType::INTERPROCESS
@ INTERPROCESS
use when all federates are on the same machine
helics::NetworkBrokerData::brokerAddress
std::string brokerAddress
the address or domain name of the broker
Definition: NetworkBrokerData.hpp:47
helics::BrokerBase::networkTimeout
Time networkTimeout
timeout to establish a socket connection before giving up
Definition: BrokerBase.hpp:57
helics::MultiBroker::disconnectionStage
std::atomic< int > disconnectionStage
the stage of disconnection
Definition: MultiBroker.hpp:28
helics::CoreType::TEST
@ TEST
use the Test core if all federates are in the same process
helics::BrokerBase::loggerFunction
std::function< void(int, std::string_view, std::string_view)> loggerFunction
Definition: BrokerBase.hpp:75
helics::CoreBroker::setAsRoot
virtual void setAsRoot() override final
Definition: CoreBroker.cpp:1905
helics::NetworkBrokerData::commandLineParser
std::shared_ptr< helicsCLI11App > commandLineParser(const std::string &localAddress, bool enableConfig=true)
Definition: NetworkBrokerData.cpp:28
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::MultiBroker::removeRoute
virtual void removeRoute(route_id rid) override
Definition: MultiBroker.cpp:292
HELICS_LOG_LEVEL_ERROR
@ HELICS_LOG_LEVEL_ERROR
Definition: helics_enums.h:181
helics::NetworkCommsInterface
Definition: NetworkCommsInterface.hpp:18
helics::CoreBroker
Definition: CoreBroker.hpp:95
helics::MultiBroker::masterComm
std::unique_ptr< CommsInterface > masterComm
the primary comms object or the one that links with the master
Definition: MultiBroker.hpp:31
helics::MultiBroker::brokerInitialized
std::atomic< bool > brokerInitialized
atomic protecting local initialization
Definition: MultiBroker.hpp:35
helics::CoreType::IPC
@ IPC
same as INTERPROCESS
helics::NetworkBrokerData::brokerName
std::string brokerName
the identifier for the broker
Definition: NetworkBrokerData.hpp:46
helics::MultiBroker::configFile
std::string configFile
the name of the config file in use
Definition: MultiBroker.hpp:34
helics::MultiBroker::MultiBroker
MultiBroker() noexcept
Definition: MultiBroker.cpp:68
helics::isValidIndex
bool isValidIndex(sizeType testSize, const SizedDataType &vec)
Definition: core-data.hpp:132