helics  3.0.1
CommsBroker.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 "helics/core/ActionMessage.hpp"
10 
11 #include <atomic>
12 #include <memory>
13 #include <string>
14 
15 namespace helics {
16 class CommsInterface;
17 
20 template<class COMMS, class BrokerT>
21 class CommsBroker: public BrokerT {
22  protected:
23  std::atomic<int> disconnectionStage{0};
24  std::unique_ptr<COMMS> comms;
25  std::atomic<bool> brokerInitialized{false};
26  public:
28  CommsBroker() noexcept;
30  explicit CommsBroker(bool arg) noexcept;
32  explicit CommsBroker(const std::string& obj_name);
34  ~CommsBroker();
35 
36  private:
37  virtual void brokerDisconnect() override;
38  virtual bool tryReconnect() override;
40  void commDisconnect();
42  void loadComms();
43 
44  public:
45  virtual void transmit(route_id rid, const ActionMessage& cmd) override;
46  virtual void transmit(route_id rid, ActionMessage&& cmd) override;
47 
48  virtual void addRoute(route_id rid, int interfaceId, const std::string& routeInfo) override;
49 
50  virtual void removeRoute(route_id rid) override;
52  COMMS* getCommsObjectPointer();
53 };
54 } // namespace helics
helics::CommsBroker::disconnectionStage
std::atomic< int > disconnectionStage
the stage of disconnection
Definition: CommsBroker.hpp:23
helics::ActionMessage
Definition: ActionMessage.hpp:30
helics::CommsBroker
Definition: CommsBroker.hpp:21
helics::CommsBroker::comms
std::unique_ptr< COMMS > comms
the actual comms object
Definition: CommsBroker.hpp:24
helics::route_id
Definition: GlobalFederateId.hpp:168
helics::CommsBroker::brokerInitialized
std::atomic< bool > brokerInitialized
atomic protecting local initialization
Definition: CommsBroker.hpp:25
helics::CommsBroker::getCommsObjectPointer
COMMS * getCommsObjectPointer()
Definition: CommsBroker_impl.hpp:123
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::CommsBroker::CommsBroker
CommsBroker() noexcept
Definition: CommsBroker_impl.hpp:21