#pragma once #include "abstract_coder.hpp" #include "client_tcp_connect.hpp" #include "coroutine.hpp" #include "net_address.hpp" #include "reactor.hpp" #include "tinypb_data.hpp" #include namespace tinyrpc { class TcpClient { public: TcpClient(const NetAddress& peerAddr); AbstractCoder& getCoder() {return *m_coder;} const NetAddress& getLocalAddr() const {return m_local_addr;} const NetAddress& getPeerAddr() const {return m_peer_addr;} bool writeToSendBuffer(const AbstractData& data); int sendAndRecvData(const std::string& msg_req, std::shared_ptr& res); void addCoroutine(Coroutine& cor); bool connectToServer(); void start(); ~TcpClient(); private: int m_fd{-1}; NetAddress m_local_addr{}; NetAddress m_peer_addr{}; Reactor& m_reactor; std::unique_ptr m_connection; AbstractCoder* m_coder{}; }; }