...
This commit is contained in:
89
net/adc_netsession_asio.h
Normal file
89
net/adc_netsession_asio.h
Normal file
@@ -0,0 +1,89 @@
|
||||
#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 <traits::adc_netservice_asio_c NetServiceT, typename ContextT = std::nullptr_t>
|
||||
class AdcNetServerSessionASIO
|
||||
{
|
||||
public:
|
||||
typedef std::string_view session_ident_t;
|
||||
|
||||
typedef NetServiceT netservice_t;
|
||||
|
||||
typedef ContextT context_t;
|
||||
|
||||
typedef std::chrono::duration<double, std::milli> timeout_t;
|
||||
|
||||
static constexpr timeout_t defaultSendTimeout = std::chrono::milliseconds(5000);
|
||||
static constexpr timeout_t defaultRecvTimeout = std::chrono::milliseconds(5000);
|
||||
|
||||
template <traits::adc_input_char_range R>
|
||||
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 <traits::adc_time_duration_c TimeoutT>
|
||||
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
|
||||
Reference in New Issue
Block a user