#pragma once #include #include #include #include namespace EQ { namespace Net { class TCPConnection { public: TCPConnection(uv_tcp_t *socket); ~TCPConnection(); static void Connect(const std::string &addr, int port, bool ipv6, std::function)> cb); void Start(); void OnRead(std::function cb); void OnDisconnect(std::function cb); void Disconnect(); void Read(const char *data, size_t count); void Write(const char *data, size_t count); bool IsConnected() const; std::string LocalIP() const; int LocalPort() const; std::string RemoteIP() const; int RemotePort() const; private: TCPConnection(); uv_tcp_t *m_socket; std::function m_on_read_cb; std::function m_on_disconnect_cb; }; } }