From 833a46544df2ed2a7afdba08ebfe02ed7741d86a Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Tue, 8 Nov 2022 22:48:20 +0300 Subject: net/svc messages --- packets/packet.go | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 packets/packet.go (limited to 'packets/packet.go') diff --git a/packets/packet.go b/packets/packet.go new file mode 100644 index 0000000..23a21e6 --- /dev/null +++ b/packets/packet.go @@ -0,0 +1,84 @@ +package packets + +import ( + "fmt" + + "github.com/pektezol/bitreader" + "github.com/pektezol/demoparser/packets/classes" + "github.com/pektezol/demoparser/packets/messages" +) + +const MSSC = 2 + +func ParsePacket(reader *bitreader.ReaderType) (status int) { + messageType := reader.TryReadInt8() + messageTick := reader.TryReadInt32() + messageSlot := reader.TryReadInt8() + switch messageType { + case 0x01: // TODO: SignOn - Data + signOn := SignOn{ + PacketInfo: classes.ParseCmdInfo(reader, MSSC), + InSequence: int32(reader.TryReadInt32()), + OutSequence: int32(reader.TryReadInt32()), + Size: int32(reader.TryReadInt32()), + } + reader.SkipBytes(int(signOn.Size)) + fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn) + return 1 + case 0x02: // TODO: Packet - Data + packet := Packet{ + PacketInfo: classes.ParseCmdInfo(reader, MSSC), + InSequence: int32(reader.TryReadInt32()), + OutSequence: int32(reader.TryReadInt32()), + Size: int32(reader.TryReadInt32()), + } + packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size))) + fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet) + return 2 + case 0x03: + syncTick := SyncTick{} + fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick) + return 3 + case 0x04: + consoleCmd := ConsoleCmd{ + Size: int32(reader.TryReadInt32()), + } + consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size)) + //fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data) + return 4 + case 0x05: // TODO: UserCmd - Buttons + userCmd := UserCmd{ + Cmd: int32(reader.TryReadInt32()), + Size: int32(reader.TryReadInt32()), + } + userCmd.Data = classes.ParseUserCmdInfo(reader.TryReadBytesToSlice(int(userCmd.Size))) + // fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd) + return 5 + case 0x06: // TODO: DataTables + val := reader.TryReadInt32() + reader.SkipBytes(int(val)) + // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType) + return 6 + case 0x07: + stop := Stop{ + RemainingData: nil, + } + fmt.Printf("[%d] (%d) Stop: %v\n", messageTick, messageType, stop) + return 7 + case 0x08: // TODO: CustomData + reader.SkipBytes(4) + val := reader.TryReadInt32() + reader.SkipBytes(int(val)) + // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType) + return 8 + case 0x09: // TODO: StringTables - Data + stringTables := StringTables{ + Size: int32(reader.TryReadInt32()), + } + stringTables.Data = classes.ParseStringTable(reader.TryReadBytesToSlice(int(stringTables.Size))) + // fmt.Printf("[%d] (%d) StringTables: %v\n", messageTick, messageType, stringTables) + return 9 + default: + return 0 + } +} -- cgit v1.2.3