aboutsummaryrefslogtreecommitdiff
path: root/packets/messages/message.go
blob: c508bfaec897a2927e2e5f71432e1d2a0ffc43e3 (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
package messages

import (
	"bytes"

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

func ParseMessage(data []byte) []Message {
	reader := bitreader.Reader(bytes.NewReader(data), true)
	var messages []Message
	for {
		messageType, err := reader.ReadBits(6)
		if err != nil {
			break
		}
		switch messageType {
		case 0x00:
			messages = append(messages, Message{Data: types.NetNop{}})
		case 0x01:
			messages = append(messages, Message{Data: types.ParseNetDisconnect(reader)})
		case 0x02:
			messages = append(messages, Message{Data: types.ParseNetFile(reader)})
		case 0x03:
			messages = append(messages, Message{Data: types.ParseNetSplitScreenUser(reader)})
		case 0x04:
			messages = append(messages, Message{Data: types.ParseNetTick(reader)})
		case 0x05:
			messages = append(messages, Message{Data: types.ParseNetStringCmd(reader)})
		case 0x06:
			messages = append(messages, Message{Data: types.ParseNetSetConVar(reader)})
		case 0x07:
			messages = append(messages, Message{Data: types.ParseNetSignOnState(reader)})
		case 0x08:
			messages = append(messages, Message{Data: types.ParseSvcServerInfo(reader)})
		case 0x09:
			messages = append(messages, Message{Data: types.ParseSvcSendTable(reader)})
		case 0x10:
			messages = append(messages, Message{Data: types.ParseSvcClassInfo(reader)})
		case 0x11:
			messages = append(messages, Message{Data: types.ParseSvcSetPause(reader)})
		}
	}
	return messages
}

type Message struct {
	Data any
}