aboutsummaryrefslogtreecommitdiff
path: root/packets/classes/datatable.go
blob: 07cbd002649e1982848d80a643f30609504286e7 (plain) (blame)
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
}