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 1: // TODO: SignOn - Data signOn := SignOn{ PacketInfo: classes.ParseCmdInfo(reader, MSSC), InSequence: int32(reader.TryReadInt32()), OutSequence: int32(reader.TryReadInt32()), Size: int32(reader.TryReadInt32()), } signOn.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(signOn.Size))) fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn) return 1 case 2: // 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 3: syncTick := SyncTick{} fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick) return 3 case 4: 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 5: // 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 6: // TODO: DataTables // datatables := DataTables{ // Size: int32(reader.TryReadInt32()), // } val := reader.TryReadInt32() reader.SkipBytes(int(val)) // datatables.Data = classes.ParseDataTable(reader.TryReadBytesToSlice(int(datatables.Size))) // fmt.Printf("[%d] (%d) DataTables: %v\n", messageTick, messageType, datatables) return 6 case 7: stop := Stop{ RemainingData: nil, } fmt.Printf("[%d] (%d) Stop: %v\n", messageTick, messageType, stop) return 7 case 8: // TODO: CustomData reader.SkipBytes(4) val := reader.TryReadInt32() reader.SkipBytes(int(val)) // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType) return 8 case 9: // 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 } }