This commit is contained in:
2024-06-18 17:30:11 +03:00
parent ebe93f1d74
commit 9f915d932f
3 changed files with 98 additions and 21 deletions

View File

@@ -21,7 +21,7 @@ namespace adc::impl
{
template <traits::adc_netservice_asio_c NetServiceT, typename ContextT = std::nullptr_t>
class AdcNetServerSessionASIO
class AdcNetServerSessionASIO : std::enable_shared_from_this<AdcNetServerSessionASIO<NetServiceT, ContextT>>
{
public:
typedef std::string_view session_ident_t;
@@ -32,24 +32,43 @@ public:
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);
static constexpr timeout_t defaultSendTimeout = std::chrono::milliseconds(5000); // 5 seconds
static constexpr timeout_t defaultRecvTimeout =
std::chrono::hours(12); // actualy, it is a time to wait something from client
template <traits::adc_input_char_range R>
AdcNetServerSessionASIO(netservice_t::socket_t&& sock, const R& sess_ident, ContextT&& context = nullptr)
: _socket(std::move(sock)),
AdcNetServerSessionASIO(std::shared_ptr<netservice_t>& net_service,
const R& sess_ident,
ContextT&& context = nullptr)
: _socket(net_service.get_executor()),
// _socket(std::move(sock)),
_netService(_socket),
_sessionIdent(sess_ident.begin(), sess_ident.end()),
_context(context),
_sendTimeout(defaultSendTimeout),
_recvTimeout(defaultRecvTimeout)
{
// generic implementation
_stopFunc = [net_service = net_service]() { net_service->close(); };
_startFunc = [this]() { acceptMessage(); };
_acceptMessageFunc = [net_service = net_service, this]() {
net_service->asynReceive<NetMessageT>(
_recvTimeout, [self = this->shared_from_this(), this](std::error_code ec, const auto& mess) {
if (ec) {
stop();
} else {
acceptMessage();
}
});
};
}
virtual ~AdcNetServerSessionASIO()
{
_netService.close();
stop();
}
template <traits::adc_time_duration_c TimeoutT>
@@ -68,10 +87,16 @@ public:
}
virtual void start() {}
virtual void start()
{
_startFunc();
}
virtual void stop() {}
virtual void stop()
{
_stopFunc();
}
protected:
netservice_t::socket_t _socket;
@@ -81,6 +106,13 @@ protected:
ContextT _context;
timeout_t _sendTimeout, _recvTimeout;
std::function<void()> _startFunc, _stopFunc, _acceptMessageFunc;
virtual void acceptMessage()
{
_acceptMessageFunc();
}
};
} // namespace adc::impl