AdcGenericNetServer, AdcDeviceNetServer, AdcDeviceNetServer::Session and

AdcDeviceNetServerASIO classes now have template parameter 'IdentT' (type
of identificator)
This commit is contained in:
Timur A. Fatkhullin
2024-11-05 18:02:28 +03:00
parent 1794de6acd
commit 4a20eecc02
6 changed files with 251 additions and 181 deletions

View File

@@ -105,10 +105,12 @@ namespace adc
{
class AdcDeviceNetServer : public AdcGenericNetServer
template <typename IdentT = std::string>
class AdcDeviceNetServer : public AdcGenericNetServer<IdentT>
{
public:
using typename AdcGenericNetServer<IdentT>::server_ident_t;
// type for serialized data (attr/command ID, attr values etc...)
typedef std::vector<char> serialized_t;
@@ -206,29 +208,23 @@ protected:
std::unordered_map<void*, DeviceWrapper> _devices;
public:
template <interfaces::adc_netservice_c NetServiceT>
class Session : public std::enable_shared_from_this<Session<NetServiceT>>
template <interfaces::adc_netservice_c NetServiceT, traits::adc_hashable_c SessionIdentT = std::string>
class Session : public std::enable_shared_from_this<Session<NetServiceT, SessionIdentT>>
{
public:
typedef std::string netsession_ident_t;
typedef SessionIdentT netsession_ident_t;
typedef NetServiceT netservice_t;
typedef AdcDeviceNetServer* netsession_ctx_t;
typedef std::vector<char> message_t;
template <traits::adc_input_char_range R>
Session(R&& id, netservice_t srv, AdcDeviceNetServer* srv_ptr)
: _ident(),
Session(const netsession_ident_t& id, netservice_t srv, AdcDeviceNetServer* srv_ptr)
: _ident(id),
_netService(std::move(srv)),
_serverPtr(srv_ptr),
_bindDevice(srv_ptr->_devices.size() ? &srv_ptr->_devices.begin()->second
: &AdcDeviceNetServer::nullDevice)
{
if constexpr (std::is_array_v<std::remove_cvref_t<R>>) {
_ident = id;
} else {
_ident = netsession_ident_t(id.begin(), id.end());
}
}
netsession_ident_t ident() const
@@ -368,10 +364,7 @@ public:
// using AdcGenericNetServer::AdcGenericNetServer;
template <traits::adc_input_char_range R>
AdcDeviceNetServer(const R& id) : AdcGenericNetServer(id), _devices()
{
}
AdcDeviceNetServer(const server_ident_t& id) : AdcGenericNetServer<IdentT>(id), _devices() {}
virtual ~AdcDeviceNetServer() = default;