Skip to content

Commit 453fd94

Browse files
committed
Fix websocket
1 parent ee64355 commit 453fd94

File tree

1 file changed

+22
-15
lines changed

1 file changed

+22
-15
lines changed

internal/http/http.go

+22-15
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"errors"
1010
"fmt"
1111
"io"
12-
"math/rand"
1312
"net"
1413
"net/http"
1514
"net/http/pprof"
@@ -143,19 +142,19 @@ func autoupdateHandler(auth Authenticater, connecter Connecter, history History)
143142
compress = true
144143
}
145144

146-
if r.URL.Query().Has("single") || position != 0 {
147-
handleSingle(ctx, uid, w, r, position, connecter, builder, history, compress)
148-
return
149-
}
150-
151-
if r.URL.Query().Has("websocket") {
145+
if r.Header.Get("upgrade") != "" {
152146
if err := sendMessagesWebsocket(ctx, w, r, uid, builder, connecter, compress); err != nil {
153147
handleErrorWithoutStatus(w, err)
154148
return
155149
}
156150
return
157151
}
158152

153+
if r.URL.Query().Has("single") || position != 0 {
154+
handleSingle(ctx, uid, w, r, position, connecter, builder, history, compress)
155+
return
156+
}
157+
159158
if err := sendMessages(ctx, w, uid, builder, connecter, compress); err != nil {
160159
handleErrorWithoutStatus(w, err)
161160
return
@@ -353,12 +352,24 @@ func sendMessages(ctx context.Context, w http.ResponseWriter, uid int, kb autoup
353352
return ctx.Err()
354353
}
355354

356-
func sendMessagesWebsocket(ctx context.Context, w http.ResponseWriter, r *http.Request, uid int, kb autoupdate.KeysBuilder, connecter Connecter, compress bool) error {
357-
c, err := websocket.Accept(w, r, nil)
355+
func sendMessagesWebsocket(ctx context.Context, w http.ResponseWriter, r *http.Request, uid int, kb *keysbuilder.Builder, connecter Connecter, compress bool) error {
356+
conn, err := websocket.Accept(w, r, nil)
358357
if err != nil {
359358
return fmt.Errorf("accept websocket: %w", err)
360359
}
361-
defer c.CloseNow()
360+
defer conn.CloseNow()
361+
362+
_, reader, err := conn.Reader(ctx)
363+
if err != nil {
364+
return fmt.Errorf("reading first message")
365+
}
366+
367+
newKB, err := keysbuilder.ManyFromJSON(reader)
368+
if err != nil {
369+
return fmt.Errorf("parsing websocket body: %w", err)
370+
}
371+
372+
kb = keysbuilder.FromBuilders(kb, newKB)
362373

363374
next, err := connecter.Connect(ctx, uid, kb)
364375
if err != nil {
@@ -373,11 +384,7 @@ func sendMessagesWebsocket(ctx context.Context, w http.ResponseWriter, r *http.R
373384
return fmt.Errorf("getting next message: %w", err)
374385
}
375386

376-
if err := c.Write(r.Context(), websocket.MessageText, []byte(fmt.Sprintf(`<div id="websocket">Websocket works: %d.</div>`, rand.Intn(1000)))); err != nil {
377-
return fmt.Errorf("write data: %w", err)
378-
}
379-
380-
wr, err := c.Writer(ctx, websocket.MessageText)
387+
wr, err := conn.Writer(ctx, websocket.MessageText)
381388
if err != nil {
382389
return fmt.Errorf("create writer: %w", err)
383390
}

0 commit comments

Comments
 (0)