LCOV - code coverage report
Current view: top level - src - Receiver.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 36 36 100.0 %
Date: 2025-11-29 00:25:29 Functions: 3 3 100.0 %

          Line data    Source code
       1             : #include "felix-server/Receiver.hpp"
       2             : 
       3             : #include <algorithm>
       4             : 
       5             : #include <netio3-backend/Netio3Backend.hpp>
       6             : #include <netio3/NetioPublisher.hpp>
       7             : 
       8             : #include "felix-server/Exceptions.hpp"
       9             : #include "felix-server/Utility.hpp"
      10             : 
      11           8 : felix_server::Receiver::Receiver(Settings settings,
      12             :                                  std::shared_ptr<netio3::BaseEventLoop> evloop,
      13           8 :                                  std::span<const std::uint64_t> tags) :
      14          16 :   m_settings{std::move(settings)},
      15           8 :   m_bus_writer{
      16           8 :     m_settings.bus_path,
      17           8 :     m_settings.bus_group,
      18             :   },
      19           8 :   m_receiver{{
      20           8 :                .backend_type = m_settings.network_type,
      21           8 :                .backend_mode = utility::get_network_mode(m_settings.network_type),
      22             :              },
      23           8 :              std::move(evloop)}
      24             : {
      25           8 :   m_receiver.set_on_buffer_cb(m_settings.on_buffer);
      26           8 :   m_receiver.set_on_data_cb(m_settings.on_msg);
      27           8 :   m_port = m_receiver.listen(
      28             :     {
      29           8 :       m_settings.ip,
      30           8 :       m_settings.port,
      31             :     },
      32             :     {
      33           8 :       m_settings.buffer_size,
      34           8 :       m_settings.buffer_count,
      35             :     });
      36             :   try {
      37           7 :     declare(tags);
      38           2 :   } catch (const std::exception& e) {
      39           2 :     throw BusError(e);
      40           2 :   }
      41          14 : }
      42             : 
      43           7 : void felix_server::Receiver::declare(std::span<const std::uint64_t> tags)
      44             : {
      45           7 :   auto info = std::vector<felixbus::FelixBusInfo>{};
      46           7 :   info.reserve(tags.size());
      47           7 :   std::ranges::transform(tags, std::back_inserter(info), [this](const auto& tag) {
      48             :     return felixbus::FelixBusInfo{
      49             :       .fid = tag,
      50          13 :       .ip = m_settings.ip,
      51          13 :       .port = m_port,
      52          13 :       .unbuffered = not m_settings.buffered,
      53             :       .pubsub = false,
      54          13 :       .tcp = m_settings.network_type == netio3::NetworkType::ASYNCMSG,
      55             :       .stream = false,
      56          13 :       .netio_pages = m_settings.buffer_count,
      57          13 :       .netio_pagesize = m_settings.buffer_size,
      58          26 :     };
      59          39 :   });
      60           7 :   m_bus_writer.publish(info, m_settings.bus_filename);
      61           7 : }

Generated by: LCOV version 1.0