@@ -6,11 +6,13 @@ import (
6
6
"csgo-2d-demo-player/pkg/message"
7
7
"csgo-2d-demo-player/pkg/parser"
8
8
"fmt"
9
+ "io"
9
10
"log"
10
11
"syscall/js"
11
12
"time"
12
13
13
14
"github.com/markus-wa/demoinfocs-golang/v5/pkg/demoinfocs"
15
+ "google.golang.org/protobuf/proto"
14
16
)
15
17
16
18
func main () {
@@ -21,27 +23,42 @@ func main() {
21
23
}
22
24
23
25
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 ( ))
26
28
js .CopyBytesToGo (input , args [0 ])
27
29
28
30
fmt .Println ("fer" )
29
31
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 )
31
41
if streamErr != nil {
32
42
log .Printf ("Failed to create gzip reader from demo. %+v" , streamErr )
33
43
}
34
44
35
45
startTime := time .Now ().Local ()
36
46
err := parser .Parse (gzipReader , func (msg * message.Message , state demoinfocs.GameState ) {
37
47
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 )
38
57
})
39
58
fmt .Printf ("parsing took: %s\n " , time .Since (startTime ))
40
59
41
60
if err != nil {
42
61
fmt .Printf ("Failed to parse a demo: %+v \n " , err )
43
62
}
44
63
fmt .Println ("demo parsed?" )
45
-
46
- return js .ValueOf ("2" )
47
64
}
0 commit comments