Program Listing for File netio3_receiver.cpp
↰ Return to documentation for file (network/netio3_receiver.cpp)
#include "network/netio3_receiver.hpp"
#include "felix/felix_fid.h"
#include "netio3-backend/Netio3Backend.hpp"
#include "fromhost_message.hpp"
#include "netio3_utility.hpp"
Netio3Receiver::Netio3Receiver(const std::string &ip, uint32_t port, NetworkMode network_mode,
unsigned int netio_pn, unsigned int netio_ps, bool buffered, Netio3EventLoop& evloop) :
m_ip{ip},
m_port{static_cast<uint16_t>(port)},
m_num_buffers{netio_pn},
m_buffer_size{netio_ps},
m_evloop(&evloop),
m_receiver{netio3::NetioReceiverConfig{
network::utility::get_network_type(network_mode),
network::utility::get_network_mode(network_mode),
netio3::ThreadSafetyModel::UNSAFE},
m_evloop->get_evloop()},
m_buffered{buffered},
m_tcp{network_mode == NetworkMode::tcp}
{
init_listen_socket();
}
void Netio3Receiver::init_listen_socket()
{
m_receiver.set_on_connection_established_cb([this] (const netio3::EndPointAddress& address) { m_on_conn_open(std::format("{}:{}", address.address(), address.port())); });
m_receiver.set_on_connection_closed_cb([this] (const netio3::EndPointAddress& address) { m_on_conn_close(std::format("{}:{}", address.address(), address.port())); });
m_receiver.set_on_data_cb([this] (std::uint64_t fid, std::span<const std::uint8_t> data, std::uint8_t) { m_on_msg( {{ .elink=get_elink(fid), .payload=data, .status = ToFlxMessage::Status::MessageOk }}); });
m_port = m_receiver.listen({m_ip, static_cast<unsigned short>(m_port)}, {.buf_size=m_buffer_size, .num_buf=m_num_buffers});
// LOG_INFO("Initialised netio3 listen_socket. Port %u PROVIDER: %s", m_port, m_socket.fi->fabric_attr->prov_name);
}