iw5-mod/src/steam/steam.cpp

223 lines
4.1 KiB
C++
Raw Normal View History

2018-12-22 18:46:16 +01:00
#include <std_include.hpp>
2018-12-25 00:32:21 +01:00
#include "steam/steam.hpp"
2018-12-22 18:46:16 +01:00
namespace steam
{
2018-12-25 00:32:21 +01:00
::utils::nt::module overlay(nullptr);
2018-12-22 18:46:16 +01:00
uint64_t callbacks::call_id_ = 0;
std::recursive_mutex callbacks::mutex_;
std::map<uint64_t, bool> callbacks::calls_;
std::map<uint64_t, callbacks::base*> callbacks::result_handlers_;
std::vector<callbacks::result> callbacks::results_;
std::vector<callbacks::base*> callbacks::callback_list_;
uint64_t callbacks::register_call()
{
2018-12-25 00:32:21 +01:00
std::lock_guard _(mutex_);
calls_[++call_id_] = false;
return call_id_;
2018-12-22 18:46:16 +01:00
}
2018-12-25 00:32:21 +01:00
void callbacks::register_callback(base* handler, const int callback)
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
std::lock_guard _(mutex_);
2018-12-22 18:46:16 +01:00
handler->set_i_callback(callback);
2018-12-25 00:32:21 +01:00
callback_list_.push_back(handler);
2018-12-22 18:46:16 +01:00
}
2018-12-25 00:32:21 +01:00
void callbacks::register_call_result(const uint64_t call, base* result)
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
std::lock_guard _(mutex_);
result_handlers_[call] = result;
2018-12-22 18:46:16 +01:00
}
void callbacks::return_call(void* data, const int size, const int type, const uint64_t call)
{
2018-12-25 00:32:21 +01:00
std::lock_guard _(mutex_);
2018-12-22 18:46:16 +01:00
2018-12-25 00:32:21 +01:00
result result{};
2018-12-22 18:46:16 +01:00
result.call = call;
result.data = data;
result.size = size;
result.type = type;
2018-12-25 00:32:21 +01:00
calls_[call] = true;
2018-12-22 18:46:16 +01:00
2018-12-25 00:32:21 +01:00
results_.push_back(result);
2018-12-22 18:46:16 +01:00
}
void callbacks::run_callbacks()
{
2018-12-25 00:32:21 +01:00
std::lock_guard _(mutex_);
2018-12-22 18:46:16 +01:00
2018-12-25 00:32:21 +01:00
for (auto result : results_)
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
if (result_handlers_.find(result.call) != result_handlers_.end())
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
result_handlers_[result.call]->run(result.data, false, result.call);
2018-12-22 18:46:16 +01:00
}
2018-12-25 00:32:21 +01:00
for (auto callback : callback_list_)
2018-12-22 18:46:16 +01:00
{
if (callback && callback->get_i_callback() == result.type)
{
callback->run(result.data, false, 0);
}
}
if (result.data)
{
free(result.data);
}
}
2018-12-25 00:32:21 +01:00
results_.clear();
2018-12-22 18:46:16 +01:00
}
extern "C"
{
bool SteamAPI_RestartAppIfNecessary()
{
return false;
}
bool SteamAPI_Init()
{
2018-12-25 00:32:21 +01:00
overlay = ::utils::nt::module("gameoverlayrenderer.dll");
2018-12-22 18:46:16 +01:00
if (!overlay)
{
HKEY reg_key;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Valve\\Steam", 0, KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS)
{
char steam_path[MAX_PATH] = { 0 };
DWORD length = sizeof(steam_path);
RegQueryValueExA(reg_key, "InstallPath", nullptr, nullptr, reinterpret_cast<BYTE*>(steam_path), &length);
RegCloseKey(reg_key);
2018-12-25 00:32:21 +01:00
std::string overlay_path = steam_path;
if(overlay_path.back() != '\\' && overlay_path.back() != '/')
{
overlay_path.push_back('\\');
}
2018-12-22 18:46:16 +01:00
2018-12-25 00:32:21 +01:00
overlay_path.append("gameoverlayrenderer.dll");
overlay = ::utils::nt::module::load(overlay_path);
2018-12-22 18:46:16 +01:00
}
}
return true;
}
void SteamAPI_RegisterCallResult(callbacks::base* result, uint64_t call)
{
callbacks::register_call_result(call, result);
}
void SteamAPI_RegisterCallback(callbacks::base* handler, int callback)
{
callbacks::register_callback(handler, callback);
}
void SteamAPI_RunCallbacks()
{
callbacks::run_callbacks();
}
void SteamAPI_Shutdown()
{
}
void SteamAPI_UnregisterCallResult()
{
}
void SteamAPI_UnregisterCallback()
{
}
bool SteamGameServer_Init()
{
return true;
}
void SteamGameServer_RunCallbacks()
{
}
void SteamGameServer_Shutdown()
{
}
2018-12-25 00:32:21 +01:00
friends* SteamFriends()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static friends friends;
2018-12-22 18:46:16 +01:00
return &friends;
}
2018-12-25 00:32:21 +01:00
matchmaking* SteamMatchmaking()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static matchmaking matchmaking;
2018-12-22 18:46:16 +01:00
return &matchmaking;
}
2018-12-25 00:32:21 +01:00
matchmaking_servers* SteamMatchmakingServers()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static matchmaking_servers matchmaking_servers;
2018-12-22 18:46:16 +01:00
return &matchmaking_servers;
}
2018-12-25 00:32:21 +01:00
game_server* SteamGameServer()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static game_server game_server;
2018-12-22 18:46:16 +01:00
return &game_server;
}
2018-12-25 00:32:21 +01:00
master_server_updater* SteamMasterServerUpdater()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static master_server_updater master_server_updater;
2018-12-22 18:46:16 +01:00
return &master_server_updater;
}
2018-12-25 00:32:21 +01:00
networking* SteamNetworking()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static networking networking;
2018-12-22 18:46:16 +01:00
return &networking;
}
2018-12-25 00:32:21 +01:00
remote_storage* SteamRemoteStorage()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static remote_storage remote_storage;
2018-12-22 18:46:16 +01:00
return &remote_storage;
}
2018-12-25 00:32:21 +01:00
user* SteamUser()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static user user;
2018-12-22 18:46:16 +01:00
return &user;
}
2018-12-25 00:32:21 +01:00
utils* SteamUtils()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static utils utils;
2018-12-22 18:46:16 +01:00
return &utils;
}
2018-12-25 00:32:21 +01:00
apps* SteamApps()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static apps apps;
2018-12-22 18:46:16 +01:00
return &apps;
}
2018-12-25 00:32:21 +01:00
user_stats* SteamUserStats()
2018-12-22 18:46:16 +01:00
{
2018-12-25 00:32:21 +01:00
static user_stats user_stats;
2018-12-22 18:46:16 +01:00
return &user_stats;
}
}
}