aboutsummaryrefslogtreecommitdiff
path: root/packets/packet.go
diff options
context:
space:
mode:
Diffstat (limited to 'packets/packet.go')
-rw-r--r--packets/packet.go84
1 files changed, 84 insertions, 0 deletions
diff --git a/packets/packet.go b/packets/packet.go
new file mode 100644
index 0000000..23a21e6
--- /dev/null
+++ b/packets/packet.go
@@ -0,0 +1,84 @@
1package packets
2
3import (
4 "fmt"
5
6 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/packets/classes"
8 "github.com/pektezol/demoparser/packets/messages"
9)
10
11const MSSC = 2
12
13func ParsePacket(reader *bitreader.ReaderType) (status int) {
14 messageType := reader.TryReadInt8()
15 messageTick := reader.TryReadInt32()
16 messageSlot := reader.TryReadInt8()
17 switch messageType {
18 case 0x01: // TODO: SignOn - Data
19 signOn := SignOn{
20 PacketInfo: classes.ParseCmdInfo(reader, MSSC),
21 InSequence: int32(reader.TryReadInt32()),
22 OutSequence: int32(reader.TryReadInt32()),
23 Size: int32(reader.TryReadInt32()),
24 }
25 reader.SkipBytes(int(signOn.Size))
26 fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn)
27 return 1
28 case 0x02: // TODO: Packet - Data
29 packet := Packet{
30 PacketInfo: classes.ParseCmdInfo(reader, MSSC),
31 InSequence: int32(reader.TryReadInt32()),
32 OutSequence: int32(reader.TryReadInt32()),
33 Size: int32(reader.TryReadInt32()),
34 }
35 packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size)))
36 fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet)
37 return 2
38 case 0x03:
39 syncTick := SyncTick{}
40 fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick)
41 return 3
42 case 0x04:
43 consoleCmd := ConsoleCmd{
44 Size: int32(reader.TryReadInt32()),
45 }
46 consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size))
47 //fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data)
48 return 4
49 case 0x05: // TODO: UserCmd - Buttons
50 userCmd := UserCmd{
51 Cmd: int32(reader.TryReadInt32()),
52 Size: int32(reader.TryReadInt32()),
53 }
54 userCmd.Data = classes.ParseUserCmdInfo(reader.TryReadBytesToSlice(int(userCmd.Size)))
55 // fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd)
56 return 5
57 case 0x06: // TODO: DataTables
58 val := reader.TryReadInt32()
59 reader.SkipBytes(int(val))
60 // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType)
61 return 6
62 case 0x07:
63 stop := Stop{
64 RemainingData: nil,
65 }
66 fmt.Printf("[%d] (%d) Stop: %v\n", messageTick, messageType, stop)
67 return 7
68 case 0x08: // TODO: CustomData
69 reader.SkipBytes(4)
70 val := reader.TryReadInt32()
71 reader.SkipBytes(int(val))
72 // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType)
73 return 8
74 case 0x09: // TODO: StringTables - Data
75 stringTables := StringTables{
76 Size: int32(reader.TryReadInt32()),
77 }
78 stringTables.Data = classes.ParseStringTable(reader.TryReadBytesToSlice(int(stringTables.Size)))
79 // fmt.Printf("[%d] (%d) StringTables: %v\n", messageTick, messageType, stringTables)
80 return 9
81 default:
82 return 0
83 }
84}