...
This commit is contained in:
parent
6acc1f94ba
commit
9769c24005
@ -23,7 +23,7 @@ protected:
|
|||||||
std::string _currentPattern;
|
std::string _currentPattern;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
constexpr static std::string_view LOGGER_DEFAULT_FORMAT = "[%Y-%m-%d %T.%e] [%l]: [%v]";
|
constexpr static std::string_view LOGGER_DEFAULT_FORMAT = "[%Y-%m-%d %T.%e] [%l]: %v";
|
||||||
|
|
||||||
template <traits::adc_input_char_range R, typename... BaseCtorArgTs>
|
template <traits::adc_input_char_range R, typename... BaseCtorArgTs>
|
||||||
AdcSpdlogGenericDecorator(const R& pattern, std::shared_ptr<spdlog::logger> logger, BaseCtorArgTs&&... ctor_args)
|
AdcSpdlogGenericDecorator(const R& pattern, std::shared_ptr<spdlog::logger> logger, BaseCtorArgTs&&... ctor_args)
|
||||||
@ -161,7 +161,7 @@ protected:
|
|||||||
using base_t = AdcSpdlogGenericDecorator<BaseT>;
|
using base_t = AdcSpdlogGenericDecorator<BaseT>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
constexpr static std::array<std::string_view, 2> LOGGER_DEFAULT_FORMAT{"[%Y-%m-%d %T.%e] [%l]: ", "[%v]"};
|
constexpr static std::array<std::string_view, 2> LOGGER_DEFAULT_FORMAT{"[%Y-%m-%d %T.%e] [%l] ", "%v"};
|
||||||
|
|
||||||
template <traits::adc_input_char_range R, traits::adc_range_of_input_char_range IR>
|
template <traits::adc_input_char_range R, traits::adc_range_of_input_char_range IR>
|
||||||
static std::string constructPattern(const R& mark, size_t after_idx = 0, const IR& format = LOGGER_DEFAULT_FORMAT)
|
static std::string constructPattern(const R& mark, size_t after_idx = 0, const IR& format = LOGGER_DEFAULT_FORMAT)
|
||||||
@ -169,7 +169,9 @@ public:
|
|||||||
std::string pattern;
|
std::string pattern;
|
||||||
|
|
||||||
std::ranges::copy(format | std::views::take(after_idx + 1) | std::views::join, std::back_inserter(pattern));
|
std::ranges::copy(format | std::views::take(after_idx + 1) | std::views::join, std::back_inserter(pattern));
|
||||||
|
std::ranges::copy(std::string_view("["), std::back_inserter(pattern));
|
||||||
std::ranges::copy(mark, std::back_inserter(pattern));
|
std::ranges::copy(mark, std::back_inserter(pattern));
|
||||||
|
std::ranges::copy(std::string_view("]: "), std::back_inserter(pattern));
|
||||||
std::ranges::copy(format | std::views::drop(after_idx + 1) | std::views::join, std::back_inserter(pattern));
|
std::ranges::copy(format | std::views::drop(after_idx + 1) | std::views::join, std::back_inserter(pattern));
|
||||||
|
|
||||||
return pattern;
|
return pattern;
|
||||||
|
|||||||
@ -49,6 +49,12 @@ public:
|
|||||||
return std::ranges::size(_byteSequence) == 0;
|
return std::ranges::size(_byteSequence) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t size() const
|
||||||
|
{
|
||||||
|
return std::ranges::size(_byteSequence);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
requires(traits::adc_char_view<T> && std::ranges::contiguous_range<ByteSeqT>) ||
|
requires(traits::adc_char_view<T> && std::ranges::contiguous_range<ByteSeqT>) ||
|
||||||
traits::adc_output_char_range<T>
|
traits::adc_output_char_range<T>
|
||||||
|
|||||||
@ -232,6 +232,13 @@ public:
|
|||||||
_recvTimeout(ctx.recvTimeout),
|
_recvTimeout(ctx.recvTimeout),
|
||||||
_sendTimeout(ctx.sendTimeout)
|
_sendTimeout(ctx.sendTimeout)
|
||||||
{
|
{
|
||||||
|
_serverPtr->logInfo("Create client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual ~Session()
|
||||||
|
{
|
||||||
|
_serverPtr->logInfo("Delete client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||||
}
|
}
|
||||||
|
|
||||||
netsession_ident_t ident() const
|
netsession_ident_t ident() const
|
||||||
@ -241,6 +248,8 @@ public:
|
|||||||
|
|
||||||
void start()
|
void start()
|
||||||
{
|
{
|
||||||
|
_serverPtr->logInfo("Start client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||||
|
|
||||||
auto self(this->shared_from_this());
|
auto self(this->shared_from_this());
|
||||||
|
|
||||||
_netService.asyncReceive(
|
_netService.asyncReceive(
|
||||||
@ -281,6 +290,8 @@ public:
|
|||||||
|
|
||||||
void stop()
|
void stop()
|
||||||
{
|
{
|
||||||
|
_serverPtr->logInfo("Stop client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||||
|
|
||||||
_netService.close();
|
_netService.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -223,4 +223,18 @@ concept adc_netsession_proto_c =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* LOGGER */
|
||||||
|
|
||||||
|
template <typename LOGGERT>
|
||||||
|
concept adc_logger_c = requires(LOGGERT log) {
|
||||||
|
// logging method must accept at least the single argument - formating string
|
||||||
|
log.logInfo(std::declval<std::string_view>());
|
||||||
|
log.logInfo(std::declval<std::string_view>(), std::declval<std::string>());
|
||||||
|
|
||||||
|
log.logWarn(std::declval<std::string_view>(), std::declval<std::string>());
|
||||||
|
log.logError(std::declval<std::string_view>(), std::declval<std::string>());
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace adc::interfaces
|
} // namespace adc::interfaces
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class AdcTrivialLogger
|
|||||||
public:
|
public:
|
||||||
virtual ~AdcTrivialLogger() = default;
|
virtual ~AdcTrivialLogger() = default;
|
||||||
|
|
||||||
protected:
|
// protected:
|
||||||
static constexpr std::string_view errorLevelMark{"error"};
|
static constexpr std::string_view errorLevelMark{"error"};
|
||||||
static constexpr std::string_view warnLevelMark{"warning"};
|
static constexpr std::string_view warnLevelMark{"warning"};
|
||||||
static constexpr std::string_view infoLevelMark{"info"};
|
static constexpr std::string_view infoLevelMark{"info"};
|
||||||
@ -109,6 +109,8 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static_assert(interfaces::adc_logger_c<AdcTrivialLogger>, "!!!!!!!!!!!");
|
||||||
|
|
||||||
// A generic implementation of POSIX OS daemon
|
// A generic implementation of POSIX OS daemon
|
||||||
class AdcPosixGenericDaemon
|
class AdcPosixGenericDaemon
|
||||||
{
|
{
|
||||||
|
|||||||
@ -21,12 +21,11 @@ ABSTRACT DEVICE COMPONENTS LIBRARY
|
|||||||
namespace adc::spdlog
|
namespace adc::spdlog
|
||||||
{
|
{
|
||||||
|
|
||||||
template <interfaces::adc_generic_netserver_c ServerT>
|
template <traits::formattable IdentT = std::string>
|
||||||
requires traits::formattable<typename ServerT::server_ident_t>
|
class AdcGenericNetServerSpdlog : public AdcSpdlogGenericMarkDecorator<AdcGenericNetServer<IdentT>>
|
||||||
class AdcGenericNetServerSpdlog : public AdcSpdlogGenericMarkDecorator<ServerT>
|
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
using base_t = AdcSpdlogGenericMarkDecorator<ServerT>;
|
using base_t = AdcSpdlogGenericMarkDecorator<AdcGenericNetServer<IdentT>>;
|
||||||
|
|
||||||
std::string _serverID;
|
std::string _serverID;
|
||||||
|
|
||||||
@ -36,7 +35,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using typename ServerT::server_ident_t;
|
using typename base_t::server_ident_t;
|
||||||
|
|
||||||
using base_t::logCritical;
|
using base_t::logCritical;
|
||||||
using base_t::logDebug;
|
using base_t::logDebug;
|
||||||
@ -53,7 +52,7 @@ public:
|
|||||||
{
|
{
|
||||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||||
|
|
||||||
fmt::format_to(std::back_inserter(_serverID), "{}", ServerT::_serverIdent);
|
fmt::format_to(std::back_inserter(_serverID), "{}", base_t::_serverIdent);
|
||||||
|
|
||||||
this->setPattern(base_t::constructPattern(_serverID));
|
this->setPattern(base_t::constructPattern(_serverID));
|
||||||
|
|
||||||
@ -75,7 +74,7 @@ public:
|
|||||||
{
|
{
|
||||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||||
|
|
||||||
return ServerT::ident();
|
return base_t::ident();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <interfaces::adc_netsession_c SessionT, typename... AcceptorCtorArgTs>
|
template <interfaces::adc_netsession_c SessionT, typename... AcceptorCtorArgTs>
|
||||||
@ -89,7 +88,7 @@ public:
|
|||||||
logInfo("Start accepting client connections for server session ID hash: {} ...", std::hash<SessionT>(id));
|
logInfo("Start accepting client connections for server session ID hash: {} ...", std::hash<SessionT>(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerT::start(std::move(id), std::move(sess_ctx), std::forward<AcceptorCtorArgTs>(ctor_args)...);
|
base_t::start(std::move(id), std::move(sess_ctx), std::forward<AcceptorCtorArgTs>(ctor_args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void stop()
|
virtual void stop()
|
||||||
@ -98,7 +97,7 @@ public:
|
|||||||
|
|
||||||
logInfo("Stopping network server ...");
|
logInfo("Stopping network server ...");
|
||||||
|
|
||||||
ServerT::stop();
|
base_t::stop();
|
||||||
|
|
||||||
logInfo("Network server is stopped");
|
logInfo("Network server is stopped");
|
||||||
}
|
}
|
||||||
@ -109,18 +108,17 @@ public:
|
|||||||
{
|
{
|
||||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||||
|
|
||||||
ServerT::_isListening(id);
|
base_t::_isListening(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void daemonize()
|
void daemonize()
|
||||||
requires std::derived_from<AdcPosixGenericDaemon, ServerT>
|
|
||||||
{
|
{
|
||||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||||
|
|
||||||
logInfo("Daemonizing server ...");
|
logInfo("Daemonizing server ...");
|
||||||
|
|
||||||
ServerT::daemonize();
|
base_t::daemonize();
|
||||||
|
|
||||||
logInfo("The server was daemonized");
|
logInfo("The server was daemonized");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user