155 lines
4.8 KiB
C++
Raw Normal View History

2017-01-20 14:36:52 +01:00
#pragma once
2017-01-19 22:23:59 +01:00
namespace Components
{
class Logger : public Component
{
public:
Logger();
~Logger();
2022-06-12 23:07:53 +02:00
2017-01-19 22:23:59 +01:00
static bool IsConsoleReady();
2022-07-22 11:27:38 +02:00
static void Print_Stub(int channel, const char* message, ...);
2017-01-19 22:23:59 +01:00
2022-12-28 13:37:03 +01:00
static void PipeOutput(void(*callback)(const std::string&));
2017-01-19 22:23:59 +01:00
2022-12-28 11:03:14 +01:00
static void PrintInternal(Game::conChannel_t channel, const std::string_view& fmt, std::format_args&& args);
static void ErrorInternal(Game::errorParm_t error, const std::string_view& fmt, std::format_args&& args);
static void PrintErrorInternal(Game::conChannel_t channel, const std::string_view& fmt, std::format_args&& args);
static void WarningInternal(Game::conChannel_t channel, const std::string_view& fmt, std::format_args&& args);
2024-01-12 09:53:58 +01:00
static void PrintFail2BanInternal(const std::string_view& fmt, std::format_args&& args);
2022-12-28 11:03:14 +01:00
static void DebugInternal(const std::string_view& fmt, std::format_args&& args, const std::source_location& loc);
2022-06-12 23:07:53 +02:00
2022-12-28 11:03:14 +01:00
static void Print(const std::string_view& fmt)
2022-06-12 23:07:53 +02:00
{
2024-06-16 01:12:49 +02:00
PrintInternal(Game::CON_CHANNEL_DONT_FILTER, fmt, std::make_format_args());
2022-06-12 23:07:53 +02:00
}
2022-12-28 11:03:14 +01:00
static void Print(Game::conChannel_t channel, const std::string_view& fmt)
2022-06-12 23:07:53 +02:00
{
2024-06-16 01:12:49 +02:00
PrintInternal(channel, fmt, std::make_format_args());
2022-06-12 23:07:53 +02:00
}
template <typename... Args>
2022-12-28 11:03:14 +01:00
static void Print(const std::string_view& fmt, Args&&... args)
2022-06-12 23:07:53 +02:00
{
(Utils::String::SanitizeFormatArgs(args), ...);
2022-06-12 23:07:53 +02:00
PrintInternal(Game::CON_CHANNEL_DONT_FILTER, fmt, std::make_format_args(args...));
}
template <typename... Args>
2022-12-28 11:03:14 +01:00
static void Print(Game::conChannel_t channel, const std::string_view& fmt, Args&&... args)
2022-06-12 23:07:53 +02:00
{
(Utils::String::SanitizeFormatArgs(args), ...);
2022-06-12 23:07:53 +02:00
PrintInternal(channel, fmt, std::make_format_args(args...));
}
2022-12-28 11:03:14 +01:00
static void Error(Game::errorParm_t error, const std::string_view& fmt)
2022-06-12 23:07:53 +02:00
{
2024-06-16 01:12:49 +02:00
ErrorInternal(error, fmt, std::make_format_args());
2022-06-12 23:07:53 +02:00
}
template <typename... Args>
2022-12-28 11:03:14 +01:00
static void Error(Game::errorParm_t error, const std::string_view& fmt, Args&&... args)
2022-06-12 23:07:53 +02:00
{
(Utils::String::SanitizeFormatArgs(args), ...);
2022-06-12 23:07:53 +02:00
ErrorInternal(error, fmt, std::make_format_args(args...));
}
2022-12-28 11:03:14 +01:00
static void Warning(Game::conChannel_t channel, const std::string_view& fmt)
2022-06-12 23:07:53 +02:00
{
2024-06-16 01:12:49 +02:00
WarningInternal(channel, fmt, std::make_format_args());
2022-06-12 23:07:53 +02:00
}
template <typename... Args>
2022-12-28 11:03:14 +01:00
static void Warning(Game::conChannel_t channel, const std::string_view& fmt, Args&&... args)
2022-06-12 23:07:53 +02:00
{
(Utils::String::SanitizeFormatArgs(args), ...);
2022-06-12 23:07:53 +02:00
WarningInternal(channel, fmt, std::make_format_args(args...));
}
2022-12-28 11:03:14 +01:00
static void PrintError(Game::conChannel_t channel, const std::string_view& fmt)
2022-06-12 23:07:53 +02:00
{
2024-06-16 01:12:49 +02:00
PrintErrorInternal(channel, fmt, std::make_format_args());
2022-06-12 23:07:53 +02:00
}
template <typename... Args>
2022-12-28 11:03:14 +01:00
static void PrintError(Game::conChannel_t channel, const std::string_view& fmt, Args&&... args)
2022-06-12 23:07:53 +02:00
{
(Utils::String::SanitizeFormatArgs(args), ...);
2022-06-12 23:07:53 +02:00
PrintErrorInternal(channel, fmt, std::make_format_args(args...));
}
2024-01-12 09:53:58 +01:00
static void PrintFail2Ban(const std::string_view& fmt)
{
2024-06-16 01:06:11 +02:00
PrintFail2BanInternal(fmt, std::make_format_args());
2024-01-12 09:53:58 +01:00
}
template <typename... Args>
static void PrintFail2Ban(const std::string_view& fmt, Args&&... args)
{
(Utils::String::SanitizeFormatArgs(args), ...);
PrintFail2BanInternal(fmt, std::make_format_args(args...));
}
2022-12-28 11:03:14 +01:00
struct FormatWithLocation
2022-06-12 23:07:53 +02:00
{
2022-12-28 11:03:14 +01:00
std::string_view format;
std::source_location location;
FormatWithLocation(const std::string_view& fmt, std::source_location loc = std::source_location::current())
: format(fmt)
, location(std::move(loc))
{
}
FormatWithLocation(const char* fmt, std::source_location loc = std::source_location::current())
: format(fmt)
, location(std::move(loc))
{
}
};
2022-06-12 23:07:53 +02:00
template <typename... Args>
2022-12-28 11:03:14 +01:00
static void Debug([[maybe_unused]] const FormatWithLocation& f, [[maybe_unused]] const Args&... args)
{
#ifdef _DEBUG
(Utils::String::SanitizeFormatArgs(args), ...);
DebugInternal(f.format, std::make_format_args(args...), f.location);
#endif
}
2022-06-12 23:07:53 +02:00
2017-01-19 22:23:59 +01:00
private:
static std::mutex MessageMutex;
static std::vector<std::string> MessageQueue;
2023-04-03 13:49:37 +02:00
static std::recursive_mutex LoggingMutex;
2017-01-19 22:23:59 +01:00
static std::vector<Network::Address> LoggingAddresses[2];
2024-01-12 09:53:58 +01:00
static Dvar::Var IW4x_one_log;
static Dvar::Var IW4x_fail2ban_location;
2022-12-28 13:37:03 +01:00
static void(*PipeCallback)(const std::string&);
2017-01-19 22:23:59 +01:00
static void MessagePrint(int channel, const std::string& msg);
2017-01-19 22:23:59 +01:00
static void Frame();
2022-07-22 11:27:38 +02:00
static void G_LogPrintf_Hk(const char* fmt, ...);
static void PrintMessage_Stub();
2017-01-19 22:23:59 +01:00
static void PrintMessagePipe(const char* data);
2018-12-17 14:29:18 +01:00
static void EnqueueMessage(const std::string& message);
2017-01-19 22:23:59 +01:00
2022-07-22 11:27:38 +02:00
static void BuildOSPath_Stub();
2017-02-25 01:17:11 +01:00
static void RedirectOSPath(const char* file, char* folder);
2017-01-19 22:23:59 +01:00
static void NetworkLog(const char* data, bool gLog);
2022-06-16 16:15:26 +02:00
static void LSP_LogString_Stub(int localControllerIndex, const char* string);
static void LSP_LogStringAboutUser_Stub(int localControllerIndex, std::uint64_t xuid, const char* string);
2022-06-16 16:15:26 +02:00
static void AddServerCommands();
2017-01-19 22:23:59 +01:00
};
}