Skip to content

Commit e182956

Browse files
committed
it's starting to do something
1 parent 44bd4bf commit e182956

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

cmd/wasm/wasm.go

+22-5
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ import (
66
"csgo-2d-demo-player/pkg/message"
77
"csgo-2d-demo-player/pkg/parser"
88
"fmt"
9+
"io"
910
"log"
1011
"syscall/js"
1112
"time"
1213

1314
"github.com/markus-wa/demoinfocs-golang/v5/pkg/demoinfocs"
15+
"google.golang.org/protobuf/proto"
1416
)
1517

1618
func main() {
@@ -21,27 +23,42 @@ func main() {
2123
}
2224

2325
func testt(this js.Value, args []js.Value) interface{} {
24-
fmt.Printf("testt: +%v\n", args[0].Get("size"))
25-
input := make([]byte, args[0].Get("size"))
26+
fmt.Printf("testt: +%v\n", args[0].Get("length"))
27+
input := make([]byte, args[0].Get("length").Int())
2628
js.CopyBytesToGo(input, args[0])
2729

2830
fmt.Println("fer")
2931

30-
gzipReader, streamErr := gzip.NewReader(bytes.NewReader(input))
32+
parse(bytes.NewReader(input), args[1])
33+
34+
return js.ValueOf("2")
35+
}
36+
37+
func parse(input io.Reader, callback js.Value) {
38+
fmt.Printf("callback? %+v\n", callback)
39+
40+
gzipReader, streamErr := gzip.NewReader(input)
3141
if streamErr != nil {
3242
log.Printf("Failed to create gzip reader from demo. %+v", streamErr)
3343
}
3444

3545
startTime := time.Now().Local()
3646
err := parser.Parse(gzipReader, func(msg *message.Message, state demoinfocs.GameState) {
3747
fmt.Printf("message: %+v \n", msg.MsgType)
48+
49+
payload, protoErr := proto.Marshal(msg)
50+
if protoErr != nil {
51+
fmt.Printf("failed to marshall the message: %+v %+v\n", msg, protoErr)
52+
}
53+
arrayConstructor := js.Global().Get("Uint8Array")
54+
dataJS := arrayConstructor.New(len(payload))
55+
js.CopyBytesToJS(dataJS, payload)
56+
callback.Invoke(dataJS)
3857
})
3958
fmt.Printf("parsing took: %s\n", time.Since(startTime))
4059

4160
if err != nil {
4261
fmt.Printf("Failed to parse a demo: %+v \n", err)
4362
}
4463
fmt.Println("demo parsed?")
45-
46-
return js.ValueOf("2")
4764
}

web/player/src/App.js

+20-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function App() {
1111
const [messageBus] = useState(new MessageBus())
1212
const [player] = useState(new Player(messageBus))
1313
const [serverHost] = useState(window.location.host.includes("localhost") ? "http://localhost:8080" : "");
14+
const proto = require("./protos/Message_pb");
1415

1516
useEffect(() => {
1617
console.log("run run run")
@@ -25,13 +26,28 @@ function App() {
2526
.then((result) => {
2627
go.run(result.instance);
2728

28-
29+
// window.withDownload("https://corsproxy.io/?" + encodeURIComponent("https://github.com/sparkoo/csgo-2d-demo-viewer/raw/refs/heads/master/test_demos/1-c26b4e22-66ac-4904-87cc-3b2b65a67ddb-1-1.dem.gz"))
2930
fetch("https://corsproxy.io/?" + encodeURIComponent("https://github.com/sparkoo/csgo-2d-demo-viewer/raw/refs/heads/master/test_demos/1-c26b4e22-66ac-4904-87cc-3b2b65a67ddb-1-1.dem.gz"))
3031
.then((result) => {
3132
console.log(result)
32-
result.blob().then(b => {
33-
console.log(b)
34-
window.testt(b)
33+
result.arrayBuffer().then(b => {
34+
const data = new Uint8Array(b)
35+
console.log(data)
36+
window.testt(data, function (data) {
37+
if(data instanceof Uint8Array) {
38+
const msg = proto.Message.deserializeBinary(data).toObject()
39+
messageBus.emit(msg)
40+
} else {
41+
// text frame
42+
// console.log(event.data);
43+
console.log("[message] text data received from server, this is weird. We're using protobufs ?!?!?", data);
44+
messageBus.emit(JSON.parse(data))
45+
}
46+
47+
// console.log(`[message] Data received from server: ${event.data}`);
48+
// let msg = JSON.parse(event.data)
49+
// messageBus.emit(msg)
50+
})
3551
})
3652
})
3753
.catch(err => console.log(err))

0 commit comments

Comments
 (0)