1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
use bitbuffer::{BitRead, LittleEndian}; use crate::{ReadResult, Stream}; #[derive(Debug, Clone)] pub struct VoiceInitMessage { codec: String, quality: u8, sampling_rate: u16, } impl BitRead<'_, LittleEndian> for VoiceInitMessage { fn read(stream: &mut Stream) -> ReadResult<Self> { let codec = stream.read()?; let quality = stream.read()?; let sampling_rate = if quality == 255 { stream.read()? } else if codec == "vaudio_celt" { 11025 } else { 0 }; Ok(VoiceInitMessage { codec, quality, sampling_rate, }) } } #[derive(BitRead, Debug, Clone)] #[endianness = "LittleEndian"] pub struct VoiceDataMessage<'a> { client: u8, proximity: u8, length: u16, #[size = "length"] data: Stream<'a>, } #[derive(Debug, Clone)] pub struct ParseSoundsMessage<'a> { pub reliable: bool, pub num: u8, pub length: u16, pub data: Stream<'a>, } impl<'a> BitRead<'a, LittleEndian> for ParseSoundsMessage<'a> { fn read(stream: &mut Stream<'a>) -> ReadResult<Self> { let reliable = stream.read()?; let num = if reliable { 1u8 } else { stream.read()? }; let length = if reliable { stream.read_sized::<u16>(8)? } else { stream.read()? }; let data = stream.read_sized(length as usize)?; Ok(ParseSoundsMessage { reliable, num, length, data, }) } }