Path: blob/master/dep/rcheevos/src/rc_client_external.h
7513 views
#ifndef RC_CLIENT_EXTERNAL_H1#define RC_CLIENT_EXTERNAL_H23#include "rc_client.h"45RC_BEGIN_C_DECLS67/* NOTE: any function that is passed a callback also needs to be passed a client instance to pass8* to the callback, and the external interface has to capture both. */910typedef void (RC_CCONV *rc_client_external_enable_logging_func_t)(rc_client_t* client, int level, rc_client_message_callback_t callback);11typedef void (RC_CCONV *rc_client_external_set_event_handler_func_t)(rc_client_t* client, rc_client_event_handler_t handler);12typedef void (RC_CCONV *rc_client_external_set_read_memory_func_t)(rc_client_t* client, rc_client_read_memory_func_t handler);13typedef void (RC_CCONV *rc_client_external_set_get_time_millisecs_func_t)(rc_client_t* client, rc_get_time_millisecs_func_t handler);14typedef int (RC_CCONV *rc_client_external_can_pause_func_t)(uint32_t* frames_remaining);1516typedef void (RC_CCONV *rc_client_external_set_int_func_t)(int value);17typedef int (RC_CCONV *rc_client_external_get_int_func_t)(void);18typedef void (RC_CCONV *rc_client_external_set_string_func_t)(const char* value);19typedef size_t (RC_CCONV *rc_client_external_copy_string_func_t)(char buffer[], size_t buffer_size);20typedef void (RC_CCONV *rc_client_external_action_func_t)(void);2122typedef void (RC_CCONV *rc_client_external_async_handle_func_t)(rc_client_async_handle_t* handle);2324typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_login_func_t)(rc_client_t* client,25const char* username, const char* pass_token, rc_client_callback_t callback, void* callback_userdata);26typedef const rc_client_user_t* (RC_CCONV *rc_client_external_get_user_info_func_t)(void);2728typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_identify_and_load_game_func_t)(29rc_client_t* client, uint32_t console_id, const char* file_path,30const uint8_t* data, size_t data_size, rc_client_callback_t callback, void* callback_userdata);31typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_load_game_func_t)(rc_client_t* client,32const char* hash, rc_client_callback_t callback, void* callback_userdata);33typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_load_subset_t)(rc_client_t* client,34uint32_t subset_id, rc_client_callback_t callback, void* callback_userdata);35typedef const rc_client_game_t* (RC_CCONV *rc_client_external_get_game_info_func_t)(void);36typedef const rc_client_subset_t* (RC_CCONV *rc_client_external_get_subset_info_func_t)(uint32_t subset_id);37typedef void (RC_CCONV* rc_client_external_get_user_subset_summary_func_t)(uint32_t subset_id, rc_client_user_game_summary_t* summary);38typedef void (RC_CCONV *rc_client_external_get_user_game_summary_func_t)(rc_client_user_game_summary_t* summary);39typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_change_media_func_t)(rc_client_t* client, const char* file_path,40const uint8_t* data, size_t data_size, rc_client_callback_t callback, void* callback_userdata);41typedef void (RC_CCONV* rc_client_external_add_game_hash_func_t)(const char* hash, uint32_t game_id);4243/* NOTE: rc_client_external_create_achievement_list_func_t returns an internal wrapper structure which contains the public list44* and a destructor function. */45struct rc_client_achievement_list_info_t;46typedef struct rc_client_achievement_list_info_t* (RC_CCONV *rc_client_external_create_achievement_list_func_t)(int category, int grouping);47typedef const rc_client_achievement_t* (RC_CCONV *rc_client_external_get_achievement_info_func_t)(uint32_t id);48typedef const rc_client_achievement_t* (RC_CCONV* rc_client_external_get_next_achievement_info_func_t)(uint32_t id, int grouping);4950/* NOTE: rc_client_external_create_leaderboard_list_func_t returns an internal wrapper structure which contains the public list51* and a destructor function. */52struct rc_client_leaderboard_list_info_t;53typedef struct rc_client_leaderboard_list_info_t* (RC_CCONV *rc_client_external_create_leaderboard_list_func_t)(int grouping);54typedef const rc_client_leaderboard_t* (RC_CCONV *rc_client_external_get_leaderboard_info_func_t)(uint32_t id);5556/* NOTE: rc_client_external_begin_fetch_leaderboard_entries_func_t and rc_client_external_begin_fetch_leaderboard_entries_around_user_func_t57* pass an internal wrapper structure around the list, which contains the public list and a destructor function. */58typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_fetch_leaderboard_entries_func_t)(rc_client_t* client,59uint32_t leaderboard_id, uint32_t first_entry, uint32_t count,60rc_client_fetch_leaderboard_entries_callback_t callback, void* callback_userdata);61typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_fetch_leaderboard_entries_around_user_func_t)(rc_client_t* client,62uint32_t leaderboard_id, uint32_t count, rc_client_fetch_leaderboard_entries_callback_t callback, void* callback_userdata);6364/* NOTE: rc_client_external_create_subset_list_func_t returns an internal wrapper structure which contains the public list65* and a destructor function. */66struct rc_client_subset_list_info_t;67typedef struct rc_client_subset_list_info_t* (RC_CCONV* rc_client_external_create_subset_list_func_t)();686970typedef size_t (RC_CCONV *rc_client_external_progress_size_func_t)(void);71typedef int (RC_CCONV *rc_client_external_serialize_progress_func_t)(uint8_t* buffer, size_t buffer_size);72typedef int (RC_CCONV *rc_client_external_deserialize_progress_func_t)(const uint8_t* buffer, size_t buffer_size);7374typedef struct rc_client_external_t75{76rc_client_external_action_func_t destroy;7778rc_client_external_enable_logging_func_t enable_logging;79rc_client_external_set_event_handler_func_t set_event_handler;80rc_client_external_set_read_memory_func_t set_read_memory;81rc_client_external_set_get_time_millisecs_func_t set_get_time_millisecs;82rc_client_external_set_string_func_t set_host;83rc_client_external_copy_string_func_t get_user_agent_clause;8485rc_client_external_set_int_func_t set_hardcore_enabled;86rc_client_external_get_int_func_t get_hardcore_enabled;87rc_client_external_set_int_func_t set_unofficial_enabled;88rc_client_external_get_int_func_t get_unofficial_enabled;89rc_client_external_set_int_func_t set_encore_mode_enabled;90rc_client_external_get_int_func_t get_encore_mode_enabled;91rc_client_external_set_int_func_t set_spectator_mode_enabled;92rc_client_external_get_int_func_t get_spectator_mode_enabled;9394rc_client_external_async_handle_func_t abort_async;9596rc_client_external_begin_login_func_t begin_login_with_password;97rc_client_external_begin_login_func_t begin_login_with_token;98rc_client_external_action_func_t logout;99rc_client_external_get_user_info_func_t get_user_info;100101rc_client_external_begin_identify_and_load_game_func_t begin_identify_and_load_game;102rc_client_external_begin_load_game_func_t begin_load_game;103rc_client_external_get_game_info_func_t get_game_info;104rc_client_external_begin_load_subset_t begin_load_subset; /* DEPRECATED */105rc_client_external_get_subset_info_func_t get_subset_info;106rc_client_external_action_func_t unload_game;107rc_client_external_get_user_game_summary_func_t get_user_game_summary;108rc_client_external_begin_change_media_func_t begin_identify_and_change_media;109rc_client_external_begin_load_game_func_t begin_change_media;110111rc_client_external_create_achievement_list_func_t create_achievement_list;112rc_client_external_get_int_func_t has_achievements;113rc_client_external_get_achievement_info_func_t get_achievement_info;114115rc_client_external_create_leaderboard_list_func_t create_leaderboard_list;116rc_client_external_get_int_func_t has_leaderboards;117rc_client_external_get_leaderboard_info_func_t get_leaderboard_info;118rc_client_external_begin_fetch_leaderboard_entries_func_t begin_fetch_leaderboard_entries;119rc_client_external_begin_fetch_leaderboard_entries_around_user_func_t begin_fetch_leaderboard_entries_around_user;120121rc_client_external_copy_string_func_t get_rich_presence_message;122rc_client_external_get_int_func_t has_rich_presence;123124rc_client_external_action_func_t do_frame;125rc_client_external_action_func_t idle;126rc_client_external_get_int_func_t is_processing_required;127rc_client_external_can_pause_func_t can_pause;128rc_client_external_action_func_t reset;129130rc_client_external_progress_size_func_t progress_size;131rc_client_external_serialize_progress_func_t serialize_progress;132rc_client_external_deserialize_progress_func_t deserialize_progress;133134/* VERSION 2 */135rc_client_external_add_game_hash_func_t add_game_hash;136rc_client_external_set_string_func_t load_unknown_game;137138/* VERSION 3 */139rc_client_external_get_user_info_func_t get_user_info_v3;140rc_client_external_get_game_info_func_t get_game_info_v3;141rc_client_external_get_subset_info_func_t get_subset_info_v3;142rc_client_external_get_achievement_info_func_t get_achievement_info_v3;143rc_client_external_create_achievement_list_func_t create_achievement_list_v3;144145/* VERSION 4 */146rc_client_external_set_int_func_t set_allow_background_memory_reads;147148/* VERSION 5 */149rc_client_external_get_user_game_summary_func_t get_user_game_summary_v5;150rc_client_external_get_user_subset_summary_func_t get_user_subset_summary;151152/* VERSION 6 */153rc_client_external_create_subset_list_func_t create_subset_list;154155/* VERSION 7 */156rc_client_external_get_next_achievement_info_func_t get_next_achievement_info;157158} rc_client_external_t;159160#define RC_CLIENT_EXTERNAL_VERSION 7161162void rc_client_add_game_hash(rc_client_t* client, const char* hash, uint32_t game_id);163void rc_client_load_unknown_game(rc_client_t* client, const char* hash);164165/* conversion support */166167struct rc_client_external_conversions_t;168const rc_client_user_t* rc_client_external_convert_v1_user(const rc_client_t* client, const rc_client_user_t* v1_user);169const rc_client_game_t* rc_client_external_convert_v1_game(const rc_client_t* client, const rc_client_game_t* v1_game);170const rc_client_subset_t* rc_client_external_convert_v1_subset(const rc_client_t* client, const rc_client_subset_t* v1_subset);171const rc_client_achievement_t* rc_client_external_convert_v1_achievement(const rc_client_t* client, const rc_client_achievement_t* v1_achievement);172rc_client_achievement_list_t* rc_client_external_convert_v1_achievement_list(const rc_client_t* client, rc_client_achievement_list_t* v1_achievement_list);173174RC_END_C_DECLS175176#endif /* RC_CLIENT_EXTERNAL_H */177178179