@@ -7,14 +7,15 @@ import (
7
7
"net/http"
8
8
)
9
9
10
+ // handle incoming web socket connections
10
11
func WsHandler (w http.ResponseWriter , r * http.Request ) {
11
- upgrader := websocket.Upgrader {
12
+ u := websocket.Upgrader {
12
13
ReadBufferSize : 1024 ,
13
14
WriteBufferSize : 1024 ,
14
15
CheckOrigin : func (* http.Request ) bool { return true },
15
16
}
16
17
17
- conn , err := upgrader .Upgrade (w , r , nil )
18
+ conn , err := u .Upgrade (w , r , nil )
18
19
if err != nil {
19
20
log .Println (err )
20
21
return
@@ -24,8 +25,12 @@ func WsHandler(w http.ResponseWriter, r *http.Request) {
24
25
25
26
log .Println ("Client connected" )
26
27
27
- go checkForNewEvent (conn )
28
+ go listenForNewEvents (conn )
28
29
30
+ publishState (conn )
31
+ }
32
+
33
+ func publishState (conn * websocket.Conn ) {
29
34
for {
30
35
b , err := json .Marshal (refBox .State )
31
36
if err != nil {
@@ -38,31 +43,37 @@ func WsHandler(w http.ResponseWriter, r *http.Request) {
38
43
return
39
44
}
40
45
41
- // wait for a new event
46
+ // wait to be notified
42
47
<- refBox .notifyUpdateState
43
48
}
44
49
}
45
50
46
- func checkForNewEvent (conn * websocket.Conn ) {
51
+ func listenForNewEvents (conn * websocket.Conn ) {
47
52
for {
48
53
messageType , b , err := conn .ReadMessage ()
49
54
if err != nil || messageType != websocket .TextMessage {
50
- log .Println ("Could not read message:" , err )
55
+ log .Println ("Could not read message: " , err )
51
56
return
52
57
}
53
58
54
- event := RefBoxEvent {}
55
- err = json .Unmarshal (b , & event )
56
- if err != nil {
57
- log .Println ("Could not read event:" , string (b ), err )
58
- } else {
59
- err = processEvent (& event )
60
- if err != nil {
61
- log .Println ("Could not process event:" , string (b ), err )
62
- } else {
63
- refBox .SaveState ()
64
- refBox .Update (event .Command )
65
- }
66
- }
59
+ handleNewEventMessage (b )
60
+ }
61
+ }
62
+
63
+ func handleNewEventMessage (b []byte ) {
64
+ event := RefBoxEvent {}
65
+ err := json .Unmarshal (b , & event )
66
+ if err != nil {
67
+ log .Println ("Could not read event:" , string (b ), err )
68
+ return
67
69
}
70
+
71
+ err = processEvent (& event )
72
+ if err != nil {
73
+ log .Println ("Could not process event:" , string (b ), err )
74
+ return
75
+ }
76
+
77
+ refBox .SaveState ()
78
+ refBox .Update (event .Command )
68
79
}
0 commit comments