Skip to content

File plugin.hpp

File List > network_latency > rx > plugin.hpp

Go to the documentation of this file

#pragma once

#include "illixr/data_format/latency_data.hpp"
#include "illixr/data_format/serialization/latency.hpp"
#include "illixr/phonebook.hpp"
#include "illixr/switchboard.hpp"
#include "illixr/threadloop.hpp"

#include 
#include 
#include 
#include 
#include 
#include 

namespace ILLIXR {

class MY_EXPORT_API network_latency_rx : public threadloop {
public:
    [[maybe_unused]] network_latency_rx(const std::string& name, phonebook* pb);

    ~network_latency_rx() override;

protected:
    skip_option _p_should_skip() override;

    void _p_one_iteration() override;

private:
    void process_ping(const switchboard::ptr<const data_format::latency_ping>& ping);

    static uint64_t get_timestamp_ns();

    // Switchboard
    const std::shared_ptr<switchboard> switchboard_;

    // Buffered reader for receiving pings (tcp_network_backend populates this topic)
    switchboard::buffered_reader<data_format::latency_ping> ping_reader_;

    // Network writer for sending pongs (transmitted over network by tcp_network_backend)
    switchboard::network_writer<data_format::latency_pong> pong_writer_;

    // State
    std::atomic<uint64_t>   pings_received_;
    std::optional<uint64_t> last_received_seq_; 
};

} // namespace ILLIXR