@@ -37,6 +37,7 @@ import (
37
37
"github.com/coder/coder/v2/codersdk"
38
38
"github.com/coder/coder/v2/codersdk/agentsdk"
39
39
"github.com/coder/coder/v2/codersdk/workspacesdk"
40
+ "github.com/coder/coder/v2/codersdk/wsjson"
40
41
"github.com/coder/coder/v2/tailnet"
41
42
"github.com/coder/coder/v2/tailnet/proto"
42
43
)
@@ -404,11 +405,9 @@ func (api *API) workspaceAgentLogs(rw http.ResponseWriter, r *http.Request) {
404
405
}
405
406
go httpapi .Heartbeat (ctx , conn )
406
407
407
- ctx , wsNetConn := codersdk .WebsocketNetConn ( ctx , conn , websocket .MessageText )
408
- defer wsNetConn .Close () // Also closes conn.
408
+ encoder := wsjson . NewEncoder [[] codersdk.WorkspaceAgentLog ]( conn , websocket .MessageText )
409
+ defer encoder .Close (websocket . StatusNormalClosure )
409
410
410
- // The Go stdlib JSON encoder appends a newline character after message write.
411
- encoder := json .NewEncoder (wsNetConn )
412
411
err = encoder .Encode (convertWorkspaceAgentLogs (logs ))
413
412
if err != nil {
414
413
return
@@ -741,16 +740,8 @@ func (api *API) derpMapUpdates(rw http.ResponseWriter, r *http.Request) {
741
740
})
742
741
return
743
742
}
744
- ctx , nconn := codersdk .WebsocketNetConn (ctx , ws , websocket .MessageBinary )
745
- defer nconn .Close ()
746
-
747
- // Slurp all packets from the connection into io.Discard so pongs get sent
748
- // by the websocket package. We don't do any reads ourselves so this is
749
- // necessary.
750
- go func () {
751
- _ , _ = io .Copy (io .Discard , nconn )
752
- _ = nconn .Close ()
753
- }()
743
+ encoder := wsjson .NewEncoder [* tailcfg.DERPMap ](ws , websocket .MessageBinary )
744
+ defer encoder .Close (websocket .StatusGoingAway )
754
745
755
746
go func (ctx context.Context ) {
756
747
// TODO(mafredri): Is this too frequent? Use separate ping disconnect timeout?
@@ -768,7 +759,7 @@ func (api *API) derpMapUpdates(rw http.ResponseWriter, r *http.Request) {
768
759
err := ws .Ping (ctx )
769
760
cancel ()
770
761
if err != nil {
771
- _ = nconn .Close ()
762
+ _ = ws .Close (websocket . StatusGoingAway , "ping failed" )
772
763
return
773
764
}
774
765
}
@@ -781,9 +772,8 @@ func (api *API) derpMapUpdates(rw http.ResponseWriter, r *http.Request) {
781
772
for {
782
773
derpMap := api .DERPMap ()
783
774
if lastDERPMap == nil || ! tailnet .CompareDERPMaps (lastDERPMap , derpMap ) {
784
- err := json . NewEncoder ( nconn ) .Encode (derpMap )
775
+ err := encoder .Encode (derpMap )
785
776
if err != nil {
786
- _ = nconn .Close ()
787
777
return
788
778
}
789
779
lastDERPMap = derpMap
0 commit comments