* WIP: Add unreal2 protocol * Add/Update badge * protocols/unreal2: Update doc comments and TODOs * protocols/unreal2: Don't pre-allocate as many bot players * protocols/unreal2: Use "encoding-rs" for decoding unreal2 strings * Add/Update badge * protocols/unreal2: Add constants for player pre-allocation. Also improve some doc comments and update PACKET_SIZE. * protocols/unreal2: Early break when enough players have been parsed Add a fast-path to avoid waiting for packet timeout when we have parsed as many players as specified in the server info packet. * protocols/unreal2: Use HashSet to store mutators * protocols/unreal2: Handle server sending multiple values for a rule * protocols/unreal2: Add GatheringSettings to control what to query GatheringSettings allows skipping querying rules and/or players which can make the query return much faster. This also required moving each individual query into its own helper. * protocols/unreal2: Add more derives to types * protocols/unreal2: Simplify ServerInfo::parse() Co-Authored-By: CosminPerRam <cosmin.p@live.com> * Docs: Add unreal2 protocol documentation I used a website to generate the markdown RESPONSES table, the save file from this website is included to make updating the table easier in the future. https://www.tablesgenerator.com/markdown_tables * Add/Update badge * protocols/unreal2: Use the correct encoding for UCS2 strings * Docs: Remove unnecessary TGN file --------- Co-authored-by: GitHub Action <action@github.com> Co-authored-by: CosminPerRam <cosmin.p@live.com> |
||
|---|---|---|
| .github | ||
| examples | ||
| src | ||
| .actrc | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .rustfmt.toml | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| GAMES.md | ||
| LICENSE.md | ||
| PROTOCOLS.md | ||
| README.md | ||
| RESPONSES.md | ||
| SERVICES.md | ||
| VERSIONS.md | ||
rust-GameDig
The fast library for querying game servers/services.
This library brings what node-GameDig does (and not only), to pure Rust!
Warning: This project goes through frequent API breaking changes and hasn't been thoroughly tested.
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.65.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::teamfortress2;
fn main() {
let response = teamfortress2::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 to 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)!
Before contributing please read CONTRIBUTING.