#pragma once /* ABSTRACT DEVICE COMPONENTS LIBRARY ASIO-library implementation of network server session */ #ifdef USE_ASIO_LIBRARY #include "adc_netservice_asio.h" // #ifdef USE_SPDLOG_LIBRARY // #include "adc_netserver_spdlog.h" // #endif // USE_SPDLOG_LIBRARY namespace adc::impl { template class AdcNetServerSessionASIO { public: typedef std::string_view session_ident_t; typedef NetServiceT netservice_t; typedef ContextT context_t; typedef std::chrono::duration timeout_t; static constexpr timeout_t defaultSendTimeout = std::chrono::milliseconds(5000); static constexpr timeout_t defaultRecvTimeout = std::chrono::milliseconds(5000); template AdcNetServerSessionASIO(netservice_t::socket_t&& sock, const R& sess_ident, ContextT&& context = nullptr) : _socket(std::move(sock)), _netService(_socket), _sessionIdent(sess_ident.begin(), sess_ident.end()), _context(context), _sendTimeout(defaultSendTimeout), _recvTimeout(defaultRecvTimeout) { } virtual ~AdcNetServerSessionASIO() { _netService.close(); } template AdcNetServerSessionASIO& setDefaultTimeouts(const TimeoutT& send_timeout = defaultSendTimeout, const TimeoutT& recv_timeout = defaultRecvTimeout) { _sendTimeout = send_timeout; _recvTimeout = recv_timeout; return *this; } session_ident_t sessionIdent() const { return {_sessionIdent.begin(), _sessionIdent.end()}; } virtual void start() {} virtual void stop() {} protected: netservice_t::socket_t _socket; netservice_t _netService; std::string _sessionIdent; ContextT _context; timeout_t _sendTimeout, _recvTimeout; }; } // namespace adc::impl #endif // USE_ASIO_LIBRARY