1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 10:14:06 +02:00

userinfo encode

This commit is contained in:
Robin Appelman 2021-07-21 19:48:38 +02:00
commit d3cbe134bc

View file

@ -1,12 +1,18 @@
use crate::demo::message::packetentities::EntityId; use crate::demo::message::packetentities::EntityId;
use crate::demo::packet::stringtable::{ExtraData, StringTableEntry};
use crate::demo::parser::gamestateanalyser::UserId; use crate::demo::parser::gamestateanalyser::UserId;
use crate::{ReadResult, Stream}; use crate::{ReadResult, Stream};
use bitbuffer::{
BitReadBuffer, BitReadStream, BitWrite, BitWriteSized, BitWriteStream, LittleEndian,
};
#[derive(Clone, Debug)]
pub struct UserInfo { pub struct UserInfo {
pub steam_id: String, pub steam_id: String,
pub user_id: UserId, pub user_id: UserId,
pub entity_id: EntityId, pub entity_id: EntityId,
pub name: String, pub name: String,
pub rest_data: Vec<u8>,
} }
impl UserInfo { impl UserInfo {
@ -19,7 +25,9 @@ impl UserInfo {
.read_sized(32) .read_sized(32)
.unwrap_or_else(|_| "Malformed Name".into()); .unwrap_or_else(|_| "Malformed Name".into());
let user_id: UserId = data.read::<u32>()?.into(); let user_id: UserId = data.read::<u32>()?.into();
let steam_id: String = data.read()?; let steam_id: String = data.read_sized(32)?;
let rest_data = data.read_sized(data.bits_left() / 8)?;
match text match text
.map(|text| text.parse::<u32>().map(|id| (id + 1).into())) .map(|text| text.parse::<u32>().map(|id| (id + 1).into()))
@ -30,6 +38,7 @@ impl UserInfo {
user_id, user_id,
entity_id, entity_id,
name, name,
rest_data,
})), })),
_ => Ok(None), _ => Ok(None),
} }
@ -37,4 +46,23 @@ impl UserInfo {
Ok(None) Ok(None)
} }
} }
pub fn encode_to_string_table(&self) -> ReadResult<StringTableEntry<'static>> {
let text = format!("{}", self.entity_id);
let mut extra_data = Vec::with_capacity(128);
{
let mut stream = BitWriteStream::new(&mut extra_data, LittleEndian);
self.name.write_sized(&mut stream, 32)?;
(self.user_id.0 as u32).write(&mut stream)?;
self.steam_id.write_sized(&mut stream, 32)?;
self.rest_data.write(&mut stream)?;
}
Ok(StringTableEntry {
text: Some(text.into()),
extra_data: Some(ExtraData::new(BitReadStream::new(
BitReadBuffer::new_owned(extra_data, LittleEndian),
))),
})
}
} }