mirror of
https://github.com/tribufu/rust-gamedig
synced 2026-06-01 09:42:41 +00:00
Modified public presentation files
This commit is contained in:
parent
c9eb725a51
commit
73c8ade3a2
7 changed files with 77 additions and 27 deletions
|
|
@ -2,13 +2,16 @@
|
||||||
name = "gamedig"
|
name = "gamedig"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["CosminPerRam [cosmin.p@live.com]", "mmorrisontx [https://github.com/mmorrisontx]"]
|
authors = ["CosminPerRam [cosmin.p@live.com]", "node-GameDig [https://github.com/gamedig/node-gamedig]"]
|
||||||
license-file = "LICENSE.md"
|
license-file = "LICENSE.md"
|
||||||
description = "Check out servers with this."
|
description = "Check out servers with this."
|
||||||
homepage = "https://github.com/CosminPerRam/rust-gamedig"
|
homepage = "https://github.com/CosminPerRam/rust-gamedig"
|
||||||
documentation = "https://github.com/CosminPerRam/rust-gamedig"
|
documentation = "https://docs.rs/gamedig/latest/gamedig/"
|
||||||
repository = "https://github.com/CosminPerRam/rust-gamedig"
|
repository = "https://github.com/CosminPerRam/rust-gamedig"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["server", "valve", "games", "checker", "status"]
|
keywords = ["server", "valve", "games", "checker", "status"]
|
||||||
|
|
||||||
|
[package.metadata]
|
||||||
|
msrv = "1.58.1"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
|
||||||
7
GAMES.md
Normal file
7
GAMES.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Supported games:
|
||||||
|
| Type ID | Name | Notes |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| TF2 | Team Fortress 2 | |
|
||||||
|
|
||||||
|
# Planned to add support:
|
||||||
|
All Valve titles.
|
||||||
32
README.md
32
README.md
|
|
@ -1 +1,31 @@
|
||||||
# rust-gamedig
|
# rust-gamedig
|
||||||
|
rust-GameDig is a game server/services query library, capable of querying the status of many games/services, this library brings what [node-GameDig](https://github.com/gamedig/node-gamedig) does, to pure Rust!
|
||||||
|
|
||||||
|
MSRV is `1.58.1` and the code is cross-platform.
|
||||||
|
|
||||||
|
# Example
|
||||||
|
Basic usage of the library is:
|
||||||
|
```rust
|
||||||
|
use gamedig::TF2;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let response = TF2::query("91.216.250.10", None);
|
||||||
|
//query your favorite game/protocol/service, some might come with different parameters
|
||||||
|
//here its just the IP and the port (if None, its gonna be the default from the protocol)
|
||||||
|
|
||||||
|
match response {
|
||||||
|
Err(error) => println!("Couldn't query, error: {error}"),
|
||||||
|
Ok(r) => println!("{:?}", r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
To see more examples, see the [examples](examples) folder.
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
The documentation is available at [docs.rs](https://docs.rs/gamedig/latest/gamedig/).
|
||||||
|
|
||||||
|
# Games List
|
||||||
|
To see the supported games, see [GAMES](GAMES.md).
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
If you want see your favorite game/service being supported here, open an issue (or do a pull request if you want to implement it yourself)!
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use gamedig::TF2;
|
||||||
fn main() {
|
fn main() {
|
||||||
let response = TF2::query("91.216.250.10", None);
|
let response = TF2::query("91.216.250.10", None);
|
||||||
match response {
|
match response {
|
||||||
Err(error) => println!("Couldn't query, error: {}", error),
|
Err(error) => println!("Couldn't query, error: {error}"),
|
||||||
Ok(r) => println!("{:?}", r)
|
Ok(r) => println!("{:?}", r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ pub struct ValveProtocol {
|
||||||
complete_address: String
|
complete_address: String
|
||||||
}
|
}
|
||||||
|
|
||||||
static default_packet_size: usize = 256;
|
static DEFAULT_PACKET_SIZE: usize = 256;
|
||||||
|
|
||||||
impl ValveProtocol {
|
impl ValveProtocol {
|
||||||
fn new(address: &str, port: u16) -> Self {
|
fn new(address: &str, port: u16) -> Self {
|
||||||
|
|
@ -95,11 +95,7 @@ impl ValveProtocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn receive(&self) -> Vec<u8> {
|
pub fn receive(&self, buffer_size: usize) -> Vec<u8> {
|
||||||
self.receive_with_size(64)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn receive_with_size(&self, buffer_size: usize) -> Vec<u8> {
|
|
||||||
let mut buffer: Vec<u8> = vec![0; buffer_size];
|
let mut buffer: Vec<u8> = vec![0; buffer_size];
|
||||||
let (amt, _) = self.socket.recv_from(&mut buffer.as_mut_slice()).unwrap();
|
let (amt, _) = self.socket.recv_from(&mut buffer.as_mut_slice()).unwrap();
|
||||||
buffer[..amt].to_vec()
|
buffer[..amt].to_vec()
|
||||||
|
|
@ -111,11 +107,11 @@ impl ValveProtocol {
|
||||||
let client = ValveProtocol::new(address, port);
|
let client = ValveProtocol::new(address, port);
|
||||||
|
|
||||||
client.do_request(Request::A2sInfo(None), None);
|
client.do_request(Request::A2sInfo(None), None);
|
||||||
let mut buf = client.receive_with_size(default_packet_size);
|
let mut buf = client.receive(DEFAULT_PACKET_SIZE);
|
||||||
|
|
||||||
if buf[4] == 0x41 {
|
if buf[4] == 0x41 {
|
||||||
client.do_request(Request::A2sInfo(Some([buf[5], buf[6], buf[7], buf[8]])), None);
|
client.do_request(Request::A2sInfo(Some([buf[5], buf[6], buf[7], buf[8]])), None);
|
||||||
buf = client.receive_with_size(default_packet_size);
|
buf = client.receive(DEFAULT_PACKET_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("{:x?}", &buf);
|
println!("{:x?}", &buf);
|
||||||
|
|
|
||||||
29
src/utils.rs
29
src/utils.rs
|
|
@ -26,3 +26,32 @@ pub fn combine_eight_u8(a: u8, b: u8, c: u8, d: u8, e: u8, f: u8, g: u8, h: u8)
|
||||||
pub fn get_u64_from_buf(buf: &[u8]) -> u64 {
|
pub fn get_u64_from_buf(buf: &[u8]) -> u64 {
|
||||||
combine_eight_u8(buf[7], buf[6], buf[5], buf[4], buf[3], buf[2], buf[1], buf[0])
|
combine_eight_u8(buf[7], buf[6], buf[5], buf[4], buf[3], buf[2], buf[1], buf[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod utils {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn concat_u8_test() {
|
||||||
|
let a: [u8; 2] = [1, 2];
|
||||||
|
let b: [u8; 2] = [3, 4];
|
||||||
|
let combined = concat_u8(&a, &b);
|
||||||
|
assert_eq!(a[0], combined[0]);
|
||||||
|
assert_eq!(a[1], combined[1]);
|
||||||
|
assert_eq!(b[0], combined[2]);
|
||||||
|
assert_eq!(b[1], combined[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn find_null_in_array_test() {
|
||||||
|
let arr: [u8; 4] = [0x64, 0x32, 0x00, 0x20];
|
||||||
|
assert_eq!(2, find_null_in_array(&arr));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn complete_address_test() {
|
||||||
|
let address = "192.168.0.1";
|
||||||
|
let port = 27015;
|
||||||
|
assert_eq!(complete_address(address, port), "192.168.0.1:27015");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use gamedig::protocols::valve::ValveProtocol;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn tf2() {
|
|
||||||
let response = ValveProtocol::query("5.15.202.107", 27015);
|
|
||||||
match response {
|
|
||||||
Err(_) => println!("fuck"),
|
|
||||||
Ok(r) => println!("{}", r.name)
|
|
||||||
}
|
|
||||||
assert_eq!(4, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue