#query #steam #server #protocols #async #legacy #valve

msq

Rust 对旧版 Master 服务器查询协议的库实现

4 个版本

0.2.1 2022年3月19日
0.2.0 2021年5月24日
0.1.1 2021年5月5日
0.1.0 2021年5月5日

#646 in 异步

MIT 许可证

40KB
453

msq-rs

Rust 库实现旧版 Master 服务器查询协议

用法

将此内容添加到您的 Cargo.toml

[dependencies]
msq = "0.2"

如果您想直接从最新的主分支获取

[dependencies]
msq = { git = "https://github.com/nullsystem/msq-rs.git" }

要开始使用 msq,请参阅下面的快速入门部分,并查看 文档(稳定版)

功能

默认情况下,包括异步 MSQClient 和非异步/阻塞的 MSQClientBlock。但是,如果您只想包含其中一个,可以执行以下操作

仅针对非异步/MSQClientBlock

[dependencies]
msq = { version = "0.2", default-features = false, features = ["non-async"] }

仅针对异步/MSQClient

[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(())
}

阻塞/非异步版本

如果您不想使用异步,则可使用阻塞版本。其方法和名称应与其异步对应版本匹配。

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(())
}

API 变更

从 v0.1.X 到 v0.2.X

  • 已移除:模块 msq::regionmsq::filter 不再公开。只需直接使用 msq::Region 枚举和 msq::Filter 结构体即可。
  • 替换:在 msq::Filter 中,用 as_string 替换 as_str
  • 新增:在 msq::MSQClientmsq::MSQClientBlock 中新增 single_query 方法,用于在一个函数中执行单个查询
  • 新增:新增了非异步版本的 msq::MSQClientBlock
  • 新增:现在可以定义功能 asyncnon-async。默认情况下都启用。

许可证

msq-rs 采用 MIT 许可证 发布。

依赖项

杂项

以下库与该库配合良好

依赖项

~0–11MB
~77K SLoC