2 #include <ossia/detail/buffer_pool.hpp>
4 #include <ossia/network/base/parameter.hpp>
5 #include <ossia/network/base/parameter_data.hpp>
6 #include <ossia/network/common/network_logger.hpp>
7 #include <ossia/network/osc/detail/message_generator.hpp>
8 #include <ossia/network/osc/detail/osc_messages.hpp>
9 #include <ossia/network/value/format_value.hpp>
11 #include <oscpack/ip/UdpSocket.h>
12 #include <oscpack/osc/OscOutboundPacketStream.h>
13 #include <oscpack/osc/OscPrintReceivedElements.h>
25 template <
typename ValueWriter>
31 , m_socket{oscpack::IpEndpointName(ip.c_str(), port)}
36 template <
typename... Args>
39 send_base(address.get_node().osc_address(), std::forward<Args>(args)...);
41 template <
typename... Args>
44 send_base(address.address, std::forward<Args>(args)...);
47 template <
typename... Args>
48 void send(
const std::string& address, Args&&... args)
50 send_base(address, std::forward<Args>(args)...);
53 template <
typename... Args>
54 void send(std::string_view address, Args&&... args)
56 send_base(address, std::forward<Args>(args)...);
59 const std::string& ip()
const {
return m_ip; }
61 int port()
const {
return m_port; }
63 int localPort()
const {
return m_socket.LocalPort(); }
65 oscpack::UdpTransmitSocket& socket() {
return m_socket; }
68 void debug(
const oscpack::OutboundPacketStream& out)
70 std::string s(out.Data(), out.Data() + out.Size());
71 std::replace(s.begin(), s.end(),
'\0',
' ');
72 std::cerr << s <<
"\n";
75 template <
typename... Args>
76 void send_base(Args&&... args)
78 auto buf = m_pool.acquire();
79 while(buf.size() < ossia::net::max_osc_message_size)
83 oscpack::OutboundPacketStream p{buf.data(), buf.size()};
84 oscpack::osc_message_generator<ossia::net::osc_1_0_outbound_stream_visitor>
86 generate_message(std::forward<Args>(args)...);
94 buf.resize(n * 2 + 1);
98 m_pool.release(std::move(buf));
101 std::string format_string;
102 format_string.reserve(5 + 3 *
sizeof...(args));
103 format_string +=
"Out: ";
104 for(std::size_t i = 0; i <
sizeof...(args); i++)
105 format_string +=
"{} ";
110 void send_impl(
const oscpack::OutboundPacketStream& m)
114 m_socket.Send(m.Data(), m.Size());
122 oscpack::UdpTransmitSocket m_socket;
126 ossia::buffer_pool& m_pool = ossia::buffer_pool::instance();
The sender class.
Definition: sender.hpp:27
Stores custom loggers for the inbound and outbound network messages.
Definition: network_logger.hpp:19
std::shared_ptr< ossia::logger_type > outbound_logger
outbound_logger Set log function for messages going outside.
Definition: network_logger.hpp:40
The parameter_base class.
Definition: ossia/network/base/parameter.hpp:48
Full information about a parameter.
Definition: parameter_data.hpp:61