Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
stenzek
GitHub Repository: stenzek/duckstation
Path: blob/master/dep/rcheevos/src/rc_client_external.h
7513 views
1
#ifndef RC_CLIENT_EXTERNAL_H
2
#define RC_CLIENT_EXTERNAL_H
3
4
#include "rc_client.h"
5
6
RC_BEGIN_C_DECLS
7
8
/* NOTE: any function that is passed a callback also needs to be passed a client instance to pass
9
* to the callback, and the external interface has to capture both. */
10
11
typedef void (RC_CCONV *rc_client_external_enable_logging_func_t)(rc_client_t* client, int level, rc_client_message_callback_t callback);
12
typedef void (RC_CCONV *rc_client_external_set_event_handler_func_t)(rc_client_t* client, rc_client_event_handler_t handler);
13
typedef void (RC_CCONV *rc_client_external_set_read_memory_func_t)(rc_client_t* client, rc_client_read_memory_func_t handler);
14
typedef void (RC_CCONV *rc_client_external_set_get_time_millisecs_func_t)(rc_client_t* client, rc_get_time_millisecs_func_t handler);
15
typedef int (RC_CCONV *rc_client_external_can_pause_func_t)(uint32_t* frames_remaining);
16
17
typedef void (RC_CCONV *rc_client_external_set_int_func_t)(int value);
18
typedef int (RC_CCONV *rc_client_external_get_int_func_t)(void);
19
typedef void (RC_CCONV *rc_client_external_set_string_func_t)(const char* value);
20
typedef size_t (RC_CCONV *rc_client_external_copy_string_func_t)(char buffer[], size_t buffer_size);
21
typedef void (RC_CCONV *rc_client_external_action_func_t)(void);
22
23
typedef void (RC_CCONV *rc_client_external_async_handle_func_t)(rc_client_async_handle_t* handle);
24
25
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_login_func_t)(rc_client_t* client,
26
const char* username, const char* pass_token, rc_client_callback_t callback, void* callback_userdata);
27
typedef const rc_client_user_t* (RC_CCONV *rc_client_external_get_user_info_func_t)(void);
28
29
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_identify_and_load_game_func_t)(
30
rc_client_t* client, uint32_t console_id, const char* file_path,
31
const uint8_t* data, size_t data_size, rc_client_callback_t callback, void* callback_userdata);
32
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_load_game_func_t)(rc_client_t* client,
33
const char* hash, rc_client_callback_t callback, void* callback_userdata);
34
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_load_subset_t)(rc_client_t* client,
35
uint32_t subset_id, rc_client_callback_t callback, void* callback_userdata);
36
typedef const rc_client_game_t* (RC_CCONV *rc_client_external_get_game_info_func_t)(void);
37
typedef const rc_client_subset_t* (RC_CCONV *rc_client_external_get_subset_info_func_t)(uint32_t subset_id);
38
typedef void (RC_CCONV* rc_client_external_get_user_subset_summary_func_t)(uint32_t subset_id, rc_client_user_game_summary_t* summary);
39
typedef void (RC_CCONV *rc_client_external_get_user_game_summary_func_t)(rc_client_user_game_summary_t* summary);
40
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_change_media_func_t)(rc_client_t* client, const char* file_path,
41
const uint8_t* data, size_t data_size, rc_client_callback_t callback, void* callback_userdata);
42
typedef void (RC_CCONV* rc_client_external_add_game_hash_func_t)(const char* hash, uint32_t game_id);
43
44
/* NOTE: rc_client_external_create_achievement_list_func_t returns an internal wrapper structure which contains the public list
45
* and a destructor function. */
46
struct rc_client_achievement_list_info_t;
47
typedef struct rc_client_achievement_list_info_t* (RC_CCONV *rc_client_external_create_achievement_list_func_t)(int category, int grouping);
48
typedef const rc_client_achievement_t* (RC_CCONV *rc_client_external_get_achievement_info_func_t)(uint32_t id);
49
typedef const rc_client_achievement_t* (RC_CCONV* rc_client_external_get_next_achievement_info_func_t)(uint32_t id, int grouping);
50
51
/* NOTE: rc_client_external_create_leaderboard_list_func_t returns an internal wrapper structure which contains the public list
52
* and a destructor function. */
53
struct rc_client_leaderboard_list_info_t;
54
typedef struct rc_client_leaderboard_list_info_t* (RC_CCONV *rc_client_external_create_leaderboard_list_func_t)(int grouping);
55
typedef const rc_client_leaderboard_t* (RC_CCONV *rc_client_external_get_leaderboard_info_func_t)(uint32_t id);
56
57
/* NOTE: rc_client_external_begin_fetch_leaderboard_entries_func_t and rc_client_external_begin_fetch_leaderboard_entries_around_user_func_t
58
* pass an internal wrapper structure around the list, which contains the public list and a destructor function. */
59
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_fetch_leaderboard_entries_func_t)(rc_client_t* client,
60
uint32_t leaderboard_id, uint32_t first_entry, uint32_t count,
61
rc_client_fetch_leaderboard_entries_callback_t callback, void* callback_userdata);
62
typedef rc_client_async_handle_t* (RC_CCONV *rc_client_external_begin_fetch_leaderboard_entries_around_user_func_t)(rc_client_t* client,
63
uint32_t leaderboard_id, uint32_t count, rc_client_fetch_leaderboard_entries_callback_t callback, void* callback_userdata);
64
65
/* NOTE: rc_client_external_create_subset_list_func_t returns an internal wrapper structure which contains the public list
66
* and a destructor function. */
67
struct rc_client_subset_list_info_t;
68
typedef struct rc_client_subset_list_info_t* (RC_CCONV* rc_client_external_create_subset_list_func_t)();
69
70
71
typedef size_t (RC_CCONV *rc_client_external_progress_size_func_t)(void);
72
typedef int (RC_CCONV *rc_client_external_serialize_progress_func_t)(uint8_t* buffer, size_t buffer_size);
73
typedef int (RC_CCONV *rc_client_external_deserialize_progress_func_t)(const uint8_t* buffer, size_t buffer_size);
74
75
typedef struct rc_client_external_t
76
{
77
rc_client_external_action_func_t destroy;
78
79
rc_client_external_enable_logging_func_t enable_logging;
80
rc_client_external_set_event_handler_func_t set_event_handler;
81
rc_client_external_set_read_memory_func_t set_read_memory;
82
rc_client_external_set_get_time_millisecs_func_t set_get_time_millisecs;
83
rc_client_external_set_string_func_t set_host;
84
rc_client_external_copy_string_func_t get_user_agent_clause;
85
86
rc_client_external_set_int_func_t set_hardcore_enabled;
87
rc_client_external_get_int_func_t get_hardcore_enabled;
88
rc_client_external_set_int_func_t set_unofficial_enabled;
89
rc_client_external_get_int_func_t get_unofficial_enabled;
90
rc_client_external_set_int_func_t set_encore_mode_enabled;
91
rc_client_external_get_int_func_t get_encore_mode_enabled;
92
rc_client_external_set_int_func_t set_spectator_mode_enabled;
93
rc_client_external_get_int_func_t get_spectator_mode_enabled;
94
95
rc_client_external_async_handle_func_t abort_async;
96
97
rc_client_external_begin_login_func_t begin_login_with_password;
98
rc_client_external_begin_login_func_t begin_login_with_token;
99
rc_client_external_action_func_t logout;
100
rc_client_external_get_user_info_func_t get_user_info;
101
102
rc_client_external_begin_identify_and_load_game_func_t begin_identify_and_load_game;
103
rc_client_external_begin_load_game_func_t begin_load_game;
104
rc_client_external_get_game_info_func_t get_game_info;
105
rc_client_external_begin_load_subset_t begin_load_subset; /* DEPRECATED */
106
rc_client_external_get_subset_info_func_t get_subset_info;
107
rc_client_external_action_func_t unload_game;
108
rc_client_external_get_user_game_summary_func_t get_user_game_summary;
109
rc_client_external_begin_change_media_func_t begin_identify_and_change_media;
110
rc_client_external_begin_load_game_func_t begin_change_media;
111
112
rc_client_external_create_achievement_list_func_t create_achievement_list;
113
rc_client_external_get_int_func_t has_achievements;
114
rc_client_external_get_achievement_info_func_t get_achievement_info;
115
116
rc_client_external_create_leaderboard_list_func_t create_leaderboard_list;
117
rc_client_external_get_int_func_t has_leaderboards;
118
rc_client_external_get_leaderboard_info_func_t get_leaderboard_info;
119
rc_client_external_begin_fetch_leaderboard_entries_func_t begin_fetch_leaderboard_entries;
120
rc_client_external_begin_fetch_leaderboard_entries_around_user_func_t begin_fetch_leaderboard_entries_around_user;
121
122
rc_client_external_copy_string_func_t get_rich_presence_message;
123
rc_client_external_get_int_func_t has_rich_presence;
124
125
rc_client_external_action_func_t do_frame;
126
rc_client_external_action_func_t idle;
127
rc_client_external_get_int_func_t is_processing_required;
128
rc_client_external_can_pause_func_t can_pause;
129
rc_client_external_action_func_t reset;
130
131
rc_client_external_progress_size_func_t progress_size;
132
rc_client_external_serialize_progress_func_t serialize_progress;
133
rc_client_external_deserialize_progress_func_t deserialize_progress;
134
135
/* VERSION 2 */
136
rc_client_external_add_game_hash_func_t add_game_hash;
137
rc_client_external_set_string_func_t load_unknown_game;
138
139
/* VERSION 3 */
140
rc_client_external_get_user_info_func_t get_user_info_v3;
141
rc_client_external_get_game_info_func_t get_game_info_v3;
142
rc_client_external_get_subset_info_func_t get_subset_info_v3;
143
rc_client_external_get_achievement_info_func_t get_achievement_info_v3;
144
rc_client_external_create_achievement_list_func_t create_achievement_list_v3;
145
146
/* VERSION 4 */
147
rc_client_external_set_int_func_t set_allow_background_memory_reads;
148
149
/* VERSION 5 */
150
rc_client_external_get_user_game_summary_func_t get_user_game_summary_v5;
151
rc_client_external_get_user_subset_summary_func_t get_user_subset_summary;
152
153
/* VERSION 6 */
154
rc_client_external_create_subset_list_func_t create_subset_list;
155
156
/* VERSION 7 */
157
rc_client_external_get_next_achievement_info_func_t get_next_achievement_info;
158
159
} rc_client_external_t;
160
161
#define RC_CLIENT_EXTERNAL_VERSION 7
162
163
void rc_client_add_game_hash(rc_client_t* client, const char* hash, uint32_t game_id);
164
void rc_client_load_unknown_game(rc_client_t* client, const char* hash);
165
166
/* conversion support */
167
168
struct rc_client_external_conversions_t;
169
const rc_client_user_t* rc_client_external_convert_v1_user(const rc_client_t* client, const rc_client_user_t* v1_user);
170
const rc_client_game_t* rc_client_external_convert_v1_game(const rc_client_t* client, const rc_client_game_t* v1_game);
171
const rc_client_subset_t* rc_client_external_convert_v1_subset(const rc_client_t* client, const rc_client_subset_t* v1_subset);
172
const rc_client_achievement_t* rc_client_external_convert_v1_achievement(const rc_client_t* client, const rc_client_achievement_t* v1_achievement);
173
rc_client_achievement_list_t* rc_client_external_convert_v1_achievement_list(const rc_client_t* client, rc_client_achievement_list_t* v1_achievement_list);
174
175
RC_END_C_DECLS
176
177
#endif /* RC_CLIENT_EXTERNAL_H */
178
179