Fix console logging
This commit is contained in:
parent
1764ff9699
commit
071dbfa5fc
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
__declspec(thread) char tls_data[TLS_PAYLOAD_SIZE];
|
__declspec(thread) char tls_data[TLS_PAYLOAD_SIZE];
|
||||||
|
|
||||||
void exit_hook(const int code)
|
DECLSPEC_NORETURN void WINAPI exit_hook(const int code)
|
||||||
{
|
{
|
||||||
module_loader::pre_destroy();
|
module_loader::pre_destroy();
|
||||||
exit(code);
|
exit(code);
|
||||||
@ -39,7 +39,7 @@ void verify_tls()
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
FARPROC entry_point = nullptr;
|
FARPROC entry_point;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <std_include.hpp>
|
#include <std_include.hpp>
|
||||||
#include "loader/module_loader.hpp"
|
#include "loader/module_loader.hpp"
|
||||||
#include "game/game.hpp"
|
#include "game/game.hpp"
|
||||||
|
#include "scheduler.hpp"
|
||||||
|
|
||||||
class console final : public module
|
class console final : public module
|
||||||
{
|
{
|
||||||
@ -13,12 +14,13 @@ public:
|
|||||||
_dup2(this->handles_[1], 1);
|
_dup2(this->handles_[1], 1);
|
||||||
_dup2(this->handles_[1], 2);
|
_dup2(this->handles_[1], 2);
|
||||||
|
|
||||||
setvbuf(stdout, nullptr, _IONBF, 0);
|
//setvbuf(stdout, nullptr, _IONBF, 0);
|
||||||
setvbuf(stderr, nullptr, _IONBF, 0);
|
//setvbuf(stderr, nullptr, _IONBF, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void post_start() override
|
void post_start() override
|
||||||
{
|
{
|
||||||
|
scheduler::on_frame(std::bind(&console::log_messages, this));
|
||||||
this->console_runner_ = std::thread(std::bind(&console::runner, this));
|
this->console_runner_ = std::thread(std::bind(&console::runner, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +48,6 @@ public:
|
|||||||
|
|
||||||
std::lock_guard _(this->mutex_);
|
std::lock_guard _(this->mutex_);
|
||||||
this->console_initialized_ = true;
|
this->console_initialized_ = true;
|
||||||
this->replay_messages();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -59,26 +60,31 @@ private:
|
|||||||
|
|
||||||
int handles_[2]{};
|
int handles_[2]{};
|
||||||
|
|
||||||
void replay_messages()
|
void log_messages()
|
||||||
{
|
{
|
||||||
if (!this->console_initialized_) return;
|
while (this->console_initialized_ && !this->message_queue_.empty())
|
||||||
|
{
|
||||||
|
std::queue<std::string> message_queue_copy;
|
||||||
|
|
||||||
while (!this->message_queue_.empty())
|
|
||||||
{
|
|
||||||
this->push_message(this->message_queue_.front());
|
|
||||||
this->message_queue_.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void push_message(const std::string& message)
|
|
||||||
{
|
|
||||||
if (!this->console_initialized_)
|
|
||||||
{
|
{
|
||||||
std::lock_guard _(this->mutex_);
|
std::lock_guard _(this->mutex_);
|
||||||
this->message_queue_.push(message);
|
message_queue_copy = this->message_queue_;
|
||||||
return;
|
this->message_queue_ = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (!message_queue_copy.empty())
|
||||||
|
{
|
||||||
|
log_message(message_queue_copy.front());
|
||||||
|
message_queue_copy.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush(stdout);
|
||||||
|
fflush(stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void log_message(const std::string& message)
|
||||||
|
{
|
||||||
game::native::Conbuf_AppendText(message.data());
|
game::native::Conbuf_AppendText(message.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +97,8 @@ private:
|
|||||||
const auto len = _read(this->handles_[0], buffer, sizeof(buffer));
|
const auto len = _read(this->handles_[0], buffer, sizeof(buffer));
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
this->push_message(std::string(buffer, len));
|
std::lock_guard _(this->mutex_);
|
||||||
|
this->message_queue_.push(std::string(buffer, len));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
34
src/module/scheduler.cpp
Normal file
34
src/module/scheduler.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "scheduler.hpp"
|
||||||
|
|
||||||
|
std::mutex scheduler::mutex_;
|
||||||
|
std::vector<std::function<void()>> scheduler::callbacks_;
|
||||||
|
|
||||||
|
void scheduler::on_frame(const std::function<void()>& callback)
|
||||||
|
{
|
||||||
|
std::lock_guard _(mutex_);
|
||||||
|
callbacks_.push_back(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void scheduler::execute()
|
||||||
|
{
|
||||||
|
std::vector<std::function<void()>> callbacks_copy;
|
||||||
|
|
||||||
|
{
|
||||||
|
std::lock_guard _(mutex_);
|
||||||
|
callbacks_copy = callbacks_;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& callback : callbacks_copy)
|
||||||
|
{
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void scheduler::pre_destroy()
|
||||||
|
{
|
||||||
|
std::lock_guard _(mutex_);
|
||||||
|
callbacks_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
REGISTER_MODULE(scheduler);
|
15
src/module/scheduler.hpp
Normal file
15
src/module/scheduler.hpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "loader/module_loader.hpp"
|
||||||
|
|
||||||
|
class scheduler final : public module
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void on_frame(const std::function<void()>& callback);
|
||||||
|
static void execute();
|
||||||
|
|
||||||
|
void pre_destroy() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::mutex mutex_;
|
||||||
|
static std::vector<std::function<void()>> callbacks_;
|
||||||
|
};
|
@ -1,5 +1,6 @@
|
|||||||
#include <std_include.hpp>
|
#include <std_include.hpp>
|
||||||
#include "steam/steam.hpp"
|
#include "steam/steam.hpp"
|
||||||
|
#include "module/scheduler.hpp"
|
||||||
|
|
||||||
namespace steam
|
namespace steam
|
||||||
{
|
{
|
||||||
@ -125,6 +126,7 @@ namespace steam
|
|||||||
void SteamAPI_RunCallbacks()
|
void SteamAPI_RunCallbacks()
|
||||||
{
|
{
|
||||||
callbacks::run_callbacks();
|
callbacks::run_callbacks();
|
||||||
|
scheduler::execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SteamAPI_Shutdown()
|
void SteamAPI_Shutdown()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user