// Use of this source code is governed by a BSD 3-Clause License // that can be found in the LICENSE file. // Author: caozhiyi (caozhiyi5@gmail.com) #ifndef CPPNET_SOCKET_READ_WRITE_SOCKET #define CPPNET_SOCKET_READ_WRITE_SOCKET #include #include "socket_interface.h" #include "include/cppnet_socket.h" namespace cppnet { class Event; class BufferQueue; class AlloterWrap; class BlockMemoryPool; class RWSocket: public Socket, public CNSocket, public std::enable_shared_from_this { public: RWSocket(); RWSocket(std::shared_ptr alloter); RWSocket(uint64_t sock, std::shared_ptr alloter); virtual ~RWSocket(); virtual uint64_t GetSocket() { return _sock; } virtual void SetListenPort(uint16_t port) { _listen_port = port; } virtual uint16_t GetListenPort() { return _listen_port; } virtual bool GetAddress(std::string& ip, uint16_t& port); virtual void Close(); virtual void Read() {} virtual bool Write(const char* src, uint32_t len) { return false; } virtual void Connect(const std::string& ip, uint16_t port) {} virtual void Disconnect() {} virtual void AddTimer(uint32_t interval, bool always = false); virtual void StopTimer(); virtual void OnTimer(); virtual void OnRead(Event* event, uint32_t len = 0) {} virtual void OnWrite(Event* event, uint32_t len = 0) {} virtual void OnConnect(Event* event, uint16_t err); virtual void OnDisConnect(Event* event, uint16_t err) {} virtual void SetContext(void* context) { _context = context; } virtual void* GetContext() { return _context; } virtual void SetShutdown() { _shutdown = true; } virtual bool IsShutdown() { return _shutdown; } virtual std::shared_ptr GetReadBuffer() { return nullptr; } std::shared_ptr GetAlloter() { return _alloter; } protected: void* _context; uint32_t _timer_id; uint16_t _listen_port; std::atomic_bool _shutdown; std::shared_ptr _alloter; std::shared_ptr _block_pool; }; std::shared_ptr MakeRWSocket(); std::shared_ptr MakeRWSocket(std::shared_ptr alloter); std::shared_ptr MakeRWSocket(uint64_t sock, std::shared_ptr alloter); } #endif