aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-27 00:52:47 +0300
committerGitHub <noreply@github.com>2023-09-27 00:52:47 +0300
commit2ec2cf3cff547ae5daa79e7914394ce3f88504b2 (patch)
tree3e78eda432107fc6493a2f0beba1b86873eaf38e /pkg
parentadd new user messages, fix some writer types (#13) (diff)
downloadsdp.go-2ec2cf3cff547ae5daa79e7914394ce3f88504b2.tar.gz
sdp.go-2ec2cf3cff547ae5daa79e7914394ce3f88504b2.tar.bz2
sdp.go-2ec2cf3cff547ae5daa79e7914394ce3f88504b2.zip
added game event list detailed parsing (#14)
Diffstat (limited to '')
-rw-r--r--pkg/messages/types/svcGameEventList.go76
1 files changed, 72 insertions, 4 deletions
diff --git a/pkg/messages/types/svcGameEventList.go b/pkg/messages/types/svcGameEventList.go
index 1fa7589..d020feb 100644
--- a/pkg/messages/types/svcGameEventList.go
+++ b/pkg/messages/types/svcGameEventList.go
@@ -1,6 +1,8 @@
1package messages 1package messages
2 2
3import ( 3import (
4 "fmt"
5
4 "github.com/pektezol/bitreader" 6 "github.com/pektezol/bitreader"
5 "github.com/pektezol/demoparser/pkg/writer" 7 "github.com/pektezol/demoparser/pkg/writer"
6) 8)
@@ -8,18 +10,84 @@ import (
8type SvcGameEventList struct { 10type SvcGameEventList struct {
9 Events int16 11 Events int16
10 Length int32 12 Length int32
11 GameEventDescriptor []gameEventDescriptor 13 GameEventDescriptor []GameEventDescriptor
12} 14}
13 15
14type gameEventDescriptor struct { 16type GameEventDescriptor struct {
17 EventID uint32
18 Name string
19 Keys []struct {
20 Name string
21 Type EventDescriptor
22 }
15} 23}
16 24
25type EventDescriptor uint8
26
17func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList { 27func ParseSvcGameEventList(reader *bitreader.Reader) SvcGameEventList {
18 svcGameEventList := SvcGameEventList{ 28 svcGameEventList := SvcGameEventList{
19 Events: int16(reader.TryReadBits(9)), 29 Events: int16(reader.TryReadBits(9)),
20 Length: int32(reader.TryReadBits(20)), 30 Length: int32(reader.TryReadBits(20)),
21 } 31 }
22 reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)) 32 gameEventListReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEventList.Length)), true)
23 writer.TempAppendLine("\t\tEvents: %d", svcGameEventList.Events) 33 writer.TempAppendLine("\t\t%d Events:", svcGameEventList.Events)
34 svcGameEventList.parseGameEventDescriptor(gameEventListReader)
24 return svcGameEventList 35 return svcGameEventList
25} 36}
37
38func (svcGameEventList *SvcGameEventList) parseGameEventDescriptor(reader *bitreader.Reader) {
39 svcGameEventList.GameEventDescriptor = make([]GameEventDescriptor, svcGameEventList.Events)
40 for event := 0; event < int(svcGameEventList.Events); event++ {
41 gameEventDescriptor := GameEventDescriptor{
42 EventID: uint32(reader.TryReadBits(9)),
43 Name: reader.TryReadString(),
44 }
45 writer.TempAppendLine("\t\t\t%d: %s", gameEventDescriptor.EventID, gameEventDescriptor.Name)
46 for {
47 descriptorType := reader.TryReadBits(3)
48 if descriptorType == 0 {
49 break
50 }
51 KeyName := reader.TryReadString()
52 gameEventDescriptor.Keys = append(gameEventDescriptor.Keys, struct {
53 Name string
54 Type EventDescriptor
55 }{
56 Name: KeyName,
57 Type: EventDescriptor(descriptorType),
58 })
59 }
60 writer.TempAppendLine("\t\t\t\tKeys: %v", gameEventDescriptor.Keys)
61 }
62}
63
64const (
65 String EventDescriptor = iota + 1
66 Float
67 Int32
68 Int16
69 Int8
70 Bool
71 UInt64
72)
73
74func (eventDescriptor EventDescriptor) String() string {
75 switch eventDescriptor {
76 case String:
77 return "String"
78 case Float:
79 return "Float"
80 case Int32:
81 return "Int32"
82 case Int16:
83 return "Int16"
84 case Int8:
85 return "Int8"
86 case Bool:
87 return "Bool"
88 case UInt64:
89 return "UInt64"
90 default:
91 return fmt.Sprintf("%d", eventDescriptor)
92 }
93}