|
SWC-DB
v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
|
Go to the documentation of this file.
7 #ifndef swcdb_core_comm_ConnHandler_h
8 #define swcdb_core_comm_ConnHandler_h
22 namespace SWC {
namespace Comm {
26 using SocketSSL = asio::ssl::stream<asio::ip::tcp::socket>;
29 class ConnHandler :
public std::enable_shared_from_this<ConnHandler> {
41 :
cbuf(std::move(a_cbuf)),
hdlr(std::move(a_hdlr)) {
46 :
cbuf(std::move(other.cbuf)),
hdlr(std::move(other.hdlr)) {
54 cbuf = std::move(other.cbuf);
55 hdlr = std::move(other.hdlr);
66 asio::high_resolution_timer*
timer;
73 :
hdlr(std::move(a_hdlr)),
timer(
nullptr) {
78 :
hdlr(std::move(other.hdlr)),
timer(other.timer) {
79 other.timer =
nullptr;
89 hdlr = std::move(other.hdlr);
91 other.timer =
nullptr;
126 return !
app_ctx->cfg_encoder ||
128 ? Core::Encoder::Type::PLAIN
132 virtual bool is_secure() const noexcept {
return false; };
147 bool send_error(
int error, const std::
string& msg,
148 const
Event::Ptr& ev) noexcept;
157 void print(std::ostream& out) const;
171 return shared_from_this();
178 virtual
void read(uint8_t** bufp,
size_t* remainp, asio::error_code& ec) = 0;
218 void read() noexcept;
242 std::unordered_map<uint32_t,
256 typedef std::shared_ptr<ConnHandlerPlain>
Ptr;
264 bool is_open() const noexcept override;
270 void read(uint8_t** bufp,
size_t* remainp, asio::error_code& ec) override;
299 typedef std::shared_ptr<ConnHandlerSSL>
Ptr;
306 bool is_secure() const noexcept
override {
return true; }
310 bool is_open() const noexcept override;
313 void set_verify(
T&& hdlr) noexcept {
314 m_sock.set_verify_callback(std::move(hdlr));
318 void handshake(SocketSSL::handshake_type typ,
T&& hdlr) noexcept {
326 m_sock.async_handshake(typ, std::move(hdlr));
329 void handshake(SocketSSL::handshake_type typ,
330 asio::error_code& ec) noexcept;
336 void read(uint8_t** bufp,
size_t* remainp, asio::error_code& ec) override;
339 Core::Vector<asio::const_buffer>&&
buffers, Sender_noAck&& hdlr)
342 Core::Vector<asio::const_buffer>&&
buffers, Sender_Ack&& hdlr)
346 Receiver_HeaderPrefix&& hdlr) noexcept override;
348 Receiver_Header&& hdlr) noexcept override;
350 Receiver_Buffer&& hdlr) noexcept override;
367 #ifdef SWC_IMPL_SOURCE
371 #endif // swcdb_core_comm_ConnHandler_h
SWC_CAN_INLINE size_t endpoint_remote_hash() const noexcept
virtual void do_async_read(uint8_t *data, uint32_t sz, Receiver_HeaderPrefix &&hdlr) noexcept=0
DispatchHandler::Ptr hdlr
SWC_CAN_INLINE Pending(Pending &&other) noexcept
virtual SocketLayer * socket_layer() noexcept=0
Outgoing & operator=(const Outgoing &)=delete
bool send_response(Buffers::Ptr cbuf, DispatchHandler::Ptr hdlr=nullptr) noexcept
Outgoing(const Outgoing &)=delete
std::shared_ptr< Buffers > Ptr
SWC_CAN_INLINE Outgoing & operator=(Outgoing &&other) noexcept
std::shared_ptr< ConnHandlerSSL > Ptr
virtual bool is_open() const noexcept=0
asio::ip::tcp::endpoint EndPoint
const AppContext::Ptr app_ctx
void handshake(SocketSSL::handshake_type typ, T &&hdlr) noexcept
asio::high_resolution_timer * timer
void received(Event::Ptr &&ev) noexcept
asio::ip::tcp::socket SocketPlain
SWC_CAN_INLINE Pending(DispatchHandler::Ptr &&a_hdlr) noexcept
asio::ip::tcp::socket::lowest_layer_type SocketLayer
void do_async_read(uint8_t *data, uint32_t sz, Receiver_HeaderPrefix &&hdlr) noexcept override
void write_or_queue(Outgoing &&outgoing)
Pending & operator=(const Pending &)=delete
virtual ~ConnHandlerPlain() noexcept
virtual void do_close() noexcept=0
Pending(const Pending &)=delete
void print(std::ostream &out) const
std::shared_ptr< AppContext > Ptr
ConnHandler(const ConnHandler &)=delete
void recv_buffers(Event::Ptr &&ev)
ConnHandler & operator=(const ConnHandler &)=delete
SWC_CAN_INLINE bool due()
bool is_open() const noexcept override
virtual ~ConnHandler() noexcept
void run_pending(Event::Ptr &&ev)
uint8_t _buf_header[Header::MAX_LENGTH]
SWC_CAN_INLINE Pending() noexcept
bool send_error(int error, const std::string &msg, const Event::Ptr &ev) noexcept
The SWC-DB C++ namespace 'SWC'.
ConnHandler & operator=(ConnHandler &&)=delete
bool response_ok(const Event::Ptr &ev) noexcept
SWC_CAN_INLINE Outgoing(Outgoing &&other) noexcept
virtual void do_async_write(Core::Vector< asio::const_buffer > &&buffers, Sender_noAck &&hdlr) noexcept=0
SWC_CAN_INLINE Core::Encoder::Type get_encoder() const noexcept
SWC_CAN_INLINE Pending & operator=(Pending &&other) noexcept
Core::AtomicBool connected
SocketLayer *SWC_CONST_FUNC socket_layer() noexcept override
asio::ssl::stream< asio::ip::tcp::socket > SocketSSL
SWC_CAN_INLINE ConnHandlerPtr ptr() noexcept
std::shared_ptr< ConnHandlerPlain > Ptr
std::shared_ptr< ConnHandler > ConnHandlerPtr
SWC_CAN_INLINE size_t operator()(const uint32_t id) const
void write(Outgoing &outgoing)
SWC_CAN_INLINE void do_close_recv() noexcept
void do_async_write(Core::Vector< asio::const_buffer > &&buffers, Sender_noAck &&hdlr) noexcept override
std::unordered_map< uint32_t, Pending, PendingHash > m_pending
DispatchHandler::Ptr hdlr
bool send_request(Buffers::Ptr cbuf, DispatchHandler::Ptr hdlr)
SWC_CAN_INLINE Outgoing() noexcept
size_t pending_read() noexcept
void do_close() noexcept override
std::shared_ptr< Event > Ptr
size_t SWC_PURE_FUNC endpoint_hash(const EndPoint &endpoint) noexcept
void disconnected() noexcept
SWC_CAN_INLINE Outgoing(Buffers::Ptr &&a_cbuf, DispatchHandler::Ptr &&a_hdlr) noexcept
ConnHandler(ConnHandler &&)=delete
SWC_CAN_INLINE ~Pending() noexcept
std::shared_ptr< DispatchHandler > Ptr
SWC_CAN_INLINE size_t endpoint_local_hash() const noexcept
static Ptr make(AppContext::Ptr &app_ctx, SocketPlain &socket)
virtual bool is_secure() const noexcept
SWC_CAN_INLINE ~Outgoing() noexcept
void do_close_run() noexcept
Core::QueueSafeStated< Outgoing > m_outgoing