File plugin.hpp
File List > plugins > tcp_network_backend > plugin.hpp
Go to the documentation of this file
#pragma once
// clang-format off
#include "illixr/network/tcpsocket.hpp"
// clang-format on
#include "illixr/network/network_backend.hpp"
#include "illixr/network/topic_config.hpp"
#include "illixr/plugin.hpp"
#include "illixr/switchboard.hpp"
#include
#include
namespace ILLIXR {
class MY_EXPORT_API tcp_network_backend
: public plugin
, public network::tcp_backend {
public:
explicit tcp_network_backend(const std::string& name_, phonebook* pb_);
~tcp_network_backend() override;
#ifdef __ANDROID__
void start() override;
#else
void start_client() override;
void start_server() override;
#endif
void read_loop(network::TCPSocket* socket);
void topic_create(std::string topic_name, network::topic_config& config) override;
bool is_topic_networked(std::string topic_name) override;
void topic_send(std::string topic_name, std::string&& message) override;
void topic_receive(const std::string& topic_name, std::vector<char>& message);
void stop() override;
network::topic_config::TransportMethod transport_method() const override {
return network::topic_config::TransportMethod::TCP;
}
bool client;
private:
void send_to_peer(const std::string& topic_name, std::string&& message);
std::shared_ptr<switchboard> switchboard_;
std::atomic<bool> running_ = true;
#ifndef __ANDROID__
std::atomic<bool> ready_ = false;
#endif
network::TCPSocket* peer_socket_ = nullptr;
// Owned network loop and stream-wide packet serialization.
// stop() interrupts socket I/O and joins this worker before peer/plugin destruction.
// Detaching would let read_loop keep using freed plugin state.
std::thread io_thread_;
std::mutex stop_mutex_;
std::string server_ip_;
int server_port_{9001};
std::string client_ip_;
int client_port_{0};
int is_client_{0};
std::vector<std::string> networked_topics_;
std::unordered_map<std::string, network::topic_config> networked_topics_configs_;
#ifdef __ANDROID__
network::TCPSocket server_socket_;
#endif
// To delimit the topic_name and the serialization method when creating a topic
std::string delimiter_ = "|";
// Hold across the entire packet, including partial socket writes.
std::mutex send_mutex_;
};
} // namespace ILLIXR