2#include <ossia/network/osc/detail/osc_value_write_visitor.hpp> 
    3#include <ossia/network/osc/detail/osc_packet_processor.hpp> 
    4#include <ossia/network/sockets/writers.hpp> 
    6#include <ossia-qt/invoke.hpp> 
    7#include <ossia-qt/js_utilities.hpp> 
    9#include <boost/asio/io_context.hpp> 
   14#define run_on_qt_thread(...) \ 
   15  ossia::qt::run_async(this, [=, this] { __VA_ARGS__; }, Qt::AutoConnection); 
   16#define run_on_asio_thread(...) \ 
   17  boost::asio::dispatch(this->context(), [=, self = QPointer{this}] { __VA_ARGS__ }); 
   21struct protocols_sender
 
   23  void send_osc(
this auto&& self, QByteArray address, QJSValueList values)
 
   25    using socket_type = std::remove_cvref_t<
decltype(self.socket)>;
 
   26    using writer_type = ossia::net::socket_writer<socket_type>;
 
   27    using send_visitor = ossia::net::osc_value_send_visitor<
 
   36            send_visitor{p, address.toStdString(), writer_type{self.socket}});
 
   40        auto v = ossia::qt::value_from_js(values[0]);
 
   41        v.apply(send_visitor{p, address.toStdString(), writer_type{self.socket}});
 
   45        std::vector<ossia::value> vec;
 
   46        vec.reserve(values.size());
 
   47        for(
const auto& v : values)
 
   48          vec.push_back(
ossia::qt::value_from_js(v));
 
   50        vvec.apply(send_visitor{p, address.toStdString(), writer_type{self.socket}});
 
   56class qml_osc_processor : 
public QObject
 
   58  W_OBJECT(qml_osc_processor)
 
   60  explicit qml_osc_processor() { }
 
   64  void processMessage(
const QByteArray& bv)
 
   66    if(onOsc.isCallable())
 
   68      ossia::net::osc_packet_processor<
decltype(*this)> processor{*
this};
 
   69      processor(bv.data(), bv.size());
 
   72  W_SLOT(processMessage)
 
   74  void operator()(
const oscpack::ReceivedMessage& msg)
 
   76    QString address = QString::fromUtf8(msg.AddressPattern());
 
   79    auto* engine = qjsEngine(
this);
 
   83    for(
auto it = msg.ArgumentsBegin(); it != msg.ArgumentsEnd(); ++it)
 
   84      values.append(oscArgToQJSValue(*it, *engine));
 
   86    onOsc.call({engine->toScriptValue(address), engine->toScriptValue(values)});
 
   90  oscArgToQJSValue(
const oscpack::ReceivedMessageArgument& arg, QJSEngine& engine)
 
   94      case oscpack::INT32_TYPE_TAG:
 
   95        return QJSValue(arg.AsInt32Unchecked());
 
   96      case oscpack::INT64_TYPE_TAG:
 
   97        return QJSValue((
int)arg.AsInt64Unchecked());
 
   98      case oscpack::FLOAT_TYPE_TAG:
 
   99        return QJSValue(arg.AsFloatUnchecked());
 
  100      case oscpack::DOUBLE_TYPE_TAG:
 
  101        return QJSValue(arg.AsDoubleUnchecked());
 
  102      case oscpack::TIME_TAG_TYPE_TAG:
 
  103        return QJSValue((
int)arg.AsTimeTagUnchecked());
 
  104      case oscpack::CHAR_TYPE_TAG:
 
  105        return QJSValue(QString(QChar(arg.AsCharUnchecked())));
 
  106      case oscpack::TRUE_TYPE_TAG:
 
  107        return QJSValue(
true);
 
  108      case oscpack::FALSE_TYPE_TAG:
 
  109        return QJSValue(
false);
 
  110      case oscpack::STRING_TYPE_TAG:
 
  111        return QJSValue(QString::fromUtf8(arg.AsStringUnchecked()));
 
  112      case oscpack::SYMBOL_TYPE_TAG:
 
  113        return QJSValue(QString::fromUtf8(arg.AsSymbolUnchecked()));
 
  114      case oscpack::BLOB_TYPE_TAG: {
 
  116        oscpack::osc_bundle_element_size_t size{};
 
  117        arg.AsBlobUnchecked(data, size);
 
  118        QByteArray blob((
const char*)data, size);
 
  119        return engine.toScriptValue(blob);
 
  121      case oscpack::RGBA_COLOR_TYPE_TAG: {
 
  122        auto c = arg.AsRgbaColorUnchecked();
 
  123        auto array = engine.newArray(4);
 
  124        array.setProperty(0, uint8_t(c >> 24 & 0xFF));
 
  125        array.setProperty(1, uint8_t(c >> 16 & 0xFF));
 
  126        array.setProperty(2, uint8_t(c >> 8 & 0xFF));
 
  127        array.setProperty(3, uint8_t(c & 0xFF));
 
  131        return QJSValue(QJSValue::NullValue);
 
The value class.
Definition value.hpp:173
Definition qml_device.cpp:43
Full information about a parameter.
Definition parameter_data.hpp:61