aboutsummaryrefslogtreecommitdiff
path: root/pkg/packets/packets.go
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2024-06-06 22:24:34 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2024-06-06 22:24:34 +0300
commiteead3c2bd90fa428dca616bc56fcd85f362f4040 (patch)
treeadcf19686e86c2ce91cff67190d258c186e2bd5b /pkg/packets/packets.go
parentchange project name, update to go1.22 (diff)
downloadsdp.go-eead3c2bd90fa428dca616bc56fcd85f362f4040.tar.gz
sdp.go-eead3c2bd90fa428dca616bc56fcd85f362f4040.tar.bz2
sdp.go-eead3c2bd90fa428dca616bc56fcd85f362f4040.zip
change project name, decouple main and parsing entrance
this will make it more like a library, where another project can create Parser struct and call ParseDemos to get all relevant information, and if anyone wants to use executable from this project, the main function works exactly the same
Diffstat (limited to '')
-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}