aboutsummaryrefslogtreecommitdiff
path: root/steamworks-sys
diff options
context:
space:
mode:
authorMatthew Collins <[email protected]>2018-02-28 16:12:31 +0000
committerMatthew Collins <[email protected]>2018-02-28 16:12:31 +0000
commit844887aea84cb17a135d070304726a33f17b30b7 (patch)
treedd26d34956283c9ef261fbae9c7e56c9992ea2ce /steamworks-sys
parentImplement user authentication session methods (diff)
downloadsteamworks-rs-844887aea84cb17a135d070304726a33f17b30b7.tar.xz
steamworks-rs-844887aea84cb17a135d070304726a33f17b30b7.zip
Initial support for servers
Diffstat (limited to 'steamworks-sys')
-rw-r--r--steamworks-sys/Cargo.toml2
-rw-r--r--steamworks-sys/src/lib.cpp24
-rw-r--r--steamworks-sys/src/lib.rs28
3 files changed, 49 insertions, 5 deletions
diff --git a/steamworks-sys/Cargo.toml b/steamworks-sys/Cargo.toml
index db3af3d..d3b22cb 100644
--- a/steamworks-sys/Cargo.toml
+++ b/steamworks-sys/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "steamworks-sys"
-version = "0.1.1"
+version = "0.2.0"
authors = ["Thinkofname"]
build = "build.rs"
description = "Provides raw bindings to the steamworks sdk"
diff --git a/steamworks-sys/src/lib.cpp b/steamworks-sys/src/lib.cpp
index 75c399a..bed54e6 100644
--- a/steamworks-sys/src/lib.cpp
+++ b/steamworks-sys/src/lib.cpp
@@ -1,12 +1,17 @@
#include <steam_api.h>
+#include <steam_gameserver.h>
+#include <stdint.h>
class RustSteamCallback final : CCallbackBase {
public:
RustSteamCallback(int parameter_size, void *userdata,
void (*run_func)(void *, void *), void (*dealloc)(void *),
- int callback_id)
+ int callback_id, int game_server)
: parameter_size(parameter_size), userdata(userdata), run_func(run_func),
dealloc(dealloc) {
+ if (game_server) {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
SteamAPI_RegisterCallback(this, callback_id);
}
~RustSteamCallback() {
@@ -31,9 +36,11 @@ extern "C" void *register_rust_steam_callback(int parameter_size,
void *userdata,
void (*run_func)(void *, void *),
void (*dealloc)(void *),
- int callback_id) {
+ int callback_id,
+ int game_server
+ ) {
return new RustSteamCallback(parameter_size, userdata, run_func, dealloc,
- callback_id);
+ callback_id, game_server);
}
extern "C" void unregister_rust_steam_callback(void *ty) {
@@ -93,6 +100,13 @@ extern "C" void unregister_rust_steam_call_result(void *ty) {
delete cb;
}
+extern "C" 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);
+}
+
extern "C" ISteamClient *steam_rust_get_client() { return SteamClient(); }
extern "C" ISteamMatchmaking *steam_rust_get_matchmaking() {
return SteamMatchmaking();
@@ -100,4 +114,6 @@ extern "C" ISteamMatchmaking *steam_rust_get_matchmaking() {
extern "C" ISteamUtils *steam_rust_get_utils() { return SteamUtils(); }
extern "C" ISteamApps *steam_rust_get_apps() { return SteamApps(); }
extern "C" ISteamFriends *steam_rust_get_friends() { return SteamFriends(); }
-extern "C" ISteamUser *steam_rust_get_user() { return SteamUser(); } \ No newline at end of file
+extern "C" ISteamUser *steam_rust_get_user() { return SteamUser(); }
+extern "C" ISteamGameServer *steam_rust_get_server() { return SteamGameServer(); }
+extern "C" ISteamApps *steam_rust_get_server_apps() { return SteamGameServerApps(); } \ No newline at end of file
diff --git a/steamworks-sys/src/lib.rs b/steamworks-sys/src/lib.rs
index e84848b..42b5049 100644
--- a/steamworks-sys/src/lib.rs
+++ b/steamworks-sys/src/lib.rs
@@ -20,6 +20,8 @@ pub struct ISteamFriends(c_void);
pub struct ISteamMatchmaking(c_void);
#[repr(C)]
pub struct ISteamUser(c_void);
+#[repr(C)]
+pub struct ISteamGameServer(c_void);
pub type HSteamPipe = i32;
pub type HSteamUser = i32;
@@ -110,6 +112,14 @@ pub enum AuthSessionResponse {
}
#[repr(C)]
+pub enum ServerMode {
+ Invalid = 0,
+ NoAuthentication = 1,
+ Authentication = 2,
+ AuthenticationAndSecure = 3,
+}
+
+#[repr(C)]
#[derive(Clone, Copy, Debug, Ord, PartialOrd, Eq, PartialEq)]
pub enum SResult {
Ok = 1,
@@ -235,6 +245,7 @@ extern "C" {
run_func: extern "C" fn (*mut c_void, *mut c_void),
dealloc: extern "C" fn (*mut c_void),
callback_id: c_int,
+ game_server: c_int,
) -> *mut c_void;
pub fn unregister_rust_steam_callback(
ty: *mut c_void,
@@ -257,12 +268,19 @@ extern "C" {
pub fn steam_rust_get_apps() -> *mut ISteamApps;
pub fn steam_rust_get_friends() -> *mut ISteamFriends;
pub fn steam_rust_get_user() -> *mut ISteamUser;
+ pub fn steam_rust_get_server() -> *mut ISteamGameServer;
+ pub fn steam_rust_get_server_apps() -> *mut ISteamApps;
+
+ pub fn steam_rust_game_server_init(ip: u32, steam_port: u16, game_port: u16, query_port: u16, server_mode: ServerMode, version: *const c_char) -> c_int;
//
pub fn SteamAPI_Init() -> u8;
pub fn SteamAPI_Shutdown();
pub fn SteamAPI_RunCallbacks();
+ pub fn SteamGameServer_Shutdown();
+ pub fn SteamGameServer_RunCallbacks();
+
pub fn SteamAPI_ISteamClient_CreateSteamPipe(instance: *mut ISteamClient) -> HSteamPipe;
pub fn SteamAPI_ISteamClient_BReleaseSteamPipe(instance: *mut ISteamClient, pipe: HSteamPipe) -> u8;
pub fn SteamAPI_ISteamClient_ConnectToGlobalUser(instance: *mut ISteamClient, pipe: HSteamPipe) -> HSteamUser;
@@ -303,4 +321,14 @@ extern "C" {
pub fn SteamAPI_ISteamUser_BeginAuthSession(instance: *mut ISteamUser, ticket: *const c_void, ticket_size: *mut u32, steam_id: u64) -> BeginAuthSessionResult;
pub fn SteamAPI_ISteamUser_EndAuthSession(instance: *mut ISteamUser, steam_id: u64);
pub fn SteamAPI_ISteamUser_CancelAuthTicket(instance: *mut ISteamUser, auth_ticket: HAuthTicket);
+
+ pub fn SteamAPI_ISteamGameServer_LogOnAnonymous(instance: *mut ISteamGameServer);
+ pub fn SteamAPI_ISteamGameServer_SetProduct(instance: *mut ISteamGameServer, product: *const c_char);
+ pub fn SteamAPI_ISteamGameServer_SetGameDescription(instance: *mut ISteamGameServer, description: *const c_char);
+ pub fn SteamAPI_ISteamGameServer_SetDedicatedServer(instance: *mut ISteamGameServer, dedicated: u8);
+ pub fn SteamAPI_ISteamGameServer_GetSteamID(instance: *mut ISteamGameServer) -> u64;
+ pub fn SteamAPI_ISteamGameServer_GetAuthSessionTicket(instance: *mut ISteamGameServer, ticket: *mut c_void, max_ticket: c_int, ticket_size: *mut u32) -> HAuthTicket;
+ pub fn SteamAPI_ISteamGameServer_BeginAuthSession(instance: *mut ISteamGameServer, ticket: *const c_void, ticket_size: *mut u32, steam_id: u64) -> BeginAuthSessionResult;
+ pub fn SteamAPI_ISteamGameServer_EndAuthSession(instance: *mut ISteamGameServer, steam_id: u64);
+ pub fn SteamAPI_ISteamGameServer_CancelAuthTicket(instance: *mut ISteamGameServer, auth_ticket: HAuthTicket);
}