3 #include <ossia/detail/json_fwd.hpp>
4 #include <ossia/detail/lockfree_queue.hpp>
5 #include <ossia/network/base/listening.hpp>
6 #include <ossia/network/base/protocol.hpp>
7 #include <ossia/network/oscquery/host_info.hpp>
20 class ReceivedMessage;
28 class websocket_client;
29 struct parameter_data;
30 struct network_context;
31 using network_context_ptr = std::shared_ptr<network_context>;
33 namespace oscquery_asio
35 struct osc_outbound_visitor;
36 struct http_async_client_context;
37 struct http_responder;
39 class oscquery_mirror_asio_protocol;
40 struct oscquery_shared_async_state
42 oscquery_mirror_asio_protocol&
self;
48 struct osc_sender_impl;
49 struct osc_receiver_impl;
52 oscquery_mirror_asio_protocol(
53 ossia::net::network_context_ptr ctx, std::string host,
54 uint16_t local_osc_port = 0);
55 ~oscquery_mirror_asio_protocol()
override;
57 bool pull(net::parameter_base&)
override;
58 std::future<void> pull_async(net::parameter_base&)
override;
59 void request(net::parameter_base&)
override;
60 bool push(
const net::parameter_base&,
const ossia::value& v)
override;
62 bool push_bundle(
const std::vector<const ossia::net::parameter_base*>&)
override;
63 bool push_raw_bundle(
const std::vector<ossia::net::full_parameter_data>&)
override;
64 bool observe(net::parameter_base&,
bool)
override;
65 bool observe_quietly(net::parameter_base&,
bool)
override;
66 bool update(net::node_base& b)
override;
67 bool echo_incoming_message(
68 const ossia::net::message_origin_identifier&
id,
71 std::future<void> update_async(net::node_base& b)
override;
74 void set_device(net::device_base& dev)
override;
77 bool ws_connected() const noexcept {
return m_hasWS; }
78 bool osc_connected() const noexcept {
return bool(m_oscSender); }
79 osc_sender_impl& osc_sender() const noexcept {
return *m_oscSender; }
93 void request_remove_node(net::node_base&);
99 void request_rename_node(net::node_base& node,
const std::string& new_name);
106 void set_zombie_on_remove(
bool zombie_on_remove)
108 m_zombie_on_remove = zombie_on_remove;
115 bool get_zombie_on_remove() const noexcept {
return m_zombie_on_remove; }
119 bool connected() const noexcept
override {
return m_hasWS; }
120 void connect()
override;
123 friend struct http_async_answer;
124 friend struct http_async_value_answer;
125 using connection_handler = std::weak_ptr<void>;
126 void on_ws_disconnected() { m_hasWS =
false; }
131 void start_websockets();
134 void cleanup_connections();
137 bool on_text_ws_message(connection_handler hdl,
const std::string& message);
138 bool on_binary_ws_message(connection_handler hdl,
const std::string& message);
139 bool on_value_http_message(
const std::string& address,
const std::string& message);
140 void on_osc_message(
const oscpack::ReceivedMessage& m);
141 void process_raw_osc_data(
const char* data, std::size_t sz);
144 void http_send_message(
const std::string& str);
145 void http_send_message(
const rapidjson::StringBuffer& str);
147 void ws_send_message(
const std::string& str);
148 void ws_send_message(
const rapidjson::StringBuffer& str);
151 bool query_connected();
156 ossia::net::network_context_ptr m_ctx;
158 std::unique_ptr<osc_sender_impl> m_oscSender;
159 std::unique_ptr<osc_receiver_impl> m_oscServer;
161 std::unique_ptr<ossia::net::websocket_client> m_websocketClient;
162 std::shared_ptr<oscquery_shared_async_state> m_async_state;
163 std::atomic_bool m_hasWS{};
166 net::listened_parameters m_listening;
170 std::promise<void> m_namespacePromise;
172 std::string m_queryHost;
173 std::string m_queryPort;
174 std::string m_httpHost;
177 std::unique_ptr<http_async_client_context> m_http;
180 ossia::net::message_origin_identifier m_id;
182 bool m_zombie_on_remove{
true};
188 } m_protocol_to_use{any_protocol};
Root of a device tree.
Definition: ossia/network/base/device.hpp:58
The node_base class.
Definition: network/base/node.hpp:48
The parameter_base class.
Definition: ossia/network/base/parameter.hpp:48
The protocol_base class.
Definition: protocol.hpp:40
Low-level Websocket client.
Definition: websocket_client.hpp:18
The value class.
Definition: value.hpp:173
Full information about a parameter.
Definition: parameter_data.hpp:61
The data that can be found inside a parameter.
Definition: parameter_data.hpp:21
Represents the capabilities of an OSCQuery server.
Definition: host_info.hpp:12