aboutsummaryrefslogtreecommitdiff
path: root/pkg/packets/packets.go
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2024-06-15 13:58:30 +0300
committerGitHub <noreply@github.com>2024-06-15 13:58:30 +0300
commit77e4b066cb8d506b4bc944ab4eb2d6e4679e2202 (patch)
tree1d549eca619ed36cb881e487cb054c4643ac8376 /pkg/packets/packets.go
parentchange project name to sdp.go (diff)
downloadsdp.go-77e4b066cb8d506b4bc944ab4eb2d6e4679e2202.tar.gz
sdp.go-77e4b066cb8d506b4bc944ab4eb2d6e4679e2202.tar.bz2
sdp.go-77e4b066cb8d506b4bc944ab4eb2d6e4679e2202.zip
enable multithreading with goroutines (#20)
Diffstat (limited to 'pkg/packets/packets.go')
-rw-r--r--pkg/packets/packets.go89
1 files changed, 22 insertions, 67 deletions
diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go
index 1bf3f57..6ae8a44 100644
--- a/pkg/packets/packets.go
+++ b/pkg/packets/packets.go
@@ -3,100 +3,55 @@ package packets
3import ( 3import (
4 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
5 "github.com/pektezol/sdp.go/pkg/classes" 5 "github.com/pektezol/sdp.go/pkg/classes"
6 "github.com/pektezol/sdp.go/pkg/writer" 6 "github.com/pektezol/sdp.go/pkg/types"
7) 7)
8 8
9type MessageType uint8 9func ParseMessage(reader *bitreader.Reader, demo *types.Demo) types.Message {
10 10 message := types.Message{
11const ( 11 PacketType: types.MessageType(reader.TryReadUInt8()),
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
25 TickNumber int32
26 SlotNumber uint8
27 Data any
28}
29
30func ParseMessage(reader *bitreader.Reader) Message {
31 message := Message{
32 PacketType: MessageType(reader.TryReadUInt8()),
33 TickNumber: reader.TryReadSInt32(), 12 TickNumber: reader.TryReadSInt32(),
34 SlotNumber: reader.TryReadUInt8(), 13 SlotNumber: reader.TryReadUInt8(),
35 } 14 }
36 writer.AppendLine("[%d] %s (%d):", message.TickNumber, message.PacketType.String(), message.PacketType) 15 demo.Writer.AppendLine("[%d] %s (%d):", message.TickNumber, message.PacketType.String(), message.PacketType)
37 switch message.PacketType { 16 switch message.PacketType {
38 case SignOn: 17 case types.SignOn:
39 signOn := classes.SignOn{} 18 signOn := classes.SignOn{}
40 signOn.ParseSignOn(reader) 19 signOn.ParseSignOn(reader, demo)
41 message.Data = signOn 20 message.Data = signOn
42 case Packet: 21 case types.Packet:
43 packet := classes.Packet{} 22 packet := classes.Packet{}
44 packet.ParsePacket(reader) 23 packet.ParsePacket(reader, demo)
45 message.Data = packet 24 message.Data = packet
46 case SyncTick: 25 case types.SyncTick:
47 syncTick := classes.SyncTick{} 26 syncTick := classes.SyncTick{}
48 syncTick.ParseSyncTick() 27 syncTick.ParseSyncTick()
49 message.Data = syncTick 28 message.Data = syncTick
50 case ConsoleCmd: 29 case types.ConsoleCmd:
51 consoleCmd := classes.ConsoleCmd{} 30 consoleCmd := classes.ConsoleCmd{}
52 consoleCmd.ParseConsoleCmd(reader) 31 consoleCmd.ParseConsoleCmd(reader, demo)
53 message.Data = consoleCmd 32 message.Data = consoleCmd
54 case UserCmd: 33 case types.UserCmd:
55 userCmd := classes.UserCmd{} 34 userCmd := classes.UserCmd{}
56 userCmd.ParseUserCmd(reader) 35 userCmd.ParseUserCmd(reader, demo)
57 message.Data = userCmd 36 message.Data = userCmd
58 case DataTables: 37 case types.DataTables:
59 dataTables := classes.DataTables{} 38 dataTables := classes.DataTables{}
60 dataTables.ParseDataTables(reader) 39 dataTables.ParseDataTables(reader, demo)
61 message.Data = dataTables 40 message.Data = dataTables
62 case Stop: 41 case types.Stop:
63 stop := classes.Stop{} 42 stop := classes.Stop{}
64 stop.ParseStop(reader) 43 stop.ParseStop(reader, demo)
65 message.Data = stop 44 message.Data = stop
66 case CustomData: // TODO: not sar data 45 case types.CustomData: // TODO: not sar data
67 customData := classes.CustomData{} 46 customData := classes.CustomData{}
68 customData.ParseCustomData(reader, message.TickNumber, uint8(message.PacketType)) 47 customData.ParseCustomData(reader, message.TickNumber, uint8(message.PacketType), demo)
69 message.Data = customData 48 message.Data = customData
70 case StringTables: // TODO: parsing string table data 49 case types.StringTables: // TODO: parsing string table data
71 stringTables := classes.StringTables{} 50 stringTables := classes.StringTables{}
72 stringTables.ParseStringTables(reader) 51 stringTables.ParseStringTables(reader, demo)
73 message.Data = stringTables 52 message.Data = stringTables
74 default: 53 default:
75 panic("invalid packet type") 54 panic("invalid packet type")
76 } 55 }
77 return message 56 return message
78} 57}
79
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"
100 }
101 return "INVALID"
102}