h1-mod/src/client/steam/steam.hpp
2022-02-03 11:05:24 -08:00

122 lines
3.1 KiB
C++

#pragma once
#define STEAM_EXPORT extern "C" __declspec(dllexport)
struct raw_steam_id final
{
unsigned int account_id : 32;
unsigned int account_instance : 20;
unsigned int account_type : 4;
int universe : 8;
};
typedef union
{
raw_steam_id raw;
unsigned long long bits;
} steam_id;
#pragma pack( push, 1 )
struct raw_game_id final
{
unsigned int app_id : 24;
unsigned int type : 8;
unsigned int mod_id : 32;
};
typedef union
{
raw_game_id raw;
unsigned long long bits;
} game_id;
#pragma pack( pop )
#include "interfaces/apps.hpp"
#include "interfaces/user.hpp"
#include "interfaces/utils.hpp"
#include "interfaces/friends.hpp"
#include "interfaces/user_stats.hpp"
#include "interfaces/game_server.hpp"
#include "interfaces/networking.hpp"
#include "interfaces/matchmaking.hpp"
#include "interfaces/remote_storage.hpp"
namespace steam
{
class callbacks
{
public:
class base
{
public:
base() : flags_(0), callback_(0)
{
}
virtual void run(void* pv_param) = 0;
virtual void run(void* pv_param, bool failure, uint64_t handle) = 0;
virtual int get_callback_size_bytes() = 0;
int get_i_callback() const { return callback_; }
void set_i_callback(const int i_callback) { callback_ = i_callback; }
protected:
~base() = default;
unsigned char flags_;
int callback_;
};
struct result final
{
void* data{};
int size{};
int type{};
uint64_t call{};
};
static uint64_t register_call();
static void register_callback(base* handler, int callback);
static void unregister_callback(base* handler);
static void register_call_result(uint64_t call, base* result);
static void unregister_call_result(uint64_t call, base* result);
static void return_call(void* data, int size, int type, uint64_t call);
static void run_callbacks();
private:
static uint64_t call_id_;
static std::recursive_mutex mutex_;
static std::map<uint64_t, bool> calls_;
static std::map<uint64_t, base*> result_handlers_;
static std::vector<result> results_;
static std::vector<base*> callback_list_;
};
STEAM_EXPORT bool SteamAPI_RestartAppIfNecessary();
STEAM_EXPORT bool SteamAPI_Init();
STEAM_EXPORT void SteamAPI_RegisterCallResult(callbacks::base* result, uint64_t call);
STEAM_EXPORT void SteamAPI_RegisterCallback(callbacks::base* handler, int callback);
STEAM_EXPORT void SteamAPI_RunCallbacks();
STEAM_EXPORT void SteamAPI_Shutdown();
STEAM_EXPORT void SteamAPI_UnregisterCallResult(callbacks::base* result, const uint64_t call);
STEAM_EXPORT void SteamAPI_UnregisterCallback(callbacks::base* handler);
STEAM_EXPORT const char* SteamAPI_GetSteamInstallPath();
STEAM_EXPORT bool SteamGameServer_Init();
STEAM_EXPORT void SteamGameServer_RunCallbacks();
STEAM_EXPORT void SteamGameServer_Shutdown();
STEAM_EXPORT friends* SteamFriends();
STEAM_EXPORT matchmaking* SteamMatchmaking();
STEAM_EXPORT game_server* SteamGameServer();
STEAM_EXPORT networking* SteamNetworking();
STEAM_EXPORT remote_storage* SteamRemoteStorage();
STEAM_EXPORT user* SteamUser();
STEAM_EXPORT utils* SteamUtils();
STEAM_EXPORT apps* SteamApps();
STEAM_EXPORT user_stats* SteamUserStats();
}