@@ -2,31 +2,38 @@ package server
2
2
3
3
import (
4
4
"cse-server-go/structs"
5
- "encoding/json"
6
5
"github.com/gorilla/websocket"
6
+ "github.com/ugorji/go/codec"
7
7
"io"
8
8
"log"
9
9
"net/http"
10
+ "reflect"
10
11
)
11
12
12
13
type JsonRequest struct {
13
14
Command []string `json:"command,omitempty"`
14
- Module string `json:"module,omitempty"`
15
- Modules bool `json:"modules,omitempty"`
16
- Connections bool `json:"connections,omitempty"`
17
15
}
18
16
19
17
var upgrader = websocket.Upgrader {CheckOrigin : func (r * http.Request ) bool { return true },}
20
18
21
19
func commandLoop (command chan []string , conn * websocket.Conn ) {
20
+ var (
21
+ mh codec.MsgpackHandle
22
+ )
23
+ mh .MapType = reflect .TypeOf (map [string ]interface {}(nil ))
24
+ decoder := codec .NewDecoder (nil , & mh )
25
+
22
26
for {
23
27
data := JsonRequest {}
24
28
_ , r , err := conn .NextReader ()
25
29
if err != nil {
26
30
log .Println ("read error:" , err )
27
31
break
28
32
}
29
- err = json .NewDecoder (r ).Decode (& data )
33
+
34
+ decoder .Reset (r )
35
+ err = decoder .Decode (& data )
36
+
30
37
if err == io .EOF {
31
38
// One value is expected in the message.
32
39
log .Println ("Message was EOF:" , err , data )
@@ -40,11 +47,19 @@ func commandLoop(command chan []string, conn *websocket.Conn) {
40
47
}
41
48
42
49
func stateLoop (state chan structs.JsonResponse , conn * websocket.Conn ) {
50
+ var (
51
+ mh codec.MsgpackHandle
52
+ )
53
+ mh .MapType = reflect .TypeOf (map [string ]interface {}(nil ))
54
+ encoder := codec .NewEncoder (nil , & mh )
43
55
for {
44
56
latestState := <- state
45
- err := conn .WriteJSON (latestState )
57
+
58
+ w , err := conn .NextWriter (2 )
59
+ encoder .Reset (w )
60
+ err = encoder .Encode (latestState )
46
61
if err != nil {
47
- log .Println ("write:" , err )
62
+ log .Println ("write error :" , err )
48
63
log .Println ("latestState:" , latestState )
49
64
break
50
65
}
0 commit comments