helics 3.7.0
Loading...
Searching...
No Matches
zmqBrokerServer.hpp
1/*
2Copyright (c) 2017-2026,
3Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Energy
4Innovation LLC. See the top-level NOTICE for additional details. All rights reserved.
5SPDX-License-Identifier: BSD-3-Clause
6*/
7
8#pragma once
9
10#include "TypedBrokerServer.hpp"
11
12#include <atomic>
13#include <memory>
14#include <mutex>
15#include <string>
16#include <thread>
17#include <utility>
18
19#ifdef HELICS_ENABLE_ZMQ_CORE
20namespace zmq {
21class socket_t;
22class message_t;
23class context_t;
24} // namespace zmq
25
26#endif
27
28namespace helics {
29class Broker;
30namespace apps {
31
34 public:
35 zmqBrokerServer() = default;
36 explicit zmqBrokerServer(std::string_view server_name): name_(server_name) {}
38 virtual void startServer(const nlohmann::json* val,
39 const std::shared_ptr<TypedBrokerServer>& ptr) override;
41 virtual void stopServer() override;
42
43 virtual void processArgs(std::string_view args) override;
44 void enableZmqServer(bool enabled) { zmq_enabled_ = enabled; }
45 void enableZmqSsServer(bool enabled) { zmqss_enabled_ = enabled; }
46
47 private:
48 struct zmqServerData {
49 portData ports;
50 };
51
52 void mainLoop();
53#ifdef HELICS_ENABLE_ZMQ_CORE
54 std::pair<std::unique_ptr<zmq::socket_t>, int> loadZMQsocket(zmq::context_t& ctx);
55 std::pair<std::unique_ptr<zmq::socket_t>, int> loadZMQSSsocket(zmq::context_t& ctx);
56
57 static zmqServerData generateServerData(int portNumber, int skip);
58
59 std::string generateResponseToMessage(zmq::message_t& msg, portData& pdata, CoreType ctype);
60#endif
61 std::thread mainLoopThread;
62 std::mutex threadGuard;
63 const nlohmann::json* config_{nullptr};
64 const std::string name_;
65 bool zmq_enabled_{false};
66 bool zmqss_enabled_{false};
67 std::atomic_bool exitAll{false};
68 int mZmqPort{0};
69 std::string mZmqInterface{"tcp://127.0.0.1"};
70 };
71} // namespace apps
72} // namespace helics
Definition TypedBrokerServer.hpp:24
Definition zmqBrokerServer.hpp:33
virtual void processArgs(std::string_view args) override
Definition zmqBrokerServer.cpp:31
virtual void startServer(const nlohmann::json *val, const std::shared_ptr< TypedBrokerServer > &ptr) override
Definition zmqBrokerServer.cpp:50
virtual void stopServer() override
Definition zmqBrokerServer.cpp:66
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14
CoreType
Definition CoreTypes.hpp:46