From 171e350e348afadb55967b9c13d5eadc7f7d2cf4 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Thu, 21 Sep 2023 01:53:59 +0300 Subject: add strings builder, customize ALL outputs (#6) --- pkg/packets/headers.go | 5 ++--- pkg/packets/packets.go | 43 +++++++++++++++++++++++++++++-------------- pkg/packets/types.go | 6 +++--- 3 files changed, 34 insertions(+), 20 deletions(-) (limited to 'pkg/packets') diff --git a/pkg/packets/headers.go b/pkg/packets/headers.go index dbeab87..d92b22d 100644 --- a/pkg/packets/headers.go +++ b/pkg/packets/headers.go @@ -1,9 +1,8 @@ package packets import ( - "fmt" - "github.com/pektezol/bitreader" + "github.com/pektezol/demoparser/pkg/writer" ) type Headers struct { @@ -43,6 +42,6 @@ func ParseHeaders(reader *bitreader.Reader) Headers { if headers.NetworkProtocol != 2001 { panic("this parser only supports demos from portal 2") } - fmt.Printf("Headers: %+v\n", headers) + writer.AppendLine("Headers: %+v", headers) return headers } diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go index 3a01370..33350d5 100644 --- a/pkg/packets/packets.go +++ b/pkg/packets/packets.go @@ -4,6 +4,7 @@ import ( "github.com/pektezol/bitreader" "github.com/pektezol/demoparser/pkg/classes" "github.com/pektezol/demoparser/pkg/messages" + "github.com/pektezol/demoparser/pkg/writer" ) type PacketMessageInfo struct { @@ -23,6 +24,7 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { switch packetType { case 1: // SignOn signOn := SignOn{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "SIGNON", packetType) for count := 0; count < MSSC; count++ { signOn.PacketInfo = append(signOn.PacketInfo, classes.ParseCmdInfo(reader)) } @@ -41,6 +43,7 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { packetData = signOn case 2: // Packet packet := Packet{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "PACKET", packetType) for count := 0; count < MSSC; count++ { packet.PacketInfo = append(packet.PacketInfo, classes.ParseCmdInfo(reader)) } @@ -59,16 +62,18 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { packetData = packet case 3: // SyncTick syncTick := SyncTick{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "SYNCTICK", packetType) packetData = syncTick case 4: // ConsoleCmd - size := reader.TryReadSInt32() - consoleCmd := ConsoleCmd{ - Size: int32(size), - Data: reader.TryReadStringLength(uint64(size)), - } + consoleCmd := ConsoleCmd{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "CONSOLECMD", packetType) + consoleCmd.Size = reader.TryReadSInt32() + consoleCmd.Data = reader.TryReadStringLength(uint64(consoleCmd.Size)) + writer.AppendLine("\t%s", consoleCmd.Data) packetData = consoleCmd case 5: // UserCmd TODO: usercmdinfo refactor userCmd := UserCmd{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "USERCMD", packetType) userCmd.Cmd = int32(reader.TryReadSInt32()) userCmd.Size = int32(reader.TryReadSInt32()) data := reader.TryReadBytesToSlice(uint64(userCmd.Size)) @@ -76,6 +81,7 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { packetData = userCmd case 6: // DataTables TODO: prop stuff dataTables := DataTables{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "DATATABLES", packetType) dataTables.Size = int32(reader.TryReadSInt32()) data := reader.TryReadBytesToSlice(uint64(dataTables.Size)) dataTableReader := bitreader.NewReaderFromBytes(data, true) @@ -84,43 +90,52 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { count++ dataTables.SendTable = append(dataTables.SendTable, classes.ParseSendTable(dataTableReader)) } + writer.AppendLine("\t%d Send Tables:", count) + writer.AppendOutputFromTemp() numOfClasses := dataTableReader.TryReadBits(16) for count = 0; count < int(numOfClasses); count++ { dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, classes.ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) } + writer.AppendLine("\t%d Classes:", count) + writer.AppendOutputFromTemp() packetData = dataTables case 7: // Stop stop := Stop{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "STOP", packetType) if reader.TryReadBool() { stop.RemainingData = reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits())) + writer.AppendLine("\tRemaining Data: %v", stop.RemainingData) } packetData = stop - case 8: // CustomData - customData := CustomData{ - Unknown: int32(reader.TryReadBits(32)), - Size: int32(reader.TryReadBits(32)), - } - if customData.Unknown != 0 || customData.Size == 8 { + case 8: // CustomData TODO: not sar data + customData := CustomData{} + customData.Type = reader.TryReadSInt32() + customData.Size = reader.TryReadSInt32() + if customData.Type != 0 || customData.Size == 8 { // Not SAR data + writer.AppendLine("[%d] %s (%d):", tickNumber, "CUSTOMDATA", packetType) customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size))) + writer.AppendLine("\t%s", customData.Data) packetData = customData break } // SAR data sarData := classes.SarData{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "SARDATA", packetType) data := reader.TryReadBytesToSlice(uint64(customData.Size)) sarReader := bitreader.NewReaderFromBytes(data, true) sarData.ParseSarData(sarReader) packetData = sarData case 9: // StringTables TODO: parsing string table data - stringTables := StringTables{ - Size: int32(reader.TryReadSInt32()), - } + stringTables := StringTables{} + writer.AppendLine("[%d] %s (%d):", tickNumber, "STRINGTABLES", packetType) + stringTables.Size = reader.TryReadSInt32() data := reader.TryReadBytesToSlice(uint64(stringTables.Size)) stringTableReader := bitreader.NewReaderFromBytes(data, true) stringTables.Data = classes.ParseStringTables(stringTableReader) packetData = stringTables default: // invalid + writer.AppendLine("[%d] %s (%d):", tickNumber, "INVALID", packetType) panic("invalid packet type") } return PacketMessageInfo{ diff --git a/pkg/packets/types.go b/pkg/packets/types.go index 6297b01..a2fb78f 100644 --- a/pkg/packets/types.go +++ b/pkg/packets/types.go @@ -42,9 +42,9 @@ type Stop struct { } type CustomData struct { - Unknown int32 - Size int32 - Data string + Type int32 + Size int32 + Data string } type StringTables struct { -- cgit v1.2.3