OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
qml_udp_outbound_socket.hpp
1#pragma once
2#include <ossia/network/context.hpp>
3#include <ossia/network/sockets/udp_socket.hpp>
4
5#include <ossia-qt/protocols/utils.hpp>
6
7#include <QJSValue>
8#include <QObject>
9#include <QQmlEngine>
10
11#include <nano_observer.hpp>
12
13#include <verdigris>
14
15namespace ossia::qt
16{
17
18class qml_udp_outbound_socket
19 : public QObject
20 , public Nano::Observer
21 , public protocols_sender
22{
23 W_OBJECT(qml_udp_outbound_socket)
24public:
25 qml_udp_outbound_socket(
26 const ossia::net::outbound_socket_configuration& conf,
27 boost::asio::io_context& ctx)
28 : socket{conf, ctx}
29 {
30 }
31 inline boost::asio::io_context& context() noexcept { return socket.m_context; }
32
33 void open()
34 {
35 if(onClose.isCallable())
36 socket.on_close.connect<&qml_udp_outbound_socket::on_close>(*this);
37
38 socket.connect();
39
40 if(onOpen.isCallable())
41 onOpen.call({qjsEngine(this)->newQObject(this)});
42 }
43
44 void close() { socket.close(); }
45 W_SLOT(close)
46
47 void on_close()
48 {
49 run_on_qt_thread({ onClose.call(); });
50 }
51
52 void write(QByteArray buffer)
53 {
54 run_on_asio_thread({ socket.write(buffer.data(), buffer.size()); });
55 }
56 W_SLOT(write)
57
58 void osc(QByteArray address, QJSValueList values) { this->send_osc(address, values); }
59 W_SLOT(osc)
60
61 QJSValue onOpen;
62 QJSValue onClose;
63 QJSValue onError;
64
65 ossia::net::udp_send_socket socket;
66};
67}
Definition qml_device.cpp:43