aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/packets/packets.go104
1 files changed, 71 insertions, 33 deletions
diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go
index b1d6a40..1bf3f57 100644
--- a/pkg/packets/packets.go
+++ b/pkg/packets/packets.go
@@ -2,63 +2,101 @@ package packets
2 2
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/classes" 5 "github.com/pektezol/sdp.go/pkg/classes"
6 "github.com/pektezol/demoparser/pkg/writer" 6 "github.com/pektezol/sdp.go/pkg/writer"
7) 7)
8 8
9type PacketMessageInfo struct { 9type MessageType uint8
10 PacketType uint8 10
11const (
12 SignOn MessageType = iota + 1
13 Packet
14 SyncTick
15 ConsoleCmd
16 UserCmd
17 DataTables
18 Stop
19 CustomData
20 StringTables
21)
22
23type Message struct {
24 PacketType MessageType
11 TickNumber int32 25 TickNumber int32
12 SlotNumber uint8 26 SlotNumber uint8
27 Data any
13} 28}
14 29
15func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { 30func ParseMessage(reader *bitreader.Reader) Message {
16 packetType := reader.TryReadUInt8() 31 message := Message{
17 tickNumber := reader.TryReadSInt32() 32 PacketType: MessageType(reader.TryReadUInt8()),
18 slotNumber := reader.TryReadUInt8() 33 TickNumber: reader.TryReadSInt32(),
19 switch packetType { 34 SlotNumber: reader.TryReadUInt8(),
20 case 1: // SignOn 35 }
21 writer.AppendLine("[%d] %s (%d):", tickNumber, "SIGNON", packetType) 36 writer.AppendLine("[%d] %s (%d):", message.TickNumber, message.PacketType.String(), message.PacketType)
37 switch message.PacketType {
38 case SignOn:
22 signOn := classes.SignOn{} 39 signOn := classes.SignOn{}
23 signOn.ParseSignOn(reader) 40 signOn.ParseSignOn(reader)
24 case 2: // Packet 41 message.Data = signOn
25 writer.AppendLine("[%d] %s (%d):", tickNumber, "PACKET", packetType) 42 case Packet:
26 packet := classes.Packet{} 43 packet := classes.Packet{}
27 packet.ParsePacket(reader) 44 packet.ParsePacket(reader)
28 case 3: // SyncTick 45 message.Data = packet
29 writer.AppendLine("[%d] %s (%d):", tickNumber, "SYNCTICK", packetType) 46 case SyncTick:
30 syncTick := classes.SyncTick{} 47 syncTick := classes.SyncTick{}
31 syncTick.ParseSyncTick() 48 syncTick.ParseSyncTick()
32 case 4: // ConsoleCmd 49 message.Data = syncTick
33 writer.AppendLine("[%d] %s (%d):", tickNumber, "CONSOLECMD", packetType) 50 case ConsoleCmd:
34 consoleCmd := classes.ConsoleCmd{} 51 consoleCmd := classes.ConsoleCmd{}
35 consoleCmd.ParseConsoleCmd(reader) 52 consoleCmd.ParseConsoleCmd(reader)
36 case 5: // UserCmd 53 message.Data = consoleCmd
37 writer.AppendLine("[%d] %s (%d):", tickNumber, "USERCMD", packetType) 54 case UserCmd:
38 userCmd := classes.UserCmd{} 55 userCmd := classes.UserCmd{}
39 userCmd.ParseUserCmd(reader) 56 userCmd.ParseUserCmd(reader)
40 case 6: // DataTables 57 message.Data = userCmd
41 writer.AppendLine("[%d] %s (%d):", tickNumber, "DATATABLES", packetType) 58 case DataTables:
42 dataTables := classes.DataTables{} 59 dataTables := classes.DataTables{}
43 dataTables.ParseDataTables(reader) 60 dataTables.ParseDataTables(reader)
44 case 7: // Stop 61 message.Data = dataTables
45 writer.AppendLine("[%d] %s (%d):", tickNumber, "STOP", packetType) 62 case Stop:
46 stop := classes.Stop{} 63 stop := classes.Stop{}
47 stop.ParseStop(reader) 64 stop.ParseStop(reader)
48 case 8: // CustomData TODO: not sar data 65 message.Data = stop
66 case CustomData: // TODO: not sar data
49 customData := classes.CustomData{} 67 customData := classes.CustomData{}
50 customData.ParseCustomData(reader, tickNumber, packetType) 68 customData.ParseCustomData(reader, message.TickNumber, uint8(message.PacketType))
51 case 9: // StringTables TODO: parsing string table data 69 message.Data = customData
52 writer.AppendLine("[%d] %s (%d):", tickNumber, "STRINGTABLES", packetType) 70 case StringTables: // TODO: parsing string table data
53 stringTables := classes.StringTables{} 71 stringTables := classes.StringTables{}
54 stringTables.ParseStringTables(reader) 72 stringTables.ParseStringTables(reader)
55 default: // Invalid 73 message.Data = stringTables
56 writer.AppendLine("[%d] %s (%d):", tickNumber, "INVALID", packetType) 74 default:
57 panic("invalid packet type") 75 panic("invalid packet type")
58 } 76 }
59 return PacketMessageInfo{ 77 return message
60 PacketType: packetType, 78}
61 TickNumber: tickNumber, 79
62 SlotNumber: slotNumber, 80func (t MessageType) String() string {
81 switch t {
82 case SignOn:
83 return "SIGNON"
84 case Packet:
85 return "PACKET"
86 case SyncTick:
87 return "SYNCTICK"
88 case ConsoleCmd:
89 return "CONSOLECMD"
90 case UserCmd:
91 return "USERCMD"
92 case DataTables:
93 return "DATATABLES"
94 case Stop:
95 return "STOP"
96 case CustomData:
97 return "CUSTOMDATA"
98 case StringTables:
99 return "STRINGTABLES"
63 } 100 }
101 return "INVALID"
64} 102}