167 lines
5.4 KiB
C
167 lines
5.4 KiB
C
#ifndef __ACE_SDK_CLIENT_IMPL_H__
|
|
#define __ACE_SDK_CLIENT_IMPL_H__
|
|
|
|
#ifndef _WIN32
|
|
#error ACE Client SDK is only compatible with Windows programs now.
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
#define STRSAFE_NO_DEPRECATE
|
|
#include <strsafe.h>
|
|
#include "ace_sdk_common.h"
|
|
#include "ace_sdk_account.h"
|
|
|
|
struct __AceSdkClientPacket;
|
|
struct __AceSdkClientLightFeaturePacket;
|
|
struct __AceSdkClientLightFeature;
|
|
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientLogInRoutine)(void*, const char*, uint32_t, uint32_t, const char*);
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientLogOutRoutine)(void*);
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientDeinitRoutine)(void*);
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientGetPacketRoutine)(void*, struct __AceSdkClientPacket* out_packet);
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientOnPacketReceivedRoutine)(void*, const uint8_t*, uint32_t);
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientGetLightFeaturePacketRoutine)(void*, struct __AceSdkClientLightFeaturePacket*);
|
|
typedef AceSdkResult(ACE_SDK_CALL* __AceSdkClientOnLightFeatureReceivedRoutine)(void*, const struct __AceSdkClientLightFeature*);
|
|
|
|
typedef struct {
|
|
void* handle_;
|
|
void* deprecated1_;
|
|
__AceSdkClientLogOutRoutine log_out_;
|
|
__AceSdkClientDeinitRoutine deinit_;
|
|
__AceSdkClientGetPacketRoutine get_packet_;
|
|
__AceSdkClientOnPacketReceivedRoutine on_packet_received_;
|
|
__AceSdkClientLogInRoutine log_in_;
|
|
__AceSdkClientGetLightFeaturePacketRoutine get_light_feature_packet_;
|
|
__AceSdkClientOnLightFeatureReceivedRoutine on_light_feature_received_;
|
|
}__AceSdkClientObject;
|
|
|
|
typedef struct {
|
|
const ACE_CHAR* config_path_;
|
|
}__AceSdkClientInitParams;
|
|
|
|
#ifdef _MSC_VER
|
|
__declspec(selectany) __AceSdkClientObject* __ace_sdk_client_object = NULL;
|
|
#else
|
|
__attribute__((weak)) __AceSdkClientObject* __ace_sdk_client_object = NULL;
|
|
#endif
|
|
|
|
#define __ACE_SDK_CLIENT_VERSION 9
|
|
|
|
inline int32_t __ace_sdk_get_exe_mod_path(ACE_CHAR* path, uint32_t len)
|
|
{
|
|
uint32_t ret = GetModuleFileNameW(NULL, path, len);
|
|
if (ret == 0 || ret == len)
|
|
{
|
|
return -1;
|
|
}
|
|
ACE_CHAR* pos = wcsrchr(path, L'\\');
|
|
if (pos == NULL)
|
|
{
|
|
return -1;
|
|
}
|
|
*pos = L'\0';
|
|
return 0;
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_init()
|
|
{
|
|
ACE_CHAR full_path[1024];
|
|
if (__ace_sdk_get_exe_mod_path(full_path, ARRAYSIZE(full_path)) != 0)
|
|
{
|
|
return ACE_SDK_RESULT_CALC_PATH_FAILED;
|
|
}
|
|
|
|
#ifdef _WIN64
|
|
const ACE_CHAR* dll_path = L"\\AntiCheatExpert\\ACE-Base64.dll";
|
|
#else
|
|
const ACE_CHAR* dll_path = L"\\AntiCheatExpert\\x86\\ACE-Base32.dll";
|
|
#endif
|
|
if (FAILED(StringCchCatW(full_path, ARRAYSIZE(full_path), dll_path)))
|
|
{
|
|
return ACE_SDK_RESULT_CALC_PATH_FAILED;
|
|
}
|
|
|
|
int32_t ret = __ace_sdk_load_library(full_path);
|
|
if (ret != 0)
|
|
{
|
|
return ACE_SDK_RESULT_LOAD_LIBRARY_FAILED;
|
|
}
|
|
typedef AceSdkResult(*InitRoutine)(uint32_t, const __AceSdkClientInitParams*, __AceSdkClientObject**);
|
|
InitRoutine init = (InitRoutine)__ace_sdk_get_symbol("InitAceClient5");
|
|
if (init == NULL)
|
|
{
|
|
__ace_sdk_unload_library();
|
|
return ACE_SDK_RESULT_SYMBOL_NOT_FOUND;
|
|
}
|
|
return init(__ACE_SDK_CLIENT_VERSION, NULL, &__ace_sdk_client_object);
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_log_in(const char* account_id, AceSdkAccountType account_type, uint32_t world_id, const char* login_token)
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
return __ace_sdk_client_object->log_in_(__ace_sdk_client_object->handle_, account_id, (uint32_t)account_type, world_id, login_token);
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_log_out()
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
return __ace_sdk_client_object->log_out_(__ace_sdk_client_object->handle_);
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_deinit()
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
AceSdkResult ret = __ace_sdk_client_object->deinit_(__ace_sdk_client_object->handle_);
|
|
__ace_sdk_client_object = NULL;
|
|
return ret;
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_get_packet(struct __AceSdkClientPacket* out_packet)
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
return __ace_sdk_client_object->get_packet_(__ace_sdk_client_object->handle_, out_packet);
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_on_packet_received(const uint8_t* packet, uint32_t len)
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
return __ace_sdk_client_object->on_packet_received_(__ace_sdk_client_object->handle_, packet, len);
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_get_light_feature_packet(struct __AceSdkClientLightFeaturePacket* out_packet)
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
return __ace_sdk_client_object->get_light_feature_packet_(__ace_sdk_client_object->handle_, out_packet);
|
|
}
|
|
|
|
inline AceSdkResult ace_sdk_client_on_light_feature_received(const struct __AceSdkClientLightFeature* light_feature)
|
|
{
|
|
if (__ace_sdk_client_object == NULL)
|
|
{
|
|
return ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED;
|
|
}
|
|
return __ace_sdk_client_object->on_light_feature_received_(__ace_sdk_client_object->handle_, light_feature);
|
|
}
|
|
|
|
#endif
|