mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 10:14:06 +02:00
packet write
This commit is contained in:
parent
9b9a6fc95c
commit
843edccf95
1 changed files with 33 additions and 1 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use bitbuffer::{BitRead, BitWrite};
|
||||
use bitbuffer::{BitRead, BitWrite, BitWriteStream, LittleEndian};
|
||||
use num_enum::TryFromPrimitive;
|
||||
|
||||
use crate::{Parse, ParserState, Result, Stream};
|
||||
|
|
@ -10,6 +10,7 @@ use self::stop::StopPacket;
|
|||
use self::stringtable::StringTablePacket;
|
||||
use self::synctick::SyncTickPacket;
|
||||
use self::usercmd::UserCmdPacket;
|
||||
use crate::demo::parser::Encode;
|
||||
|
||||
pub mod consolecmd;
|
||||
pub mod datatable;
|
||||
|
|
@ -45,6 +46,21 @@ pub enum PacketType {
|
|||
StringTables = 8,
|
||||
}
|
||||
|
||||
impl Packet<'_> {
|
||||
pub fn packet_type(&self) -> PacketType {
|
||||
match self {
|
||||
Packet::Sigon(_) => PacketType::Sigon,
|
||||
Packet::Message(_) => PacketType::Message,
|
||||
Packet::SyncTick(_) => PacketType::SyncTick,
|
||||
Packet::ConsoleCmd(_) => PacketType::ConsoleCmd,
|
||||
Packet::UserCmd(_) => PacketType::UserCmd,
|
||||
Packet::DataTables(_) => PacketType::DataTables,
|
||||
Packet::Stop(_) => PacketType::Stop,
|
||||
Packet::StringTables(_) => PacketType::StringTables,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Parse<'a> for Packet<'a> {
|
||||
fn parse(stream: &mut Stream<'a>, state: &ParserState) -> Result<Self> {
|
||||
let packet_type = PacketType::read(stream)?;
|
||||
|
|
@ -62,3 +78,19 @@ impl<'a> Parse<'a> for Packet<'a> {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Encode for Packet<'_> {
|
||||
fn encode(&self, stream: &mut BitWriteStream<LittleEndian>, state: &ParserState) -> Result<()> {
|
||||
self.packet_type().write(stream)?;
|
||||
match self {
|
||||
Packet::Sigon(inner) => inner.encode(stream, state),
|
||||
Packet::Message(inner) => inner.encode(stream, state),
|
||||
Packet::SyncTick(inner) => inner.encode(stream, state),
|
||||
Packet::ConsoleCmd(inner) => inner.encode(stream, state),
|
||||
Packet::UserCmd(inner) => inner.encode(stream, state),
|
||||
Packet::DataTables(inner) => inner.encode(stream, state),
|
||||
Packet::Stop(inner) => inner.encode(stream, state),
|
||||
Packet::StringTables(inner) => inner.encode(stream, state),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue