From b8c9cdc9996706047b605fcb179161a678fcb8db Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sun, 6 Nov 2022 17:27:56 +0300 Subject: changed github username + other stuff that i don't remember --- README.md | 2 +- classes/classes.go | 4 +- classes/netsvc/netsvc.go | 32 ++++++++++++++ classes/netsvc/types.go | 106 +++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 4 +- go.sum | 6 +-- main.go | 2 +- messages/header.go | 7 +++- messages/messages.go | 18 ++++---- messages/types.go | 2 +- utils/utils.go | 17 +++++++- 11 files changed, 179 insertions(+), 21 deletions(-) create mode 100644 classes/netsvc/netsvc.go create mode 100644 classes/netsvc/types.go diff --git a/README.md b/README.md index 18771dd..569a79c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# DemoParser [![Go Report Card](https://goreportcard.com/badge/github.com/bisaxa/demoparser)](https://goreportcard.com/report/github.com/bisaxa/demoparser) [![CI Badge](https://github.com/bisaxa/DemoParser/actions/workflows/CI.yml/badge.svg)](https://github.com/BiSaXa/DemoParser/actions/workflows/CI.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/BiSaXa/DemoParser/blob/main/LICENSE) +# DemoParser [![Go Report Card](https://goreportcard.com/badge/github.com/pektezol/demoparser)](https://goreportcard.com/report/github.com/pektezol/demoparser) [![CI Badge](https://github.com/pektezol/DemoParser/actions/workflows/CI.yml/badge.svg)](https://github.com/pektezol/DemoParser/actions/workflows/CI.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/pektezol/DemoParser/blob/main/LICENSE) Work-In-Progress demo parser for Portal 2. \ No newline at end of file diff --git a/classes/classes.go b/classes/classes.go index 1a431f3..4d6acb0 100644 --- a/classes/classes.go +++ b/classes/classes.go @@ -4,8 +4,8 @@ import ( "encoding/binary" "os" - "github.com/bisaxa/bitreader" - "github.com/bisaxa/demoparser/utils" + "github.com/pektezol/bitreader" + "github.com/pektezol/demoparser/utils" ) func ParseCmdInfo(file *os.File, MSSC int) []CmdInfo { diff --git a/classes/netsvc/netsvc.go b/classes/netsvc/netsvc.go new file mode 100644 index 0000000..a454310 --- /dev/null +++ b/classes/netsvc/netsvc.go @@ -0,0 +1,32 @@ +package netsvc + +import ( + "bytes" + "fmt" + + "github.com/pektezol/bitreader" + "github.com/pektezol/demoparser/utils" +) + +const NET_TICK_SCALEUP = 10000 + +func ParseNetSvcMessage(file []byte) { + reader := bitreader.Reader(bytes.NewReader(file), true) + bitsRead := 0 + for { + messageType, err := reader.ReadBits(6) + if err != nil { // No remaining bits left + break + } + switch messageType { + case 16: + var svcprint SvcPrint + svcprint.Message = utils.ReadStringFromSlice(file) + fmt.Println(svcprint) + bitsRead += len(svcprint.Message) * 8 + default: + //fmt.Println("default") + break + } + } +} diff --git a/classes/netsvc/types.go b/classes/netsvc/types.go new file mode 100644 index 0000000..2a52f96 --- /dev/null +++ b/classes/netsvc/types.go @@ -0,0 +1,106 @@ +package netsvc + +type NetDisconnect struct { + Text string +} + +type NetFile struct { + TransferId int32 + FileName string + FileRequested bool +} + +type NetSplitScreenUser struct { + Unknown bool +} + +type NetTick struct { + Tick int32 + HostFrameTime int16 + HostFrameTimeStdDeviation int16 +} + +type NetStringCmd struct { + Command string +} + +type ConVar struct { + Name string + Value string +} + +type NetSetConVar struct { + Length int8 + ConVars []ConVar +} + +type NetSignonStateOE struct { + SignonState int8 + SpawnCount int32 +} + +type NetSignonStateNE struct { + NetSignonStateOE + NumServerPlayers int32 + IdsLength int32 + PlayerNetworkIds []byte + MapNameLength int32 + MapName string +} + +type SvcServerInfo struct { + Protocol int8 + ServerCount int32 + IsHltv bool + IsDedicated bool + ClientCrc int32 + MaxClasses int16 + MapCrc int32 + PlayerSlot int8 + MaxClients int8 + Unk int32 // NE + TickInterval float32 + COs byte + GameDir string + MapName string + SkyName string + HostName string +} + +type SvcSendTable struct { + NeedsDecoder bool + Length int8 + Props int // ? +} + +type ServerClass struct { + ClassId int8 + ClassName string + DataTableName string +} + +type SvcClassInfo struct { + Length int16 + CreateOnClient bool + ServerClasses []ServerClass +} + +type SvcSetPause struct { + Paused bool +} + +type SvcCreateStringTable struct { + Name string + MaxEntries int16 + NumEntries int8 + Length int32 + UserDataFixedSize bool + UserDataSize int32 + UserDataSizeBits int8 + Flags int8 + StringData int // ? +} + +type SvcPrint struct { + Message string +} diff --git a/go.mod b/go.mod index 0ce207c..9bc243f 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ -module github.com/bisaxa/demoparser +module github.com/pektezol/demoparser go 1.19 -require github.com/bisaxa/bitreader v1.0.1-0.20220907151525-64e0e23b8a0f +require github.com/pektezol/bitreader v1.1.2 diff --git a/go.sum b/go.sum index 394545f..6cac544 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,2 @@ -github.com/bisaxa/bitreader v1.0.1-0.20220907142402-05d7eb4e0f7b h1:OBmlKXvF6Uo+uMowYnu3y3BJWAnZlQzLAJYuwXS97HI= -github.com/bisaxa/bitreader v1.0.1-0.20220907142402-05d7eb4e0f7b/go.mod h1:AKIwOt+ZqRtuT7SyjGAF8x0kVPhlK8fgTVMlPEh7d0I= -github.com/bisaxa/bitreader v1.0.1-0.20220907151525-64e0e23b8a0f h1:b48EQo2AaOOAxsWGk3NI+ZJDrXe9YT9KKSXz/agSuzQ= -github.com/bisaxa/bitreader v1.0.1-0.20220907151525-64e0e23b8a0f/go.mod h1:AKIwOt+ZqRtuT7SyjGAF8x0kVPhlK8fgTVMlPEh7d0I= +github.com/pektezol/bitreader v1.1.2 h1:F0u8qiauIwh52lwiwy7UMQ03/bw4NuEXQU0UFBL+A2w= +github.com/pektezol/bitreader v1.1.2/go.mod h1:RKAUiA//jCPJzO10P+VSkBq4wfY38TaNjpCjQ+DmbcQ= diff --git a/main.go b/main.go index 8def33d..4aa7fd1 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,7 @@ import ( "log" "os" - "github.com/bisaxa/demoparser/messages" + "github.com/pektezol/demoparser/messages" ) func main() { diff --git a/messages/header.go b/messages/header.go index 6320c71..34b36d3 100644 --- a/messages/header.go +++ b/messages/header.go @@ -4,8 +4,8 @@ import ( "fmt" "os" - "github.com/bisaxa/bitreader" - "github.com/bisaxa/demoparser/utils" + "github.com/pektezol/bitreader" + "github.com/pektezol/demoparser/utils" ) func ParseHeader(file *os.File) { @@ -22,5 +22,8 @@ func ParseHeader(file *os.File) { header.PlaybackTicks = int32(reader.TryReadInt32()) header.PlaybackFrames = int32(reader.TryReadInt32()) header.SignOnLength = int32(reader.TryReadInt32()) + if header.DemoProtocol != 4 { // Old Engine == 2, 3 / New Engine == 4 + panic("Only New Engine is supported.") + } fmt.Printf("%+v", header) } diff --git a/messages/messages.go b/messages/messages.go index 478b7c7..b40684b 100644 --- a/messages/messages.go +++ b/messages/messages.go @@ -4,9 +4,10 @@ import ( "fmt" "os" - "github.com/bisaxa/bitreader" - "github.com/bisaxa/demoparser/classes" - "github.com/bisaxa/demoparser/utils" + "github.com/pektezol/bitreader" + "github.com/pektezol/demoparser/classes" + "github.com/pektezol/demoparser/classes/netsvc" + "github.com/pektezol/demoparser/utils" ) func ParseMessage(file *os.File) (statusCode int) { @@ -22,7 +23,10 @@ func ParseMessage(file *os.File) (statusCode int) { packet.InSequence = int32(reader.TryReadInt32()) packet.OutSequence = int32(reader.TryReadInt32()) packet.Size = int32(reader.TryReadInt32()) - reader.SkipBytes(int(packet.Size)) // TODO: NET/SVC Message Parsing + data := utils.ReadByteFromFile(file, packet.Size) + //fmt.Println(data) + netsvc.ParseNetSvcMessage(data) + //reader.SkipBytes(int(packet.Size)) // TODO: NET/SVC Message Parsing fmt.Printf("[%d] (%d) SignOn: %v\n", messageTick, messageSlot, packet) return 1 case 0x02: // Packet @@ -32,7 +36,7 @@ func ParseMessage(file *os.File) (statusCode int) { packet.OutSequence = int32(reader.TryReadInt32()) packet.Size = int32(reader.TryReadInt32()) reader.SkipBytes(int(packet.Size)) // TODO: NET/SVC Message Parsing - fmt.Printf("[%d] Packet: %v\n", messageTick, packet) + //fmt.Printf("[%d] Packet: %v\n", messageTick, packet) return 2 case 0x03: // SyncTick return 3 @@ -40,14 +44,14 @@ func ParseMessage(file *os.File) (statusCode int) { var consolecmd ConsoleCmd consolecmd.Size = int32(reader.TryReadInt32()) consolecmd.Data = string(utils.ReadByteFromFile(file, consolecmd.Size)) - fmt.Printf("[%d] ConsoleCmd: %s\n", messageTick, consolecmd.Data) + //fmt.Printf("[%d] ConsoleCmd: %s\n", messageTick, consolecmd.Data) return 4 case 0x05: // UserCmd var usercmd UserCmd usercmd.Cmd = int32(reader.TryReadInt32()) usercmd.Size = int32(reader.TryReadInt32()) usercmd.Data = classes.ParseUserCmdInfo(file, int(usercmd.Size)) - fmt.Printf("[%d] UserCmd: %v\n", messageTick, usercmd.Data) + //fmt.Printf("[%d] UserCmd: %v\n", messageTick, usercmd.Data) return 5 case 0x06: // DataTables var datatables DataTables diff --git a/messages/types.go b/messages/types.go index a8dd19a..9c92c54 100644 --- a/messages/types.go +++ b/messages/types.go @@ -1,6 +1,6 @@ package messages -import "github.com/bisaxa/demoparser/classes" +import "github.com/pektezol/demoparser/classes" type Header struct { DemoFileStamp string diff --git a/utils/utils.go b/utils/utils.go index d25fa36..db1b02f 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,10 +1,11 @@ package utils import ( + "bytes" "os" "unsafe" - "github.com/bisaxa/bitreader" + "github.com/pektezol/bitreader" ) func CheckError(e error) { @@ -33,6 +34,20 @@ func ReadStringFromFile(file *os.File) string { return output } +func ReadStringFromSlice(file []byte) string { + var output string + reader := bitreader.Reader(bytes.NewReader(file), true) + for { + value, err := reader.ReadBytes(1) + CheckError(err) + if value == 0 { + break + } + output += string(rune(value)) + } + return output +} + func FloatArrFromBytes(byteArr []byte) []float32 { if len(byteArr) == 0 { return nil -- cgit v1.2.3