Crates.io | msq |
lib.rs | msq |
version | 0.2.1 |
source | src |
created_at | 2021-05-05 12:57:46.381991 |
updated_at | 2022-03-19 23:07:54.276735 |
description | Rust library implementation of the legacy Master Server Query Protocol |
homepage | |
repository | https://github.com/nullsystem/msq-rs |
max_upload_size | |
id | 393428 |
size | 49,515 |
Rust library implementation of the legacy Master Server Query Protocol.
Add this to your Cargo.toml
:
[dependencies]
msq = "0.2"
If you want to get straight from the latest master branch:
[dependencies]
msq = { git = "https://github.com/nullsystem/msq-rs.git" }
To get started using msq, see the Quick Start section below and take a look at the documentation (stable).
By default, both async MSQClient
and non-async/blocking MSQClientBlock
are included.
However, if you want to only include one or the other, you could do the following:
For non-async/MSQClientBlock
only:
[dependencies]
msq = { version = "0.2", default-features = false, features = ["non-async"] }
For async/MSQClient
only:
[dependencies]
msq = { version = "0.2", default-features = false, features = ["async"] }
use msq::{MSQClient, Region, Filter};
use std::io::Result;
#[tokio::main]
async fn main() -> Result<()> {
// Startup the client
let mut client = MSQClient::new().await?;
// Connect to the master server
client.connect("hl2master.steampowered.com:27011").await?;
// Maximum amount of servers we wanted to query
client.max_servers_on_query(256);
let servers = client
.query(Region::Europe, // Restrict query to Europe region
Filter::new() // Create a Filter builder
.appid(240) // appid of 240 (CS:S)
.nand() // Start of NAND special filter
.map("de_dust2") // Map is de_dust2
.empty(true) // Server is empty
.end() // End of NAND special filter
.gametype(&vec!["friendlyfire", "alltalk"])).await?;
// nand filter excludes servers that has de_dust2 as
// its map and is empty
// nand and nor are both special filters, both closed by
// using the end method
Ok(())
}
If you don't want to use async, then a blocking version is available. The methods functionalities and names should matches its async counterpart.
use msq::{MSQClientBlock, Region, Filter};
use std::io::Result;
fn main() -> Result<()> {
let mut client = MSQClientBlock::new()?;
client.connect("hl2master.steampowered.com:27011")?;
client.max_servers_on_query(256);
let servers = client
.query(Region::Europe, // Restrict query to Europe region
Filter::new() // Create a Filter builder
.appid(240) // appid of 240 (CS:S)
.nand() // Start of NAND special filter
.map("de_dust2") // Map is de_dust2
.empty(true) // Server is empty
.end() // End of NAND special filter
.gametype(&vec!["friendlyfire", "alltalk"]))?;
Ok(())
}
msq::region
and msq::filter
modules are no longer exposed. Just use
msq::Region
enum and msq::Filter
struct directly.as_string
replaces as_str
in msq::Filter
single_query
method in msq::MSQClient
and msq::MSQClientBlock
to do a
single query in one functionmsq::MSQClientBlock
for a non-async versionasync
and non-async
. Both are enabled by default.msq-rs is released under the MIT License
The following library goes well with this one: