1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#include <steam_api.h>
#include <steam_gameserver.h>
#include <stdint.h>
struct CallbackData {
int param_size;
void* userdata;
void (*run)(void*, void*, void*);
void (*run_extra)(void*, void*, void*, uint8_t, SteamAPICall_t);
void (*dealloc)(void*, void*);
};
class RustCallbackBase final : CCallbackBase {
public:
RustCallbackBase(uint8 flags, int callback, CallbackData data) : data(data) {
m_nCallbackFlags = flags;
m_iCallback = callback;
}
~RustCallbackBase() {
data.dealloc(this, data.userdata);
}
void Run(void* pvParam) {
data.run(this, data.userdata, pvParam);
}
void Run(void* pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall) {
data.run_extra(this, data.userdata, pvParam, bIOFailure ? 1 : 0, hSteamAPICall);
}
int GetCallbackSizeBytes() {
return data.param_size;
}
private:
CallbackData data;
};
extern "C" {
void* create_rust_callback(uint8 flags, int id, CallbackData data) {
return new RustCallbackBase(flags, id, data);
}
void delete_rust_callback(void* callback) {
RustCallbackBase* cb = static_cast<RustCallbackBase*>(callback);
delete cb;
}
int steam_rust_game_server_init(uint32_t ip, uint16_t steam_port, uint16_t game_port,
uint16_t query_port, EServerMode server_mode, const char* version)
{
return SteamGameServer_Init(ip, steam_port, game_port, query_port, server_mode, version);
}
ISteamClient* steam_rust_get_client() { return SteamClient(); }
ISteamMatchmaking* steam_rust_get_matchmaking() { return SteamMatchmaking(); }
ISteamUtils* steam_rust_get_utils() { return SteamUtils(); }
ISteamApps* steam_rust_get_apps() { return SteamApps(); }
ISteamFriends* steam_rust_get_friends() { return SteamFriends(); }
ISteamUser* steam_rust_get_user() { return SteamUser(); }
ISteamGameServer* steam_rust_get_server() { return SteamGameServer(); }
ISteamApps* steam_rust_get_server_apps() { return SteamGameServerApps(); }
}
|