#ifndef __TCP_CLIENT_H__ #define __TCP_CLIENT_H__ /* ******************************************************************************* * INCLUDE ******************************************************************************* */ #include #include #include #include /* ******************************************************************************* * CLASS DECLARE ******************************************************************************* */ namespace Network { class TCPClient: public Poco::Task { public: enum class State { DISCONNECTED, CONNECT_TIMEOUT, CONNECT_REFUSED, CONNECTING, CONNECTED, }; using StateChangedCallback = std::function; using DataIncomingCallback = std::function; public: TCPClient(std::string host, int port, Poco::Timespan timeout, uint32_t sz = 10240); ~TCPClient(); int send(const uint8_t* data, uint32_t len); void start(); void stop(); void setStateChangedCallback(const StateChangedCallback& callback); void setDataIncomingCallback(const DataIncomingCallback& callback); protected: bool connect(); void receive(const uint8_t* data, uint32_t len); virtual void runTask() override; void setState(State state, const std::string& desc); private: Poco::Thread _thread; Poco::Net::StreamSocket _socket; Poco::Net::SocketAddress _address; Poco::Timespan _timeout; uint32_t _bufsz; Poco::SharedPtr _pBuffer; StateChangedCallback _stateChanged; DataIncomingCallback _dataIncoming; }; } #endif