Bancho packet reading and writing utilities.
cargo test
cargo bench
```rust use bancho_packets::{PacketReader, PayloadReader};
// Data packets from osu! let data = vec![ 4, 0, 0, 0, 0, 0, 0, 24, 0, 0, 19, 0, 0, 0, 11, 17, 72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 240, 159, 146, 150, 4, 0, 0, 0, 0, 0, 0, 24, 0, 0, 18, 0, 0, 0, 11, 16, 229, 147, 136, 229, 147, 136, 227, 128, 144, 240, 159, 152, 131, 227, 128, 145, 104, 0, 0, 0, 0, 0, 0, 24, 0, 0, 23, 0, 0, 0, 11, 21, 232, 175, 187, 229, 143, 150, 229, 174, 140, 228, 186, 134, 239, 188, 129, 239, 188, 129, 226, 156, 168, ];
// Create reader let mut reader = PacketReader::new(data);
// Read packets while let Some(packet) = reader.next() { print!("{:?}: ", packet.id); match packet.payload { Some(payload) => { // Read payload let mut payloadreader = PayloadReader::new(payload); println!("{:?}", payloadreader.read_string()); }, None => println!("Non-payload"), } } ```
bash
OSU_PING: Non-payload
BANCHO_NOTIFICATION: Some("Hello, World!💖")
OSU_PING: Non-payload
BANCHO_NOTIFICATION: Some("哈哈【😃】")
BANCHO_ACCOUNT_RESTRICTED: Non-payload
BANCHO_NOTIFICATION: Some("读取完了!!✨")
```rust use bancho_packets::{LoginFailed, PacketBuilder, self};
// Single packet let data = banchopackets::loginreply(LoginFailed::InvalidCredentials); let data1 = bancho_packets::notification("hello");
// Multiple packets with Builder let data3 = PacketBuilder::new() .add(banchopackets::loginreply( banchopackets::LoginSuccess::Verified(1009), )) .add(banchopackets::protocolversion(19)) .add(banchopackets::notification("Welcome to Peace!")) .add(banchopackets::mainmenuicon( "https://xxx.png|https://example.com", )) .add(banchopackets::silenceend(0)) .add(banchopackets::channelinfoend()) .write_out();
```
```rust use banchopackets::{PacketId, build, data, outpacket, traits::writing::*};
// Build simple packet let numberdata: i32 = 1; let packet = build!(PacketId::BANCHOMATCHPLAYERSKIPPED, number_data)
// Complex
pub fn userstats(
userid: i32,
action: u8,
info: &str,
beatmapmd5: &str,
mods: u32,
mode: u8,
beatmapid: i32,
rankedscore: i64,
accuracy: f32,
playcount: i32,
totalscore: i64,
rank: i32,
pp: i16,
) -> Vec
```