This commit is contained in:
Timur A. Fatkhullin
2024-10-18 23:56:23 +03:00
parent 60fa49bc29
commit 0b3e80261b
2 changed files with 109 additions and 14 deletions

View File

@@ -176,6 +176,15 @@ protected:
public:
typedef std::string server_ident_t;
template <traits::adc_input_char_range R>
AdcGenericNetServer(R&& id) : _serverIdent()
{
if constexpr (std::is_array_v<std::remove_cvref_t<R>>) {
_serverIdent = id;
} else {
_serverIdent = server_ident_t{id.begin(), id.end()};
}
}
virtual ~AdcGenericNetServer() = default;
@@ -192,7 +201,7 @@ public:
const typename SessionT::netsession_ctx_t& sess_ctx,
AcceptorCtorArgTs&&... ctor_args)
{
if (!_isListening<SessionT>[this]) {
if (!_isListening<SessionT>[this][id]) {
auto acceptor = std::make_shared<typename SessionT::netservice_t::acceptor_t>(
std::forward<AcceptorCtorArgTs>(ctor_args)...);
@@ -259,29 +268,33 @@ protected:
};
template <typename SocketT>
template <interfaces::adc_netservice_c NetServiceT>
class AdcAbstractNetServer
{
public:
struct ServerControls {
std::function<void(SocketT*)> onOpen;
std::function<void(SocketT*, std::error_code)> onClose;
std::function<void(SocketT*, std::span<const char>)> onData;
std::function<void(SocketT*, std::error_code)> onError;
struct ServerEvents {
std::function<void(NetServiceT*)> onOpen;
std::function<void(NetServiceT*, std::error_code)> onClose;
std::function<void(NetServiceT*, std::span<const char>)> onData;
std::function<void(NetServiceT*, std::error_code)> onError;
};
AdcAbstractNetServer(ServerControls&& ctls) : _serverControls(std::move(ctls)) {}
AdcAbstractNetServer(ServerEvents&& events) : _serverEvents(std::move(events)) {}
template <typename EnptT>
void listen(const EnptT& endpoint)
template <typename... AcceptorCtorArgTs>
void listen(const typename NetServiceT::endpoint_t& endpoint, AcceptorCtorArgTs&&... ctor_args)
{
auto acceptor =
std::make_shared<typename NetServiceT::acceptor_t>(endpoint, std::forward<AcceptorCtorArgTs>(ctor_args)...);
}
void stop() {}
protected:
ServerControls _serverControls;
ServerEvents _serverEvents;
typename NetServiceT::acceptor_t _acceptor;
};