Skip to content

File plugin.hpp

File List > network_latency > tx > 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 "pong_rx/plugin.hpp"

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

namespace ILLIXR {

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

    void start() override;
    void stop() override;

protected:
    skip_option _p_should_skip() override;

    void _p_one_iteration() override;

private:
    static uint64_t get_timestamp_ns();

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

    // Network writer for sending pings (transmitted over network by tcp_network_backend)
    switchboard::network_writer<data_format::latency_ping> ping_writer_;

    std::shared_ptr<network_latency_pong_rx> pong_rx_;

    // Configuration
    std::chrono::milliseconds ping_interval_;

    // State
    std::atomic<uint64_t>                 sequence_number_;
    std::chrono::steady_clock::time_point last_ping_time_;
};

} // namespace ILLIXR