aboutsummaryrefslogtreecommitdiff
path: root/packets/packet.go
blob: b27f2e70d09b650c186f6abe0beef8a42daf59ae (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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package packets

import (
	"fmt"

	"github.com/pektezol/bitreader"
	"github.com/pektezol/demoparser/packets/classes"
	"github.com/pektezol/demoparser/packets/messages"
)

const MSSC = 2

func ParsePacket(reader *bitreader.ReaderType) (status int) {
	messageType := reader.TryReadInt8()
	messageTick := reader.TryReadInt32()
	messageSlot := reader.TryReadInt8()
	switch messageType {
	case 0x01: // TODO: SignOn - Data
		signOn := SignOn{
			PacketInfo:  classes.ParseCmdInfo(reader, MSSC),
			InSequence:  int32(reader.TryReadInt32()),
			OutSequence: int32(reader.TryReadInt32()),
			Size:        int32(reader.TryReadInt32()),
		}
		reader.SkipBytes(int(signOn.Size))
		fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn)
		return 1
	case 0x02: // TODO: Packet - Data
		packet := Packet{
			PacketInfo:  classes.ParseCmdInfo(reader, MSSC),
			InSequence:  int32(reader.TryReadInt32()),
			OutSequence: int32(reader.TryReadInt32()),
			Size:        int32(reader.TryReadInt32()),
		}
		packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size)))
		fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet)
		return 2
	case 0x03:
		syncTick := SyncTick{}
		fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick)
		return 3
	case 0x04:
		consoleCmd := ConsoleCmd{
			Size: int32(reader.TryReadInt32()),
		}
		consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size))
		fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data)
		return 4
	case 0x05: // TODO: UserCmd - Buttons
		userCmd := UserCmd{
			Cmd:  int32(reader.TryReadInt32()),
			Size: int32(reader.TryReadInt32()),
		}
		userCmd.Data = classes.ParseUserCmdInfo(reader.TryReadBytesToSlice(int(userCmd.Size)))
		// fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd)
		return 5
	case 0x06: // TODO: DataTables
		val := reader.TryReadInt32()
		reader.SkipBytes(int(val))
		// fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType)
		return 6
	case 0x07:
		stop := Stop{
			RemainingData: nil,
		}
		fmt.Printf("[%d] (%d) Stop: %v\n", messageTick, messageType, stop)
		return 7
	case 0x08: // TODO: CustomData
		reader.SkipBytes(4)
		val := reader.TryReadInt32()
		reader.SkipBytes(int(val))
		// fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType)
		return 8
	case 0x09: // TODO: StringTables - Data
		stringTables := StringTables{
			Size: int32(reader.TryReadInt32()),
		}
		stringTables.Data = classes.ParseStringTable(reader.TryReadBytesToSlice(int(stringTables.Size)))
		// fmt.Printf("[%d] (%d) StringTables: %v\n", messageTick, messageType, stringTables)
		return 9
	default:
		return 0
	}
}