Skip to content
  • Sponsor
  • Notifications You must be signed in to change notification settings
  • Fork 0

Commit 3e32260

Browse files
committedFeb 17, 2025··
Switch websocket library, net/x/websocket is deprecated in golang/go#18152
1 parent 4345af4 commit 3e32260

File tree

3 files changed

+30
-18
lines changed

3 files changed

+30
-18
lines changed
 

‎go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ go 1.24.0
44

55
require (
66
entgo.io/ent v0.14.1
7+
github.com/coder/websocket v1.8.12
78
github.com/go-sql-driver/mysql v1.8.1
89
github.com/golang-migrate/migrate/v4 v4.18.2
910
github.com/jinzhu/configor v1.2.2
1011
github.com/labstack/echo/v4 v4.13.3
1112
github.com/whywaita/poker-go v0.0.0-20240128181615-ff338443efbd
12-
golang.org/x/net v0.35.0
1313
)
1414

1515
require (
@@ -25,6 +25,7 @@ require (
2525
github.com/valyala/fasttemplate v1.2.2 // indirect
2626
go.uber.org/atomic v1.7.0 // indirect
2727
golang.org/x/crypto v0.33.0 // indirect
28+
golang.org/x/net v0.35.0 // indirect
2829
golang.org/x/sys v0.30.0 // indirect
2930
golang.org/x/text v0.22.0 // indirect
3031
golang.org/x/time v0.8.0 // indirect

‎go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20O
1010
github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
1111
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
1212
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
13+
github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo=
14+
github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
1315
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1416
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1517
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

‎pkg/server/server_ws.go

+26-17
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,14 @@ import (
88
"log"
99
"sort"
1010

11-
"github.com/whywaita/rfid-poker/pkg/store"
12-
1311
"github.com/whywaita/rfid-poker/pkg/query"
12+
"github.com/whywaita/rfid-poker/pkg/store"
1413

14+
"github.com/coder/websocket"
1515
"github.com/labstack/echo/v4"
16-
"golang.org/x/net/websocket"
1716
)
1817

19-
// Send is struct for SSE
18+
// Send is struct for WebSocket sending
2019
type Send struct {
2120
Players []SendPlayer `json:"players"`
2221
Board []SendCard `json:"board"`
@@ -35,23 +34,32 @@ type SendCard struct {
3534

3635
func ws(c echo.Context, conn *sql.DB, notifyCh chan struct{}) error {
3736
q := query.New(conn)
38-
websocket.Handler(func(ws *websocket.Conn) {
39-
defer ws.Close()
40-
ctx := c.Request().Context()
4137

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, "")
4545

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)
4958
if err != nil {
5059
c.Logger().Errorf(err.Error())
5160
}
5261
}
53-
}).ServeHTTP(c.Response(), c.Request())
54-
return nil
62+
}
5563
}
5664

5765
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
6674
}
6775

6876
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)
7179
}
80+
7281
return nil
7382
}
7483

0 commit comments

Comments
 (0)
Please sign in to comment.