OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
ossia-qt/protocols/utils.hpp
1#pragma once
2#include <ossia/network/osc/detail/osc_value_write_visitor.hpp>
3#include <ossia/network/sockets/writers.hpp>
4
5#include <ossia-qt/invoke.hpp>
6#include <ossia-qt/js_utilities.hpp>
7
8#include <boost/asio/io_context.hpp>
9
10#include <QPointer>
11
12#define run_on_qt_thread(...) \
13 ossia::qt::run_async(this, [=, this] { __VA_ARGS__; }, Qt::AutoConnection);
14#define run_on_asio_thread(...) \
15 boost::asio::dispatch(this->context(), [=, self = QPointer{this}] { __VA_ARGS__ });
16
17namespace ossia::qt
18{
19struct protocols_sender
20{
21 void send_osc(this auto&& self, QByteArray address, QJSValueList values)
22 {
23 using socket_type = std::remove_cvref_t<decltype(self.socket)>;
24 using writer_type = ossia::net::socket_writer<socket_type>;
25 using send_visitor = ossia::net::osc_value_send_visitor<
26 ossia::net::full_parameter_data, ossia::net::osc_1_0_policy, writer_type>;
27
29
30 switch(values.size())
31 {
32 case 0: {
33 ossia::value{ossia::impulse{}}.apply(
34 send_visitor{p, address.toStdString(), writer_type{self.socket}});
35 break;
36 }
37 case 1: {
38 auto v = ossia::qt::value_from_js(values[0]);
39 v.apply(send_visitor{p, address.toStdString(), writer_type{self.socket}});
40 break;
41 }
42 default: {
43 std::vector<ossia::value> vec;
44 vec.reserve(values.size());
45 for(const auto& v : values)
46 vec.push_back(ossia::qt::value_from_js(v));
47 ossia::value vvec(std::move(vec));
48 vvec.apply(send_visitor{p, address.toStdString(), writer_type{self.socket}});
49 }
50 }
51 }
52};
53}
The value class.
Definition value.hpp:173
Definition qml_device.cpp:43
Definition git_info.h:7
Full information about a parameter.
Definition parameter_data.hpp:61