[Monitor] Yeet (#529)

This commit is contained in:
Edo 2022-10-15 21:31:16 +01:00 committed by GitHub
parent 77345f9944
commit 8adec3e678
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 23 additions and 134 deletions

View File

@ -57,7 +57,6 @@ namespace Components
Loader::Register(new IPCPipe()); Loader::Register(new IPCPipe());
Loader::Register(new MapDump()); Loader::Register(new MapDump());
Loader::Register(new ModList()); Loader::Register(new ModList());
Loader::Register(new Monitor());
Loader::Register(new Network()); Loader::Register(new Network());
Loader::Register(new Session()); Loader::Register(new Session());
Loader::Register(new Theatre()); Loader::Register(new Theatre());

View File

@ -80,7 +80,6 @@ namespace Components
#include "Modules/Console.hpp" #include "Modules/Console.hpp"
#include "Modules/UIScript.hpp" #include "Modules/UIScript.hpp"
#include "Modules/ModList.hpp" #include "Modules/ModList.hpp"
#include "Modules/Monitor.hpp"
#include "Modules/Network.hpp" #include "Modules/Network.hpp"
#include "Modules/Theatre.hpp" #include "Modules/Theatre.hpp"
#include "Modules/QuickPatch.hpp" #include "Modules/QuickPatch.hpp"

View File

@ -277,7 +277,7 @@ namespace Components
void Auth::StoreKey() void Auth::StoreKey()
{ {
if (!Dedicated::IsEnabled() && !ZoneBuilder::IsEnabled() && !Monitor::IsEnabled() && Auth::GuidKey.isValid()) if (!Dedicated::IsEnabled() && !ZoneBuilder::IsEnabled() && Auth::GuidKey.isValid())
{ {
Proto::Auth::Certificate cert; Proto::Auth::Certificate cert;
cert.set_token(Auth::GuidToken.toString()); cert.set_token(Auth::GuidToken.toString());

View File

@ -788,7 +788,7 @@ namespace Components
void Console::FreeNativeConsole() void Console::FreeNativeConsole()
{ {
if (!Monitor::IsEnabled() && !Flags::HasFlag("stdout") && (!Dedicated::IsEnabled() || Flags::HasFlag("console")) && !Loader::IsPerformingUnitTests()) if (!Flags::HasFlag("stdout") && (!Dedicated::IsEnabled() || Flags::HasFlag("console")) && !Loader::IsPerformingUnitTests())
{ {
FreeConsole(); FreeConsole();
} }
@ -919,15 +919,10 @@ namespace Components
if (Loader::IsPerformingUnitTests()) return; if (Loader::IsPerformingUnitTests()) return;
// External console // External console
if (Flags::HasFlag("stdout") || Monitor::IsEnabled()) if (Flags::HasFlag("stdout"))
{ {
#ifndef DEBUG Utils::Hook(0x4B2080, Console::StdOutPrint, HOOK_JUMP).install()->quick();
if (!Monitor::IsEnabled()) Utils::Hook(0x43D570, Console::StdOutError, HOOK_JUMP).install()->quick();
#endif
{
Utils::Hook(0x4B2080, Console::StdOutPrint, HOOK_JUMP).install()->quick();
Utils::Hook(0x43D570, Console::StdOutError, HOOK_JUMP).install()->quick();
}
} }
else if (Flags::HasFlag("console") || ZoneBuilder::IsEnabled()) // ZoneBuilder uses the game's console, until the native one is adapted. else if (Flags::HasFlag("console") || ZoneBuilder::IsEnabled()) // ZoneBuilder uses the game's console, until the native one is adapted.
{ {
@ -936,7 +931,7 @@ namespace Components
// Redirect input (]command) // Redirect input (]command)
Utils::Hook(0x47025A, 0x4F5770, HOOK_CALL).install()->quick(); Utils::Hook(0x47025A, 0x4F5770, HOOK_CALL).install()->quick();
Utils::Hook(0x60BB68, []() Utils::Hook(0x60BB68, []
{ {
Console::ShowAsyncConsole(); Console::ShowAsyncConsole();
}, HOOK_CALL).install()->quick(); }, HOOK_CALL).install()->quick();

View File

@ -555,7 +555,7 @@ namespace Components
{ {
Friends::LoggedOn = false; Friends::LoggedOn = false;
if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled() || Monitor::IsEnabled()) if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled())
return; return;
Friends::UIStreamFriendly = Dvar::Register<bool>("ui_streamFriendly", false, Game::DVAR_ARCHIVE, "Stream friendly UI"); Friends::UIStreamFriendly = Dvar::Register<bool>("ui_streamFriendly", false, Game::DVAR_ARCHIVE, "Stream friendly UI");
@ -720,7 +720,7 @@ namespace Components
Friends::~Friends() Friends::~Friends()
{ {
if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled() || Monitor::IsEnabled()) return; if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled()) return;
Friends::StoreFriendsList(); Friends::StoreFriendsList();

View File

@ -204,7 +204,7 @@ namespace Components
IPCPipe::IPCPipe() IPCPipe::IPCPipe()
{ {
if (Dedicated::IsEnabled() || Monitor::IsEnabled() || Loader::IsPerformingUnitTests() || ZoneBuilder::IsEnabled()) return; if (Dedicated::IsEnabled() || Loader::IsPerformingUnitTests() || ZoneBuilder::IsEnabled()) return;
// Server pipe // Server pipe
IPCPipe::ServerPipe.onConnect(IPCPipe::ConnectClient); IPCPipe::ServerPipe.onConnect(IPCPipe::ConnectClient);

View File

@ -1,80 +0,0 @@
#include <STDInclude.hpp>
#undef getch
#undef ungetch
#include <conio.h>
namespace Components
{
bool Monitor::IsEnabled()
{
static std::optional<bool> flag;
if (!flag.has_value())
{
flag.emplace(Flags::HasFlag("monitor"));
}
return flag.value();
}
int __stdcall Monitor::EntryPoint(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nShowCmd*/)
{
Utils::Hook::Call<void()>(0x4D8220)(); // Dvar_Init
Utils::Hook::Call<void()>(0x4D2280)(); // SL_Init
Utils::Hook::Call<void()>(0x47F390)(); // Swap_Init
Utils::Hook::Call<void()>(0x60AD10)(); // Com_InitDvars
Utils::Hook::Call<void()>(0x420830)(); // Com_InitHunkMemory
Utils::Hook::Call<void()>(0x4A62A0)(); // LargeLocalInit
Utils::Hook::Call<void(unsigned int)>(0x502580)(static_cast<unsigned int>(__rdtsc())); // Netchan_Init
Game::NET_Init();
Utils::Time::Interval interval;
while (!interval.elapsed(15s))
{
Utils::Hook::Call<void()>(0x49F0B0)(); // Com_ClientPacketEvent
//Session::RunFrame();
Node::RunFrame();
ServerList::Frame();
std::this_thread::sleep_for(10ms);
}
auto list = ServerList::GetList();
if (!list)
{
printf("1 IW4x player=0|server=0 Returned list was null\n");
return 1;
}
int servers = list->size();
int players = 0;
for (unsigned int i = 0; i < list->size(); ++i)
{
players += list->at(i).clients;
}
printf("0 IW4x player=%d|server=%d Servers successfully parsed\n", players, servers);
Utils::Hook::Call<void()>(0x430630)(); // LargeLocalReset
Utils::Hook::Call<void()>(0x4A0460)(); // Hunk_ClearTempMemory
Utils::Hook::Call<void()>(0x4AB3A0)(); // Hunk_ClearTempMemoryHigh
Utils::Hook::Call<void()>(0x4B3AD0)(); // SL_Shutdown
Utils::Hook::Call<void()>(0x502C50)(); // Dvar_Shutdown
if (*Game::ip_socket && *Game::ip_socket != INVALID_SOCKET)
{
closesocket(*Game::ip_socket);
}
WSACleanup();
return 0;
}
Monitor::Monitor()
{
if (!Monitor::IsEnabled()) return;
Utils::Hook(0x4513DA, Monitor::EntryPoint, HOOK_JUMP).install()->quick();
}
}

View File

@ -1,15 +0,0 @@
#pragma once
namespace Components
{
class Monitor : public Component
{
public:
Monitor();
static bool IsEnabled();
private:
static int __stdcall EntryPoint(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
};
}

View File

@ -73,18 +73,10 @@ namespace Components
{ {
Proto::Node::List list; Proto::Node::List list;
if (Monitor::IsEnabled()) FileSystem::File defaultNodes("nodes_default.dat");
{ if (!defaultNodes.exists() || !list.ParseFromString(Utils::Compression::ZLib::Decompress(defaultNodes.getBuffer()))) return;
std::string nodes = Utils::IO::ReadFile("players/nodes_default.dat");
if (nodes.empty() || !list.ParseFromString(Utils::Compression::ZLib::Decompress(nodes))) return;
}
else
{
FileSystem::File defaultNodes("nodes_default.dat");
if (!defaultNodes.exists() || !list.ParseFromString(Utils::Compression::ZLib::Decompress(defaultNodes.getBuffer()))) return;
}
for (int i = 0; i < list.nodes_size(); ++i) for (auto i = 0; i < list.nodes_size(); ++i)
{ {
const std::string& addr = list.nodes(i); const std::string& addr = list.nodes(i);
@ -171,7 +163,7 @@ namespace Components
if (!Dedicated::IsEnabled()) if (!Dedicated::IsEnabled())
{ {
if (ServerList::useMasterServer) return; // don't run node frame if master server is active if (ServerList::UseMasterServer) return; // don't run node frame if master server is active
if (*Game::clcState > 0) if (*Game::clcState > 0)
{ {
@ -251,7 +243,7 @@ namespace Components
if (list.isnode() && (!list.port() || list.port() == address.getPort())) if (list.isnode() && (!list.port() || list.port() == address.getPort()))
{ {
if (!Dedicated::IsEnabled() && ServerList::IsOnlineList() && !ServerList::useMasterServer && list.protocol() == PROTOCOL) if (!Dedicated::IsEnabled() && ServerList::IsOnlineList() && !ServerList::UseMasterServer && list.protocol() == PROTOCOL)
{ {
Logger::Debug("Inserting {} into the serverlist", address.getString()); Logger::Debug("Inserting {} into the serverlist", address.getString());
ServerList::InsertRequest(address); ServerList::InsertRequest(address);
@ -361,8 +353,7 @@ namespace Components
Node::LoadNodes(); Node::LoadNodes();
}; };
if (Monitor::IsEnabled()) Network::OnStart(loadNodes); Scheduler::OnGameInitialized(loadNodes, Scheduler::Pipeline::MAIN);
else Scheduler::OnGameInitialized(loadNodes, Scheduler::Pipeline::MAIN);
Network::OnStart([] Network::OnStart([]
{ {

View File

@ -19,7 +19,7 @@ namespace Components
Dvar::Var ServerList::NETServerQueryLimit; Dvar::Var ServerList::NETServerQueryLimit;
Dvar::Var ServerList::NETServerFrames; Dvar::Var ServerList::NETServerFrames;
bool ServerList::useMasterServer = true; bool ServerList::UseMasterServer = true;
std::vector<ServerList::ServerInfo>* ServerList::GetList() std::vector<ServerList::ServerInfo>* ServerList::GetList()
{ {
@ -51,7 +51,7 @@ namespace Components
bool ServerList::IsOnlineList() bool ServerList::IsOnlineList()
{ {
return (Monitor::IsEnabled() || Dvar::Var("ui_netSource").get<int>() == 1); return (Dvar::Var("ui_netSource").get<int>() == 1);
} }
unsigned int ServerList::GetServerCount() unsigned int ServerList::GetServerCount()
@ -299,13 +299,13 @@ namespace Components
{ {
Logger::Print("Could not resolve address for {}:{}", masterServerName, masterPort); Logger::Print("Could not resolve address for {}:{}", masterServerName, masterPort);
Toast::Show("cardicon_headshot", "^1Error", Utils::String::VA("Could not resolve address for %s:%u", masterServerName, masterPort), 5000); Toast::Show("cardicon_headshot", "^1Error", Utils::String::VA("Could not resolve address for %s:%u", masterServerName, masterPort), 5000);
useMasterServer = false; UseMasterServer = false;
return; return;
} }
Toast::Show("cardicon_headshot", "Server Browser", "Fetching servers...", 3000); Toast::Show("cardicon_headshot", "Server Browser", "Fetching servers...", 3000);
useMasterServer = true; UseMasterServer = true;
ServerList::RefreshContainer.awatingList = true; ServerList::RefreshContainer.awatingList = true;
ServerList::RefreshContainer.awaitTime = Game::Sys_Milliseconds(); ServerList::RefreshContainer.awaitTime = Game::Sys_Milliseconds();
@ -675,7 +675,7 @@ namespace Components
Logger::Print("We haven't received a response from the master within {} seconds!\n", (Game::Sys_Milliseconds() - ServerList::RefreshContainer.awaitTime) / 1000); Logger::Print("We haven't received a response from the master within {} seconds!\n", (Game::Sys_Milliseconds() - ServerList::RefreshContainer.awaitTime) / 1000);
Toast::Show("cardicon_headshot", "^1Error", "Failed to reach master server, using node servers instead.", 5000); Toast::Show("cardicon_headshot", "^1Error", "Failed to reach master server, using node servers instead.", 5000);
useMasterServer = false; UseMasterServer = false;
Node::Synchronize(); Node::Synchronize();
} }
} }

View File

@ -54,7 +54,7 @@ namespace Components
static void UpdateVisibleInfo(); static void UpdateVisibleInfo();
static bool GetMasterServer(const char* ip, int port, Game::netadr_t& address); static bool GetMasterServer(const char* ip, int port, Game::netadr_t& address);
static bool useMasterServer; static bool UseMasterServer;
private: private:
enum Column enum Column

View File

@ -20,7 +20,7 @@ namespace Components
Console::FreeNativeConsole(); Console::FreeNativeConsole();
if (Loader::IsPerformingUnitTests() || Dedicated::IsEnabled() || ZoneBuilder::IsEnabled() || Monitor::IsEnabled()) return; if (Loader::IsPerformingUnitTests() || Dedicated::IsEnabled() || ZoneBuilder::IsEnabled()) return;
Singleton::FirstInstance = (CreateMutexA(nullptr, FALSE, "iw4x_mutex") && GetLastError() != ERROR_ALREADY_EXISTS); Singleton::FirstInstance = (CreateMutexA(nullptr, FALSE, "iw4x_mutex") && GetLastError() != ERROR_ALREADY_EXISTS);

View File

@ -144,7 +144,7 @@ namespace Components
Toast::Toast() Toast::Toast()
{ {
if (Dedicated::IsEnabled() || Monitor::IsEnabled() || ZoneBuilder::IsEnabled()) if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled())
{ {
return; return;
} }