aboutsummaryrefslogtreecommitdiff
path: root/packets
diff options
context:
space:
mode:
Diffstat (limited to 'packets')
-rw-r--r--packets/header.go10
-rw-r--r--packets/message.go70
-rw-r--r--packets/types.go18
3 files changed, 59 insertions, 39 deletions
diff --git a/packets/header.go b/packets/header.go
index 60cd146..c4172d9 100644
--- a/packets/header.go
+++ b/packets/header.go
@@ -9,16 +9,16 @@ import (
9func ParseHeader(reader *bitreader.ReaderType) { 9func ParseHeader(reader *bitreader.ReaderType) {
10 header := Header{ 10 header := Header{
11 DemoFileStamp: reader.TryReadStringLen(8), 11 DemoFileStamp: reader.TryReadStringLen(8),
12 DemoProtocol: uint(reader.TryReadInt32()), 12 DemoProtocol: uint32(reader.TryReadInt32()),
13 NetworkProtocol: uint(reader.TryReadInt32()), 13 NetworkProtocol: uint32(reader.TryReadInt32()),
14 ServerName: reader.TryReadStringLen(260), 14 ServerName: reader.TryReadStringLen(260),
15 ClientName: reader.TryReadStringLen(260), 15 ClientName: reader.TryReadStringLen(260),
16 MapName: reader.TryReadStringLen(260), 16 MapName: reader.TryReadStringLen(260),
17 GameDirectory: reader.TryReadStringLen(260), 17 GameDirectory: reader.TryReadStringLen(260),
18 PlaybackTime: reader.TryReadFloat32(), 18 PlaybackTime: reader.TryReadFloat32(),
19 PlaybackTicks: int(reader.TryReadInt32()), 19 PlaybackTicks: int32(reader.TryReadInt32()),
20 PlaybackFrames: int(reader.TryReadInt32()), 20 PlaybackFrames: int32(reader.TryReadInt32()),
21 SignOnLength: uint(reader.TryReadInt32()), 21 SignOnLength: uint32(reader.TryReadInt32()),
22 } 22 }
23 if header.DemoFileStamp != "HL2DEMO" { 23 if header.DemoFileStamp != "HL2DEMO" {
24 panic("Invalid demo file stamp. Make sure a valid demo file is given.") 24 panic("Invalid demo file stamp. Make sure a valid demo file is given.")
diff --git a/packets/message.go b/packets/message.go
index a8e830d..3688ff9 100644
--- a/packets/message.go
+++ b/packets/message.go
@@ -4,56 +4,74 @@ import (
4 "fmt" 4 "fmt"
5 5
6 "github.com/pektezol/bitreader" 6 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/packets/classes"
7) 8)
8 9
10const MSSC = 2
11
9func ParseMessage(reader *bitreader.ReaderType) (status int) { 12func ParseMessage(reader *bitreader.ReaderType) (status int) {
10 messageType := reader.TryReadInt8() 13 messageType := reader.TryReadInt8()
11 messageTick := reader.TryReadInt32() 14 messageTick := reader.TryReadInt32()
12 messageSlot := reader.TryReadInt8() 15 messageSlot := reader.TryReadInt8()
13 //fmt.Println(messageType, messageTick, messageSlot)
14 switch messageType { 16 switch messageType {
15 case 0x01: 17 case 0x01: // TODO: SignOn - Data
16 //signOn := SignOn{} 18 signOn := SignOn{
17 reader.SkipBytes(76*2 + 8) 19 PacketInfo: classes.ParseCmdInfo(reader, MSSC),
18 val := reader.TryReadInt32() 20 InSequence: int32(reader.TryReadInt32()),
19 reader.SkipBytes(int(val)) 21 OutSequence: int32(reader.TryReadInt32()),
20 fmt.Printf("[%d] (%d) {%d} SignOn: \n", messageTick, messageType, messageSlot) 22 Size: int32(reader.TryReadInt32()),
23 }
24 reader.SkipBytes(int(signOn.Size))
25 fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn)
21 return 1 26 return 1
22 case 0x02: 27 case 0x02: // TODO: Packet - Data
23 reader.SkipBytes(76*2 + 8) 28 packet := Packet{
24 val := reader.TryReadInt32() 29 PacketInfo: classes.ParseCmdInfo(reader, MSSC),
25 reader.SkipBytes(int(val)) 30 InSequence: int32(reader.TryReadInt32()),
26 // fmt.Printf("[%d] (%d) Packet: \n", messageTick, messageType) 31 OutSequence: int32(reader.TryReadInt32()),
32 Size: int32(reader.TryReadInt32()),
33 }
34 //classes.ParseUserCmdInfo(reader, packet.Size)
35 reader.SkipBytes(int(packet.Size))
36 //fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet)
27 return 2 37 return 2
28 case 0x03: 38 case 0x03:
29 fmt.Printf("[%d] (%d) SyncTick: \n", messageTick, messageType) 39 syncTick := SyncTick{}
40 fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick)
30 return 3 41 return 3
31 case 0x04: 42 case 0x04:
32 val := reader.TryReadInt32() 43 consoleCmd := ConsoleCmd{
33 reader.SkipBytes(int(val)) 44 Size: int32(reader.TryReadInt32()),
34 // fmt.Printf("[%d] (%d) ConsoleCmd: \n", messageTick, messageType) 45 }
46 consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size))
47 //fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data)
35 return 4 48 return 4
36 case 0x05: 49 case 0x05: // TODO: UserCmd - Buttons
37 reader.SkipBytes(4) 50 userCmd := UserCmd{
38 val := reader.TryReadInt32() 51 Cmd: int32(reader.TryReadInt32()),
39 reader.SkipBytes(int(val)) 52 Size: int32(reader.TryReadInt32()),
40 // fmt.Printf("[%d] (%d) UserCmd: \n", messageTick, messageType) 53 }
54 userCmd.Data = classes.ParseUserCmdInfo(reader, int(userCmd.Size))
55 fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd)
41 return 5 56 return 5
42 case 0x06: 57 case 0x06: // TODO: DataTables
43 val := reader.TryReadInt32() 58 val := reader.TryReadInt32()
44 reader.SkipBytes(int(val)) 59 reader.SkipBytes(int(val))
45 // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType) 60 // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType)
46 return 6 61 return 6
47 case 0x07: 62 case 0x07: // TODO: Stop - RemainingData
48 fmt.Printf("[%d] (%d) Stop: \n", messageTick, messageType) 63 stop := Stop{
64 RemainingData: nil,
65 }
66 fmt.Printf("[%d] (%d) Stop: %v\n", messageTick, messageType, stop)
49 return 7 67 return 7
50 case 0x08: 68 case 0x08: // TODO: CustomData
51 reader.SkipBytes(4) 69 reader.SkipBytes(4)
52 val := reader.TryReadInt32() 70 val := reader.TryReadInt32()
53 reader.SkipBytes(int(val)) 71 reader.SkipBytes(int(val))
54 // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType) 72 // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType)
55 return 8 73 return 8
56 case 0x09: 74 case 0x09: // TODO: StringTables
57 val := reader.TryReadInt32() 75 val := reader.TryReadInt32()
58 reader.SkipBytes(int(val)) 76 reader.SkipBytes(int(val))
59 // fmt.Printf("[%d] (%d) StringTables: \n", messageTick, messageType) 77 // fmt.Printf("[%d] (%d) StringTables: \n", messageTick, messageType)
diff --git a/packets/types.go b/packets/types.go
index 5f7a29b..5e75643 100644
--- a/packets/types.go
+++ b/packets/types.go
@@ -1,21 +1,23 @@
1package packets 1package packets
2 2
3import "github.com/pektezol/demoparser/packets/classes"
4
3type Header struct { 5type Header struct {
4 DemoFileStamp string 6 DemoFileStamp string
5 DemoProtocol uint 7 DemoProtocol uint32
6 NetworkProtocol uint 8 NetworkProtocol uint32
7 ServerName string 9 ServerName string
8 ClientName string 10 ClientName string
9 MapName string 11 MapName string
10 GameDirectory string 12 GameDirectory string
11 PlaybackTime float32 13 PlaybackTime float32
12 PlaybackTicks int 14 PlaybackTicks int32
13 PlaybackFrames int 15 PlaybackFrames int32
14 SignOnLength uint 16 SignOnLength uint32
15} 17}
16 18
17type SignOn struct { 19type SignOn struct {
18 PacketInfo []byte 20 PacketInfo []classes.CmdInfo
19 InSequence int32 21 InSequence int32
20 OutSequence int32 22 OutSequence int32
21 Size int32 23 Size int32
@@ -23,7 +25,7 @@ type SignOn struct {
23} 25}
24 26
25type Packet struct { 27type Packet struct {
26 PacketInfo []byte 28 PacketInfo []classes.CmdInfo
27 InSequence int32 29 InSequence int32
28 OutSequence int32 30 OutSequence int32
29 Size int32 31 Size int32
@@ -40,7 +42,7 @@ type ConsoleCmd struct {
40type UserCmd struct { 42type UserCmd struct {
41 Cmd int32 43 Cmd int32
42 Size int32 44 Size int32
43 Data []byte 45 Data classes.UserCmdInfo
44} 46}
45 47
46type DataTables struct { 48type DataTables struct {