1
0
Fork 0
mirror of https://github.com/Detanup01/gbe_fork.git synced 2025-06-07 09:45:55 +02:00
gbe_fork/pdk/pdk.cpp

75 lines
1.7 KiB
C++

#include "pdk.h"
#include "dll/client_known_interfaces.h"
typedef void (*__cdecl PluginCall)();
void PDK::LoadPlugin(void* handle)
{
#ifdef __WINDOWS__
HMODULE mod = reinterpret_cast<HMODULE>(handle);
PluginCall load = (PluginCall)GetProcAddress(mod, "GBE_Load");
#else
PluginCall load = (PluginCall)dlsym(mod, "GBE_Load");
#endif
if (load == NULL)
{
return;
}
load();
PRINT_DEBUG("Loaded plugin file");
}
void PDK::UnLoadPlugin(void* handle)
{
#ifdef __WINDOWS__
HMODULE mod = reinterpret_cast<HMODULE>(handle);
PluginCall load = (PluginCall)GetProcAddress(mod, "GBE_UnLoad");
#else
PluginCall load = (PluginCall)dlsym(mod, "GBE_UnLoad");
#endif
if (load == NULL)
{
return;
}
load();
PRINT_DEBUG("Loaded plugin file");
}
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((void*)interfaceMakePtr, interfaceVersion));
return 0;
}
int PDK::UnRegisterInterface(InterfaceMaker interfaceMakePtr)
{
if (interfaceMakePtr == NULL)
return 1;
interfaceMap.erase((void*)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;
}
int PDK::GetPDKVersion()
{
return 1;
}