Back to C++20 standard!
Logging is worked (AdcOstreamLogger and AdcSPDLOGLogger classes)
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
#include <thread>
|
||||
|
||||
#include "adc_device_netmsg.h"
|
||||
#include "adc_netserver.h"
|
||||
@@ -105,11 +106,12 @@ namespace adc
|
||||
{
|
||||
|
||||
|
||||
template <typename IdentT = std::string>
|
||||
class AdcDeviceNetServer : public AdcGenericNetServer<IdentT>
|
||||
template <typename IdentT = std::string, interfaces::adc_logger_c LoggerT = utils::AdcOstreamLogger<char>>
|
||||
class AdcDeviceNetServer : public AdcGenericNetServer<IdentT, LoggerT>
|
||||
{
|
||||
public:
|
||||
using typename AdcGenericNetServer<IdentT>::server_ident_t;
|
||||
using typename AdcGenericNetServer<IdentT, LoggerT>::server_ident_t;
|
||||
using typename AdcGenericNetServer<IdentT, LoggerT>::logger_t;
|
||||
|
||||
// type for serialized data (attr/command ID, attr values etc...)
|
||||
typedef std::vector<char> serialized_t;
|
||||
@@ -232,13 +234,15 @@ public:
|
||||
_recvTimeout(ctx.recvTimeout),
|
||||
_sendTimeout(ctx.sendTimeout)
|
||||
{
|
||||
_serverPtr->logInfo("Create client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||
_serverPtr->logInfo("Create client session with ID = {} (addr = {}, thread = {})", _ident, (void*)this,
|
||||
utils::AdcThisThreadId());
|
||||
}
|
||||
|
||||
|
||||
virtual ~Session()
|
||||
{
|
||||
_serverPtr->logInfo("Delete client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||
_serverPtr->logInfo("Delete client session with ID = {} (addr = {}, thread = {})", _ident, (void*)this,
|
||||
utils::AdcThisThreadId());
|
||||
}
|
||||
|
||||
netsession_ident_t ident() const
|
||||
@@ -248,18 +252,22 @@ public:
|
||||
|
||||
void start()
|
||||
{
|
||||
_serverPtr->logInfo("Start client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||
static bool first_time = true;
|
||||
if (first_time) {
|
||||
_serverPtr->logInfo("Start client session with ID = {} (addr = {}, thread = {})", _ident, (void*)this,
|
||||
utils::AdcThisThreadId());
|
||||
first_time = false;
|
||||
}
|
||||
|
||||
|
||||
auto self(this->shared_from_this());
|
||||
|
||||
_netService.asyncReceive(
|
||||
[self, this](netservice_t::async_callback_err_t ec, message_t msg) {
|
||||
if (ec) {
|
||||
// std::string str("asyncReceive operation completed with error: ");
|
||||
// netservice_t::formatError(ec, str);
|
||||
// _serverPtr->errorMessage(str);
|
||||
_serverPtr->logError("asyncReceive operation completed with error: {}",
|
||||
netservice_t::formattableError(ec));
|
||||
_serverPtr->logError(
|
||||
"asyncReceive operation completed with error: {} (session addr = {}, thread = {})",
|
||||
netservice_t::formattableError(ec), (void*)this, utils::AdcThisThreadId());
|
||||
stop();
|
||||
} else {
|
||||
auto msg_sptr = std::make_shared<message_t>(std::move(msg));
|
||||
@@ -272,11 +280,9 @@ public:
|
||||
*msg_sptr,
|
||||
[self, msg_sptr, this](netservice_t::async_callback_err_t ec) {
|
||||
if (ec) {
|
||||
// std::string str("asyncSend operation completed with error: ");
|
||||
// netservice_t::formatError(ec, str);
|
||||
// _serverPtr->errorMessage(str);
|
||||
_serverPtr->logError("asyncSend operation completed with error: {}",
|
||||
netservice_t::formattableError(ec));
|
||||
_serverPtr->logError(
|
||||
"asyncSend operation completed with error: {} (session addr = {}, thread = {})",
|
||||
netservice_t::formattableError(ec), (void*)this, utils::AdcThisThreadId());
|
||||
stop();
|
||||
} else {
|
||||
start();
|
||||
@@ -290,7 +296,8 @@ public:
|
||||
|
||||
void stop()
|
||||
{
|
||||
_serverPtr->logInfo("Stop client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||
_serverPtr->logInfo("Stop client session with ID = {} (addr = {}, thread = {})", _ident, (void*)this,
|
||||
utils::AdcThisThreadId());
|
||||
|
||||
_netService.close();
|
||||
}
|
||||
@@ -391,8 +398,8 @@ public:
|
||||
};
|
||||
|
||||
|
||||
// using AdcGenericNetServer::AdcGenericNetServer;
|
||||
AdcDeviceNetServer(const server_ident_t& id) : AdcGenericNetServer<IdentT>(id), _devices() {}
|
||||
using AdcGenericNetServer<IdentT, LoggerT>::AdcGenericNetServer;
|
||||
// AdcDeviceNetServer(const server_ident_t& id) : AdcGenericNetServer<IdentT>(id), _devices() {}
|
||||
|
||||
virtual ~AdcDeviceNetServer() = default;
|
||||
|
||||
@@ -406,6 +413,18 @@ public:
|
||||
CmdIdDeserialT&& cmd_id_deser_func = {}) // deserializer of command ID
|
||||
{
|
||||
auto id = std::forward<IdSerialT>(id_ser_func)(dev_ptr->ident());
|
||||
|
||||
if constexpr (traits::formattable<serialized_t>) {
|
||||
this->logInfo("Add ADC device with ID: {} (addr = {}, thread = {})", id, (void*)dev_ptr,
|
||||
utils::AdcThisThreadId());
|
||||
} else {
|
||||
std::string s;
|
||||
std::ranges::copy(id, std::back_inserter(s));
|
||||
|
||||
this->logInfo("Add ADC device with ID: {} (addr = {}, thread = {})", s, (void*)dev_ptr,
|
||||
utils::AdcThisThreadId());
|
||||
}
|
||||
|
||||
_devices.try_emplace(dev_ptr, dev_ptr, id, std::forward<AttrIdDeserialT>(attr_id_deser_func),
|
||||
std::forward<CmdIdDeserialT>(cmd_id_deser_func));
|
||||
|
||||
@@ -415,7 +434,25 @@ public:
|
||||
template <interfaces::adc_device_c DeviceT>
|
||||
AdcDeviceNetServer& delDevice(DeviceT* dev_ptr)
|
||||
{
|
||||
_devices.erase(dev_ptr);
|
||||
auto it = _devices.find(dev_ptr);
|
||||
if (it == _devices.end()) {
|
||||
this->logError("Invalid ADC device pointer ({})! It seems the device was not added!", (void*)dev_ptr);
|
||||
return *this;
|
||||
}
|
||||
|
||||
if constexpr (traits::formattable<serialized_t>) {
|
||||
this->logInfo("Delete ADC device with ID: {} (addr = {}, thread = {})", it->ident(), (void*)dev_ptr,
|
||||
utils::AdcThisThreadId());
|
||||
} else {
|
||||
std::string s;
|
||||
std::ranges::copy(it->ident(), std::back_inserter(s));
|
||||
|
||||
this->logInfo("Delete ADC device with ID: {} (addr = {}, thread = {})", s, (void*)dev_ptr,
|
||||
utils::AdcThisThreadId());
|
||||
}
|
||||
|
||||
_devices.erase(it);
|
||||
// _devices.erase(dev_ptr);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user