Merge pull request #382 from diamante0018/logger-fix
[Logger] Improve Hook code
This commit is contained in:
commit
02b4ba09df
@ -12,7 +12,7 @@ namespace Components
|
||||
return (IsWindow(Console::GetWindow()) != FALSE || (Dedicated::IsEnabled() && !Flags::HasFlag("console")));
|
||||
}
|
||||
|
||||
void Logger::PrintStub(const int channel, const char* message, ...)
|
||||
void Logger::Print_Stub(const int channel, const char* message, ...)
|
||||
{
|
||||
char buf[4096] = {0};
|
||||
|
||||
@ -164,22 +164,18 @@ namespace Components
|
||||
}
|
||||
}
|
||||
|
||||
void Logger::G_LogPrintfStub(const char* fmt, ...)
|
||||
void Logger::G_LogPrintf_Hk(const char* fmt, ...)
|
||||
{
|
||||
char string[1024];
|
||||
char string2[1024];
|
||||
char string[1024]{};
|
||||
char string2[1024]{};
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vsnprintf_s(string2, _TRUNCATE, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
const auto min = Game::level->time / 1000 / 60;
|
||||
const auto tens = Game::level->time / 1000 % 60 / 10;
|
||||
const auto sec = Game::level->time / 1000 % 60 % 10;
|
||||
|
||||
const auto len = _snprintf_s(string, _TRUNCATE, "%3i:%i%i %s",
|
||||
min, tens, sec, string2);
|
||||
const auto time = Game::level->time / 1000;
|
||||
const auto len = _snprintf_s(string, _TRUNCATE, "%3i:%i%i %s", time / 60, time % 60 / 10, time % 60 % 10, string2);
|
||||
|
||||
if (Game::level->logFile != nullptr)
|
||||
{
|
||||
@ -190,7 +186,7 @@ namespace Components
|
||||
Logger::NetworkLog(string, true);
|
||||
}
|
||||
|
||||
__declspec(naked) void Logger::PrintMessageStub()
|
||||
__declspec(naked) void Logger::PrintMessage_Stub()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
@ -241,7 +237,7 @@ namespace Components
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked) void Logger::BuildOSPathStub()
|
||||
__declspec(naked) void Logger::BuildOSPath_Stub()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
@ -374,18 +370,18 @@ namespace Components
|
||||
Logger::Logger()
|
||||
{
|
||||
Dvar::Register<bool>("iw4x_onelog", false, Game::DVAR_LATCH | Game::DVAR_ARCHIVE, "Only write the game log to the 'userraw' OS folder");
|
||||
Utils::Hook(0x642139, Logger::BuildOSPathStub, HOOK_JUMP).install()->quick();
|
||||
Utils::Hook(0x642139, Logger::BuildOSPath_Stub, HOOK_JUMP).install()->quick();
|
||||
|
||||
Logger::PipeOutput(nullptr);
|
||||
|
||||
Scheduler::Loop(Logger::Frame, Scheduler::Pipeline::SERVER);
|
||||
|
||||
Utils::Hook(Game::G_LogPrintf, Logger::G_LogPrintfStub, HOOK_JUMP).install()->quick();
|
||||
Utils::Hook(Game::Com_PrintMessage, Logger::PrintMessageStub, HOOK_JUMP).install()->quick();
|
||||
Utils::Hook(Game::G_LogPrintf, Logger::G_LogPrintf_Hk, HOOK_JUMP).install()->quick();
|
||||
Utils::Hook(Game::Com_PrintMessage, Logger::PrintMessage_Stub, HOOK_JUMP).install()->quick();
|
||||
|
||||
if (Loader::IsPerformingUnitTests())
|
||||
{
|
||||
Utils::Hook(Game::Com_Printf, Logger::PrintStub, HOOK_JUMP).install()->quick();
|
||||
Utils::Hook(Game::Com_Printf, Logger::Print_Stub, HOOK_JUMP).install()->quick();
|
||||
}
|
||||
|
||||
Events::OnSVInit(Logger::AddServerCommands);
|
||||
|
@ -10,7 +10,7 @@ namespace Components
|
||||
|
||||
static bool IsConsoleReady();
|
||||
|
||||
static void PrintStub(int channel, const char* message, ...);
|
||||
static void Print_Stub(int channel, const char* message, ...);
|
||||
|
||||
static void PipeOutput(void(*callback)(const std::string&));
|
||||
|
||||
@ -100,12 +100,12 @@ namespace Components
|
||||
|
||||
static void MessagePrint(int channel, const std::string& msg);
|
||||
static void Frame();
|
||||
static void G_LogPrintfStub(const char* fmt, ...);
|
||||
static void PrintMessageStub();
|
||||
static void G_LogPrintf_Hk(const char* fmt, ...);
|
||||
static void PrintMessage_Stub();
|
||||
static void PrintMessagePipe(const char* data);
|
||||
static void EnqueueMessage(const std::string& message);
|
||||
|
||||
static void BuildOSPathStub();
|
||||
static void BuildOSPath_Stub();
|
||||
static void RedirectOSPath(const char* file, char* folder);
|
||||
|
||||
static void NetworkLog(const char* data, bool gLog);
|
||||
|
Loading…
Reference in New Issue
Block a user