2 #include <ossia/network/sockets/configuration.hpp>
3 #include <ossia/network/sockets/websocket_client.hpp>
4 #include <ossia/network/sockets/websocket_server.hpp>
6 #include <boost/asio/write.hpp>
17 struct websocket_simple_client : websocket_client
19 websocket_simple_client(
20 const ws_client_configuration& conf, boost::asio::io_context& ctx)
21 :
ossia::net::websocket_client{}
24 m_client->init_asio(&ctx);
30 void receive(F onMessage)
33 std::weak_ptr<client_t> weak_client = m_client;
34 m_client->set_message_handler(
35 [handler = std::move(onMessage),
36 weak_client](connection_handler hdl, client_t::message_ptr msg) {
37 if(!weak_client.lock())
39 const auto& data = msg->get_raw_payload();
40 handler((
const unsigned char*)data.data(), data.size());
43 websocket_client::connect(m_host);
46 void write(
const char* data, std::size_t sz)
48 send_binary_message(std::string_view{data, sz});
55 m_client->get_io_service().post([
this] { websocket_client::stop(); });
64 websocket_simple_server(
65 const ws_server_configuration& conf, boost::asio::io_context& ctx)
66 :
ossia::net::websocket_server{ctx}
70 [
this](connection_handler hdl) { m_listeners.push_back(hdl.lock()); });
71 set_close_handler([
this](connection_handler hdl) {
72 ossia::remove_erase(m_listeners, hdl.lock());
77 void listen(F onMessage)
79 m_server.set_message_handler([handler = std::move(onMessage)](
80 connection_handler hdl, server_t::message_ptr msg) {
81 const auto& data = msg->get_raw_payload();
82 handler((
const unsigned char*)data.data(), data.size());
85 websocket_server::listen(m_port);
88 void write(
const char* data, std::size_t sz)
90 std::string_view dat{data, sz};
91 for(
auto& listener : m_listeners)
92 send_binary_message(listener, dat);
97 m_server.get_io_service().post([
this] { stop(); });
100 std::vector<std::shared_ptr<void>> m_listeners;
Low-level websocket & http server for oscquery.
Definition: websocket_server.hpp:20