#机制 #查询 #多人 #解析器 #构建器 #数据包 #运行中

openmultiplayer_query

实现了SA:MP的/Open Multiplayer的查询机制所需构建器和解析器,允许开发者从运行中的服务器检索数据

3个版本

0.1.2 2023年12月2日
0.1.1 2023年11月30日
0.1.0 2023年11月30日

1731解析器实现

MIT 许可证

14KB
300 代码行

openmultiplayer-query

ci workflow Crates.io

实现了SA:MP的/Open Multiplayer的查询机制所需构建器和解析器,允许开发者从运行中的服务器检索数据。

目前还不能发送RCON数据包。

安装

cargo添加 openmultiplayer_query

示例

检查 test/build.rstest/parse.rs 以了解如何使用此库。

构建

let mut packet = PacketBuilder::new(Opcode::I, Ipv4Addr::new(127, 0, 0, 1), 7777)?;
let mut rcon_packet = RconPacket::new(Ipv4Addr::new(127, 0, 0, 1), 7777, "changeme", "varlist")?;

解析

use openmultiplayer_query::{Packet, Opcodes};

// Assume you have a UDP socket running
let socket = UdpSocket::bind("0.0.0.0:0")?;

// We'll send a packet to `149.56.84.18:7777`
let address: Ipv4Addr = "149.56.84.18".parse::<Ipv4Addr>().unwrap();
let port = 7777;

let mut packet = PacketBuilder::new(Opcodes::I, address, port)?;
// ...
packet.build()?; // This is needed in order to populate the data buffer with query data.

// Send the packet through the socket.
socket.send_to(packet.get_data().unwrap(), (address, port))?;
let mut recv_buf = [0u8; 2048];
socket.recv(&mut recv_buf)?;
let result: Result<Packet::InformationPacket, _> = (&recv_buf[..]).try_into();
// Use `result` as you please

依赖关系

~4MB
~138K SLoC