2#include <ossia/network/base/protocol.hpp>
3#include <ossia/network/generic/wrapped_parameter.hpp>
5#include <ossia-qt/js_utilities.hpp>
16class QNetworkAccessManager;
22struct http_parameter_data_base
24 http_parameter_data_base() =
default;
25 http_parameter_data_base(
const http_parameter_data_base&) =
default;
26 http_parameter_data_base(http_parameter_data_base&&) =
default;
27 http_parameter_data_base& operator=(
const http_parameter_data_base&) =
default;
28 http_parameter_data_base& operator=(http_parameter_data_base&&) =
default;
29 http_parameter_data_base(
const QJSValue& val)
31 if(
auto r = val.property(
"request"); r.isString() || r.isCallable())
38 auto a = val.property(
"answer");
45 if(
auto data = val.property(
"requestData"); data.isString() || data.isCallable())
49 if(
auto post = val.property(
"method"); post.toString().toLower() ==
"post")
53 if(
auto r = val.property(
"onRead"); r.isCallable())
57 if(
auto r = val.property(
"onReadString"); r.isCallable())
63 bool requestIsValid() const noexcept
65 return !request.isUndefined() && !request.isNull();
71 QJSValue onReadString;
75struct http_parameter_data
77 ,
public http_parameter_data_base
79 using base_data_type = http_parameter_data_base;
80 http_parameter_data() =
default;
81 http_parameter_data(
const http_parameter_data&) =
default;
82 http_parameter_data(http_parameter_data&&) =
default;
83 http_parameter_data& operator=(
const http_parameter_data&) =
default;
84 http_parameter_data& operator=(http_parameter_data&&) =
default;
86 http_parameter_data(
const std::string& name)
87 : parameter_data{name}
91 http_parameter_data(
const QJSValue& val)
92 : parameter_data{ossia::qt::make_parameter_data(val)}
93 , http_parameter_data_base{val}
97 bool valid() const noexcept {
return requestIsValid() || type; }
100using http_parameter = wrapped_parameter<http_parameter_data>;
101using http_node = ossia::net::wrapped_node<http_parameter_data, http_parameter>;
102class OSSIA_EXPORT http_protocol final
104 ,
public ossia::net::protocol_base
106 W_OBJECT(http_protocol)
109 explicit http_protocol(QByteArray code);
111 http_protocol(
const http_protocol&) =
delete;
112 http_protocol(http_protocol&&) =
delete;
113 http_protocol& operator=(
const http_protocol&) =
delete;
114 http_protocol& operator=(http_protocol&&) =
delete;
116 ~http_protocol()
override;
118 bool update(ossia::net::node_base& node_base)
override;
120 bool pull(ossia::net::parameter_base& parameter_base)
override;
123 push(
const ossia::net::parameter_base& parameter_base,
const ossia::value& v)
override;
124 bool push_raw(
const ossia::net::full_parameter_data& parameter_base)
override;
126 bool observe(ossia::net::parameter_base& parameter_base,
bool enable)
override;
128 void set_device(ossia::net::device_base& dev)
override;
130 static http_parameter_data read_data(
const QJSValue& js) {
return js; }
133 void sig_push(http_parameter* arg_1,
const ossia::value& v)
134 E_SIGNAL(OSSIA_EXPORT, sig_push, arg_1, v)
137 void slot_push(http_parameter*,
const ossia::value& v);
141 QUrl requestUrl(
const http_parameter* addr_p,
const ossia::value& v);
142 QByteArray requestData(
const http_parameter* addr_p,
const ossia::value& v);
143 void apply_reply(QJSValue);
145 QQmlEngine* m_engine{};
146 QQmlComponent* m_component{};
148 QNetworkAccessManager* m_access{};
151 ossia::net::device_base* m_device{};
152 ossia::hash_map<QNetworkReply*, http_parameter*> m_replies;
154using http_device = ossia::net::wrapped_device<http_node, http_protocol>;
155class OSSIA_EXPORT HTTP :
public QObject
160Q_DECLARE_METATYPE(ossia::net::http_parameter*)
161W_REGISTER_ARGTYPE(ossia::net::http_parameter*)
162W_REGISTER_ARGTYPE(
const ossia::net::http_parameter*)
The data that can be found inside a parameter.
Definition parameter_data.hpp:21