2#include <ossia/network/context.hpp> 
    3#include <ossia/network/sockets/udp_socket.hpp> 
    4#include <ossia/network/sockets/websocket_client.hpp> 
    6#include <ossia-qt/protocols/utils.hpp> 
   12#include <nano_observer.hpp> 
   18class qml_websocket_outbound_socket
 
   20    , 
public Nano::Observer
 
   21    , 
public protocols_sender
 
   23  W_OBJECT(qml_websocket_outbound_socket)
 
   25  qml_websocket_outbound_socket(
 
   26      const ossia::net::outbound_socket_configuration& conf,
 
   27      boost::asio::io_context& ctx)
 
   28      : m_url{
"ws://" + conf.host + 
":" + std::to_string(conf.port)} 
 
   29      , m_client{ctx, [this](auto&&... args) { on_message(args...); }}
 
   31    if(onOpen.isCallable())
 
   32      m_client.on_open.connect<&qml_websocket_outbound_socket::on_open>(
this);
 
   33    if(onClose.isCallable())
 
   34      m_client.on_close.connect<&qml_websocket_outbound_socket::on_close>(
this);
 
   35    if(onError.isCallable())
 
   36      m_client.on_fail.connect<&qml_websocket_outbound_socket::on_fail>(
this);
 
   38  inline boost::asio::io_context& context() noexcept { 
return m_client.context(); }
 
   40  void open() { m_client.connect(m_url); }
 
   42  void on_message(
auto hdl, 
auto opcode, 
const std::string& msg)
 
   44    if(opcode == websocketpp::frame::opcode::text && onTextMessage.isCallable())
 
   46      onTextMessage.call({QString::fromStdString(msg)});
 
   48    else if(opcode == websocketpp::frame::opcode::binary && onBinaryMessage.isCallable())
 
   51          {qjsEngine(
this)->toScriptValue(QByteArray(msg.data(), msg.size()))});
 
   57    run_on_qt_thread({ onOpen.call({qjsEngine(
this)->newQObject(
this)}); });
 
   61    run_on_qt_thread({ onError.call(); });
 
   65    run_on_qt_thread({ onClose.call(); });
 
   68  void write(QString message)
 
   70    run_on_asio_thread({ m_client.send_message(message.toStdString()); });
 
   74  void writeBinary(QByteArray buffer)
 
   77      m_client.send_binary_message(std::string_view(buffer.data(), buffer.size()));
 
   85    if(onClose.isCallable())
 
   97  QJSValue onTextMessage;
 
   98  QJSValue onBinaryMessage;
 
Low-level Websocket client.
Definition websocket_client.hpp:18
Definition qml_device.cpp:43