diff --git a/pdk/pdk.cpp b/pdk/pdk.cpp new file mode 100644 index 00000000..32f000f5 --- /dev/null +++ b/pdk/pdk.cpp @@ -0,0 +1,59 @@ +#include "pdk.h" + +/// +/// Registering from the Maker +/// +/// +/// +/// 0 for success, 1 if failed +int PDK::RegisterInterface(InterfaceMaker interfaceMakePtr, const char* interfaceVersion) +{ + if (interfaceMakePtr == NULL) + return 1; + if (interfaceVersion == NULL) + return 1; + if (!client_known_interfaces.count(interfaceVersion)) + return 1; + interfaceMap.insert(std::make_pair(interfaceMakePtr, interfaceVersion)); + return 0; +} + +/// +/// Unregistering from the Maker +/// +/// +/// 0 for success, 1 if failed +int PDK::UnRegisterInterface(InterfaceMaker interfaceMakePtr) +{ + if (interfaceMakePtr == NULL) + return 1; + + interfaceMap.erase(interfaceMakePtr); + return 0; +} + +void* PDK::MakeInterface(HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char* interfaceVersion) +{ + for (const auto& [key, value] : interfaceMap) + { + if (strstr(interfaceVersion, value) == 0) + { + auto maker = (InterfaceMaker)key; + return maker(hSteamUser, hSteamPipe); + } + } + return nullptr; +} + + +void* TestCreate(HSteamUser hSteamUser, HSteamPipe hSteamPipe) +{ + return nullptr; +} + +void Register() +{ + // Which one should be good? idk + //PDK::RegisterInterface(TestCreate, "STEAMAPPLIST_INTERFACE_VERSION001"); + //PDK::RegisterInterface(&TestCreate, "STEAMAPPLIST_INTERFACE_VERSION001"); +} diff --git a/pdk/pdk.h b/pdk/pdk.h new file mode 100644 index 00000000..983316ce --- /dev/null +++ b/pdk/pdk.h @@ -0,0 +1,20 @@ +#ifndef PDK_INCLUDE_H +#define PDK_INCLUDE_H + +#include "dll/base.h" +#include "dll/client_known_interfaces.h" + +typedef void* (__cdecl* InterfaceMaker)(HSteamUser hSteamUser, HSteamPipe hSteamPipe); + +class PDK +{ + static inline std::map interfaceMap; +public: + + static int RegisterInterface(InterfaceMaker interfaceMakePtr, const char* interfaceVersion); + static int UnRegisterInterface(InterfaceMaker interfaceMakePtr); + static void* MakeInterface(HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char* interfaceVersion); +}; + + +#endif //PDK_INCLUDE_H diff --git a/premake5.lua b/premake5.lua index 2a0684d8..fe54bddc 100644 --- a/premake5.lua +++ b/premake5.lua @@ -197,6 +197,7 @@ local common_include = { 'crash_printer', 'sdk', "overlay_experimental", + "pdk" } local x32_deps_include = { @@ -243,6 +244,8 @@ local common_files = { "helpers/common_helpers.cpp", "helpers/common_helpers/**", -- helpers/dbg_log "helpers/dbg_log.cpp", "helpers/dbg_log/**", + -- pdk + "pdk/**", } local overlay_files = {