...
This commit is contained in:
parent
6acc1f94ba
commit
9769c24005
@ -23,7 +23,7 @@ protected:
|
||||
std::string _currentPattern;
|
||||
|
||||
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>
|
||||
AdcSpdlogGenericDecorator(const R& pattern, std::shared_ptr<spdlog::logger> logger, BaseCtorArgTs&&... ctor_args)
|
||||
@ -161,7 +161,7 @@ protected:
|
||||
using base_t = AdcSpdlogGenericDecorator<BaseT>;
|
||||
|
||||
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>
|
||||
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::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(std::string_view("]: "), std::back_inserter(pattern));
|
||||
std::ranges::copy(format | std::views::drop(after_idx + 1) | std::views::join, std::back_inserter(pattern));
|
||||
|
||||
return pattern;
|
||||
|
||||
@ -49,6 +49,12 @@ public:
|
||||
return std::ranges::size(_byteSequence) == 0;
|
||||
}
|
||||
|
||||
|
||||
size_t size() const
|
||||
{
|
||||
return std::ranges::size(_byteSequence);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
requires(traits::adc_char_view<T> && std::ranges::contiguous_range<ByteSeqT>) ||
|
||||
traits::adc_output_char_range<T>
|
||||
|
||||
@ -232,6 +232,13 @@ public:
|
||||
_recvTimeout(ctx.recvTimeout),
|
||||
_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
|
||||
@ -241,6 +248,8 @@ public:
|
||||
|
||||
void start()
|
||||
{
|
||||
_serverPtr->logInfo("Start client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||
|
||||
auto self(this->shared_from_this());
|
||||
|
||||
_netService.asyncReceive(
|
||||
@ -281,6 +290,8 @@ public:
|
||||
|
||||
void stop()
|
||||
{
|
||||
_serverPtr->logInfo("Stop client session with ID = {} (addr = {})", _ident, (void*)this);
|
||||
|
||||
_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
|
||||
|
||||
@ -36,7 +36,7 @@ class AdcTrivialLogger
|
||||
public:
|
||||
virtual ~AdcTrivialLogger() = default;
|
||||
|
||||
protected:
|
||||
// protected:
|
||||
static constexpr std::string_view errorLevelMark{"error"};
|
||||
static constexpr std::string_view warnLevelMark{"warning"};
|
||||
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
|
||||
class AdcPosixGenericDaemon
|
||||
{
|
||||
|
||||
@ -21,12 +21,11 @@ ABSTRACT DEVICE COMPONENTS LIBRARY
|
||||
namespace adc::spdlog
|
||||
{
|
||||
|
||||
template <interfaces::adc_generic_netserver_c ServerT>
|
||||
requires traits::formattable<typename ServerT::server_ident_t>
|
||||
class AdcGenericNetServerSpdlog : public AdcSpdlogGenericMarkDecorator<ServerT>
|
||||
template <traits::formattable IdentT = std::string>
|
||||
class AdcGenericNetServerSpdlog : public AdcSpdlogGenericMarkDecorator<AdcGenericNetServer<IdentT>>
|
||||
{
|
||||
protected:
|
||||
using base_t = AdcSpdlogGenericMarkDecorator<ServerT>;
|
||||
using base_t = AdcSpdlogGenericMarkDecorator<AdcGenericNetServer<IdentT>>;
|
||||
|
||||
std::string _serverID;
|
||||
|
||||
@ -36,7 +35,7 @@ protected:
|
||||
}
|
||||
|
||||
public:
|
||||
using typename ServerT::server_ident_t;
|
||||
using typename base_t::server_ident_t;
|
||||
|
||||
using base_t::logCritical;
|
||||
using base_t::logDebug;
|
||||
@ -53,7 +52,7 @@ public:
|
||||
{
|
||||
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));
|
||||
|
||||
@ -75,7 +74,7 @@ public:
|
||||
{
|
||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||
|
||||
return ServerT::ident();
|
||||
return base_t::ident();
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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()
|
||||
@ -98,7 +97,7 @@ public:
|
||||
|
||||
logInfo("Stopping network server ...");
|
||||
|
||||
ServerT::stop();
|
||||
base_t::stop();
|
||||
|
||||
logInfo("Network server is stopped");
|
||||
}
|
||||
@ -109,18 +108,17 @@ public:
|
||||
{
|
||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||
|
||||
ServerT::_isListening(id);
|
||||
base_t::_isListening(id);
|
||||
}
|
||||
|
||||
|
||||
void daemonize()
|
||||
requires std::derived_from<AdcPosixGenericDaemon, ServerT>
|
||||
{
|
||||
this->logMethodCalling(__PRETTY_FUNCTION__);
|
||||
|
||||
logInfo("Daemonizing server ...");
|
||||
|
||||
ServerT::daemonize();
|
||||
base_t::daemonize();
|
||||
|
||||
logInfo("The server was daemonized");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user