diff options
Diffstat (limited to 'pkg/packets/packets.go')
| -rw-r--r-- | pkg/packets/packets.go | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go index b1d6a40..06eb48d 100644 --- a/pkg/packets/packets.go +++ b/pkg/packets/packets.go | |||
| @@ -3,7 +3,7 @@ package packets | |||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/classes" | 5 | "github.com/pektezol/demoparser/pkg/classes" |
| 6 | "github.com/pektezol/demoparser/pkg/writer" | 6 | "github.com/pektezol/demoparser/pkg/messages" |
| 7 | ) | 7 | ) |
| 8 | 8 | ||
| 9 | type PacketMessageInfo struct { | 9 | type PacketMessageInfo struct { |
| @@ -18,42 +18,46 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 18 | slotNumber := reader.TryReadUInt8() | 18 | slotNumber := reader.TryReadUInt8() |
| 19 | switch packetType { | 19 | switch packetType { |
| 20 | case 1: // SignOn | 20 | case 1: // SignOn |
| 21 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SIGNON", packetType) | 21 | for count := 0; count < 2; count++ { |
| 22 | signOn := classes.SignOn{} | 22 | reader.SkipBytes(76) |
| 23 | signOn.ParseSignOn(reader) | 23 | } |
| 24 | reader.SkipBytes(8) | ||
| 25 | packetReader := bitreader.NewReaderFromBytes(reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32())), true) | ||
| 26 | for { | ||
| 27 | messageType, err := packetReader.ReadBits(6) | ||
| 28 | if err != nil { | ||
| 29 | break | ||
| 30 | } | ||
| 31 | messages.ParseMessages(messageType, packetReader) | ||
| 32 | } | ||
| 24 | case 2: // Packet | 33 | case 2: // Packet |
| 25 | writer.AppendLine("[%d] %s (%d):", tickNumber, "PACKET", packetType) | 34 | for count := 0; count < 2; count++ { |
| 26 | packet := classes.Packet{} | 35 | reader.SkipBytes(76) |
| 27 | packet.ParsePacket(reader) | 36 | } |
| 37 | reader.SkipBytes(8) | ||
| 38 | reader.TryReadBytesToSlice(uint64(reader.TryReadUInt32())) | ||
| 28 | case 3: // SyncTick | 39 | case 3: // SyncTick |
| 29 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SYNCTICK", packetType) | ||
| 30 | syncTick := classes.SyncTick{} | ||
| 31 | syncTick.ParseSyncTick() | ||
| 32 | case 4: // ConsoleCmd | 40 | case 4: // ConsoleCmd |
| 33 | writer.AppendLine("[%d] %s (%d):", tickNumber, "CONSOLECMD", packetType) | 41 | |
| 34 | consoleCmd := classes.ConsoleCmd{} | 42 | consoleCmd := classes.ConsoleCmd{} |
| 35 | consoleCmd.ParseConsoleCmd(reader) | 43 | consoleCmd.ParseConsoleCmd(reader) |
| 36 | case 5: // UserCmd | 44 | case 5: // UserCmd |
| 37 | writer.AppendLine("[%d] %s (%d):", tickNumber, "USERCMD", packetType) | 45 | |
| 38 | userCmd := classes.UserCmd{} | 46 | userCmd := classes.UserCmd{} |
| 39 | userCmd.ParseUserCmd(reader) | 47 | userCmd.ParseUserCmd(reader) |
| 40 | case 6: // DataTables | 48 | case 6: // DataTables |
| 41 | writer.AppendLine("[%d] %s (%d):", tickNumber, "DATATABLES", packetType) | 49 | reader.SkipBytes(uint64(reader.TryReadUInt32())) |
| 42 | dataTables := classes.DataTables{} | ||
| 43 | dataTables.ParseDataTables(reader) | ||
| 44 | case 7: // Stop | 50 | case 7: // Stop |
| 45 | writer.AppendLine("[%d] %s (%d):", tickNumber, "STOP", packetType) | 51 | if reader.TryReadBool() { |
| 46 | stop := classes.Stop{} | 52 | reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits())) |
| 47 | stop.ParseStop(reader) | 53 | } |
| 48 | case 8: // CustomData TODO: not sar data | 54 | case 8: // CustomData TODO: not sar data |
| 49 | customData := classes.CustomData{} | 55 | customData := classes.CustomData{} |
| 50 | customData.ParseCustomData(reader, tickNumber, packetType) | 56 | customData.ParseCustomData(reader, tickNumber, packetType) |
| 51 | case 9: // StringTables TODO: parsing string table data | 57 | case 9: // StringTables TODO: parsing string table data |
| 52 | writer.AppendLine("[%d] %s (%d):", tickNumber, "STRINGTABLES", packetType) | 58 | reader.SkipBytes(uint64(reader.TryReadUInt32())) |
| 53 | stringTables := classes.StringTables{} | ||
| 54 | stringTables.ParseStringTables(reader) | ||
| 55 | default: // Invalid | 59 | default: // Invalid |
| 56 | writer.AppendLine("[%d] %s (%d):", tickNumber, "INVALID", packetType) | 60 | |
| 57 | panic("invalid packet type") | 61 | panic("invalid packet type") |
| 58 | } | 62 | } |
| 59 | return PacketMessageInfo{ | 63 | return PacketMessageInfo{ |