OSSIA
Open Scenario System for Interactive Application
mqtt_protocol.hpp
1 #pragma once
2 #include <ossia/network/base/protocol.hpp>
3 #include <ossia/network/context.hpp>
4 
5 #include <boost/asio/cancellation_signal.hpp>
6 #include <boost/unordered/concurrent_flat_map.hpp>
7 namespace ossia::net
8 {
9 struct mqtt5_configuration
10 {
11  std::string host;
12  int port;
13 };
14 
15 struct mqtt5_client;
16 
17 class OSSIA_EXPORT mqtt5_protocol
19  , public Nano::Observer
20 {
21 public:
22  explicit mqtt5_protocol(
23  ossia::net::network_context_ptr, const mqtt5_configuration& conf);
24  ~mqtt5_protocol();
25 
26  bool pull(parameter_base&) override;
27  bool push(const parameter_base&, const value& v) override;
28  bool push_raw(const full_parameter_data&) override;
29  bool observe(parameter_base&, bool) override;
30  bool update(node_base& node_base) override;
31  void set_device(device_base& dev) override;
32 
33 private:
34  void on_new_param(const parameter_base& param);
35  void on_removed_param(const parameter_base& param);
36  void on_subscribe(const parameter_base& param);
37  void on_unsubscribe(const parameter_base& param);
38 
39  ossia::net::network_context_ptr m_context;
40  mqtt5_configuration m_conf{};
41  std::unique_ptr<mqtt5_client> m_client;
42 
43  struct subscribe_state;
44  boost::unordered::concurrent_flat_map<
45  const ossia::net::parameter_base*, subscribe_state>
46  m_subscriptions;
47 };
48 }
The parameter_base class.
Definition: ossia/network/base/parameter.hpp:48
The protocol_base class.
Definition: protocol.hpp:40