aboutsummaryrefslogtreecommitdiff
path: root/steamworks-sys/src/lib.cpp
blob: 38701dace446bbde672aee6619343b6e11795be3 (plain) (blame)
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(); }
}