1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
package classes
import (
"bytes"
"fmt"
"github.com/pektezol/bitreader"
)
type DataTable struct {
SendTable []SendTable
ServerClassInfo []ServerClassInfo
}
type SendTable struct {
NeedsDecoder bool
NetTableName string
NumOfProps uint16
SendPropType int8
SendPropName string
SendPropFlags int16
}
type ServerClassInfo struct {
ClassId int16
ClassName string
DataTableName string
}
func ParseDataTable(data []byte) DataTable {
reader := bitreader.Reader(bytes.NewReader(data), true)
sendtable := parseSendTable(reader)
fmt.Println("AAA")
fmt.Println(reader.TryReadBits(8))
serverclassinfo := parseServerClassInfo(reader)
return DataTable{
SendTable: sendtable,
ServerClassInfo: serverclassinfo,
}
}
func parseSendTable(reader *bitreader.ReaderType) []SendTable {
var sendtables []SendTable
for reader.TryReadBool() {
sendtables = append(sendtables, SendTable{
NeedsDecoder: reader.TryReadBool(),
NetTableName: reader.TryReadString(),
NumOfProps: uint16(reader.TryReadBits(10)),
SendPropType: int8(reader.TryReadBits(5)),
SendPropName: reader.TryReadString(),
SendPropFlags: int16(reader.TryReadInt16()),
})
}
return sendtables
}
func parseServerClassInfo(reader *bitreader.ReaderType) []ServerClassInfo {
var serverclassinfo []ServerClassInfo
numofclasses := reader.TryReadInt16()
fmt.Println(numofclasses)
for i := 0; i < int(numofclasses); i++ {
serverclassinfo = append(serverclassinfo, ServerClassInfo{
ClassId: int16(reader.TryReadInt16()),
ClassName: reader.TryReadString(),
DataTableName: reader.TryReadString(),
})
}
return serverclassinfo
}
|