@@ -8,15 +8,14 @@ import (
8
8
"log"
9
9
"sort"
10
10
11
- "github.com/whywaita/rfid-poker/pkg/store"
12
-
13
11
"github.com/whywaita/rfid-poker/pkg/query"
12
+ "github.com/whywaita/rfid-poker/pkg/store"
14
13
14
+ "github.com/coder/websocket"
15
15
"github.com/labstack/echo/v4"
16
- "golang.org/x/net/websocket"
17
16
)
18
17
19
- // Send is struct for SSE
18
+ // Send is struct for WebSocket sending
20
19
type Send struct {
21
20
Players []SendPlayer `json:"players"`
22
21
Board []SendCard `json:"board"`
@@ -35,23 +34,32 @@ type SendCard struct {
35
34
36
35
func ws (c echo.Context , conn * sql.DB , notifyCh chan struct {}) error {
37
36
q := query .New (conn )
38
- websocket .Handler (func (ws * websocket.Conn ) {
39
- defer ws .Close ()
40
- ctx := c .Request ().Context ()
41
37
42
- if err := sendPlayer (ctx , q , ws ); err != nil {
43
- c .Logger ().Errorf (err .Error ())
44
- }
38
+ wsConn , err := websocket .Accept (c .Response (), c .Request (), & websocket.AcceptOptions {
39
+ OriginPatterns : []string {"*" },
40
+ })
41
+ if err != nil {
42
+ return fmt .Errorf ("failed to accept WebSocket: %w" , err )
43
+ }
44
+ defer wsConn .Close (websocket .StatusNormalClosure , "" )
45
45
46
- for {
47
- <- notifyCh
48
- err := sendPlayer (ctx , q , ws )
46
+ ctx := c .Request ().Context ()
47
+
48
+ if err := sendPlayer (ctx , q , wsConn ); err != nil {
49
+ c .Logger ().Errorf (err .Error ())
50
+ }
51
+
52
+ for {
53
+ select {
54
+ case <- ctx .Done ():
55
+ return nil
56
+ case <- notifyCh :
57
+ err := sendPlayer (ctx , q , wsConn )
49
58
if err != nil {
50
59
c .Logger ().Errorf (err .Error ())
51
60
}
52
61
}
53
- }).ServeHTTP (c .Response (), c .Request ())
54
- return nil
62
+ }
55
63
}
56
64
57
65
func sendPlayer (ctx context.Context , q * query.Queries , ws * websocket.Conn ) error {
@@ -66,9 +74,10 @@ func sendPlayer(ctx context.Context, q *query.Queries, ws *websocket.Conn) error
66
74
}
67
75
68
76
log .Println ("Send: " , string (b ))
69
- if err := websocket . Message . Send ( ws , string ( b ) ); err != nil {
70
- return fmt .Errorf ("websocket.Message.Send (): %w" , err )
77
+ if err := ws . Write ( ctx , websocket . MessageText , b ); err != nil {
78
+ return fmt .Errorf ("ws.Write (): %w" , err )
71
79
}
80
+
72
81
return nil
73
82
}
74
83
0 commit comments