#pragma once #include "coroutine.hpp" #include "fd_event.hpp" #include "reactor.hpp" #include "tcp_buffer.hpp" namespace tinyrpc { class TcpServer; class AbstractTcpConnection { public: enum class State{ Disconnected, Connected }; // enum class Type{ // Server, // Client // }; public: AbstractTcpConnection(int fd, Reactor& reactor, State state = State::Connected); void clearClient(); void mainLoopFun(); State getState() {return m_state;} // bool getResPackageData(const std::string& msg_req, std::shared_ptr& pb_struct); //cli virtual ~AbstractTcpConnection(); protected: void input(); void output(); virtual void process() = 0; protected: FdEvent *m_fdEvent; Coroutine m_mainCoroutine; State m_state{State::Connected}; TcpBuffer m_writeBuffer{}; TcpBuffer m_readBuffer{}; Reactor& m_reactor; // TcpServer& m_server; // TcpClient& m_server; // std::unordered_map> m_respond_datas; // cli }; }