AdcGenericNetServer, AdcDeviceNetServer, AdcDeviceNetServer::Session and
AdcDeviceNetServerASIO classes now have template parameter 'IdentT' (type of identificator)
This commit is contained in:
@@ -224,20 +224,13 @@ protected:
|
||||
|
||||
/* very generic network server */
|
||||
|
||||
template <typename IdentT = std::string>
|
||||
class AdcGenericNetServer : public AdcPosixGenericDaemon, public AdcNetSessionManager
|
||||
{
|
||||
public:
|
||||
typedef std::string server_ident_t;
|
||||
typedef IdentT server_ident_t;
|
||||
|
||||
template <traits::adc_input_char_range R>
|
||||
AdcGenericNetServer(const 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()};
|
||||
}
|
||||
}
|
||||
AdcGenericNetServer(const server_ident_t& id) : _serverIdent(id) {}
|
||||
|
||||
|
||||
AdcGenericNetServer(const AdcGenericNetServer&) = delete;
|
||||
@@ -289,6 +282,7 @@ public:
|
||||
// It must be assumed that this is asynchronous operation!!!
|
||||
template <interfaces::adc_netsession_c SessionT, typename... AcceptorCtorArgTs>
|
||||
void start(SessionT::netsession_ident_t id, SessionT::netsession_ctx_t sess_ctx, AcceptorCtorArgTs&&... ctor_args)
|
||||
requires traits::adc_hashable_c<typename SessionT::netsession_ident_t>
|
||||
{
|
||||
if (!_isListening<SessionT>[this][id]) {
|
||||
auto acceptor = std::make_shared<typename SessionT::netservice_t::acceptor_t>(
|
||||
@@ -340,7 +334,7 @@ protected:
|
||||
// inline static std::unordered_map<const AdcGenericNetServer*, bool> _isListening{};
|
||||
template <interfaces::adc_netsession_c SessionT>
|
||||
inline static std::unordered_map<const AdcGenericNetServer*,
|
||||
std::map<const typename SessionT::netsession_ident_t, bool>>
|
||||
std::unordered_map<typename SessionT::netsession_ident_t, bool>>
|
||||
_isListening{};
|
||||
|
||||
std::vector<std::function<void(const AdcGenericNetServer*)>> _stopListenFunc;
|
||||
@@ -367,34 +361,16 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
template <interfaces::adc_netservice_c NetServiceT>
|
||||
class AdcAbstractNetServer
|
||||
namespace interfaces
|
||||
{
|
||||
public:
|
||||
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(ServerEvents&& events) : _serverEvents(std::move(events)) {}
|
||||
|
||||
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:
|
||||
ServerEvents _serverEvents;
|
||||
|
||||
typename NetServiceT::acceptor_t _acceptor;
|
||||
template <typename T>
|
||||
concept adc_generic_netserver_c = requires {
|
||||
typename T::server_ident_t;
|
||||
requires std::derived_from<T, adc::AdcGenericNetServer<typename T::server_ident_t>>;
|
||||
};
|
||||
|
||||
} // namespace interfaces
|
||||
|
||||
|
||||
} // namespace adc
|
||||
|
||||
Reference in New Issue
Block a user