No description
Find a file
Cain 66cc39eb26
[Crate] Refactor: Buffer (#62)
* merge: local -> fresh pr

* fix: utf16 bugs + clean up

* docs: buffer

* [feat/buffer] Replaced errors, partial valve protocol ported

* fix: change buffer name + add endian switch

* chore: update module

* refactor: valve_master

* refactor: mc bedrock

* refactor: mc java

* refactor: mc types

* refactor: mc legacy 1.8

* refactor: mc legacy 1.4

* refactor: valve

* refactor: valve types

* refactor: quake

* refactor: mc legacy 1.6

* refactor: gamespy 1

* fix: make switch endian move cursor

* fix: reset cursor on switch

* chore: add switch endian tests

* chore: remove todo comment

* chore: clean up buffer generic types

* refactor: prop len when switching in mc bedrock

* fix: tests and current pos fn

* refactor: ffow

* refactor: jc2mp

* refactor: gs 3

* refactor: gs 2

* fix: mc bedrock prop on move + move data

* fix: mc java lifetime error

* fix: mc legacy 1.6 using pub not pub crate

* fix: quake client lifetime

* fix: quake 2 clippy warning

* fix: valve lifetime issue

* fix: buffer test

* chore: format to keep ci happy

* fix: buffer move_cursor

* fix: quake client

* feat: GameSpy 1 small optimization

* fix: incomplete gamespy 3 fix

* fix: gamespy 3 fix

* fix: minecraft java

* fix: minecraft bedrock

* feat: update the CHANGELOG to mention the buffer rewrite and thank @cainthebest for it

* fix: minecraft legacy 1.6

---------

Co-authored-by: CosminPerRam <cosmin.p@live.com>
2023-07-18 11:46:53 +03:00
.github/workflows [CI] Improve checks (#71) 2023-07-12 23:40:10 +03:00
examples [Games] Add Warsow support. 2023-06-27 01:15:04 +03:00
src [Crate] Refactor: Buffer (#62) 2023-07-18 11:46:53 +03:00
.actrc [CI] Improve checks (#71) 2023-07-12 23:40:10 +03:00
.gitignore [Crate] Add formatting (#22) 2023-03-14 10:31:37 +02:00
.pre-commit-config.yaml [CI] Improve checks (#71) 2023-07-12 23:40:10 +03:00
.rustfmt.toml [Crate] Bump rustfmt version to 1.6.0 (#69) 2023-07-10 18:32:17 +03:00
Cargo.toml [CI] Using recommended CI Cargo audit Github action and update serde (#70) 2023-07-10 17:09:22 +03:00
CHANGELOG.md [Crate] Refactor: Buffer (#62) 2023-07-18 11:46:53 +03:00
GAMES.md [Games] Add Warsow support. 2023-06-27 01:15:04 +03:00
LICENSE.md [Crate] Bump version to 0.2.1. 2023-03-03 18:09:17 +02:00
PROTOCOLS.md [Protocol] Add GameSpy 2 support. (#47) 2023-06-12 19:38:34 +03:00
README.md [Crate] Add documentation for where versions need to be updated (#58) 2023-06-25 16:02:25 +03:00
RESPONSES.md [Crate] Fix response table not showing inner types (#52) 2023-06-16 19:04:34 +03:00
SERVICES.md [Service] Add valve master server query service (#34) 2023-04-28 18:00:04 +03:00
VERSIONS.md [Crate] Bump rustfmt version to 1.6.0 (#69) 2023-07-10 18:32:17 +03:00

rust-GameDig CI Latest Version Crates.io License:MIT

Warning: This project goes through frequent API breaking changes and hasn't been thoroughly tested.

rust-GameDig is a game servers/services query library that fetches the availability and details of those, this library brings what node-GameDig does, to pure Rust!

Community

Checkout the GameDig Community Discord Server here.
Note that it isn't be a replacement for GitHub issues, if you have found a problem within the library or want to request a feature, it's better to do so here rather than on Discord.

Usage

Minimum Supported Rust Version is 1.60.0 and the code is cross-platform.

Pick a game/service/protocol (check the GAMES, SERVICES and PROTOCOLS files to see the currently supported ones), provide the ip and the port (be aware that some game servers use a separate port for the info queries, the port can also be optional if the server is running the default ports) then query on it.

Team Fortress 2 query example:

use gamedig::games::tf2;

fn main() {
    let response = tf2::query(&"127.0.0.1".parse().unwrap(), None); 
        // None is the default port (which is 27015), could also be Some(27015)
    
    match response { // Result type, must check what it is...
        Err(error) => println!("Couldn't query, error: {}", error),
        Ok(r) => println!("{:#?}", r)
    }
}

Response (note that some games have a different structure):

{
  protocol: 17,
  name: "Team Fortress 2 Dedicated Server.",
  map: "ctf_turbine",
  game: "tf2",
  appid: 440,
  players_online: 0,
  players_details: [],
  players_maximum: 69,
  players_bots: 0,
  server_type: Dedicated,
  has_password: false,
  vac_secured: true,
  version: "7638371",
  port: Some(27015),
  steam_id: Some(69753253289735296),
  tv_port: None,
  tv_name: None,
  keywords: Some("alltalk,nocrits"),
  rules: [
    "mp_autoteambalance": "1",
    "mp_maxrounds": "5",
    //....
  ]
}

Want to see more examples? Checkout the examples folder.

Documentation

The documentation is available at docs.rs.
Curious about the history and what changed between versions? Everything is in the CHANGELOG file.

Contributing

If you want see your favorite game/service being supported here, open an issue, and I'll prioritize it (or do a pull request if you want to implement it yourself)!