Skip to content

Commit da1a19f

Browse files
committed
feat: implement websocket,Accept in js (coder#373)
1 parent d1468a7 commit da1a19f

18 files changed

+438
-575
lines changed

accept.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
//go:build !js
2-
// +build !js
3-
41
package websocket
52

63
import (
@@ -167,7 +164,7 @@ func accept(w http.ResponseWriter, r *http.Request, opts *AcceptOptions) (_ *Con
167164
b, _ := brw.Reader.Peek(brw.Reader.Buffered())
168165
brw.Reader.Reset(io.MultiReader(bytes.NewReader(b), netConn))
169166

170-
return newConn(connConfig{
167+
return &Conn{newConn(connConfig{
171168
subprotocol: w.Header().Get("Sec-WebSocket-Protocol"),
172169
rwc: netConn,
173170
client: false,
@@ -178,7 +175,7 @@ func accept(w http.ResponseWriter, r *http.Request, opts *AcceptOptions) (_ *Con
178175

179176
br: brw.Reader,
180177
bw: brw.Writer,
181-
}), nil
178+
})}, nil
182179
}
183180

184181
func verifyClientRequest(w http.ResponseWriter, r *http.Request) (errCode int, _ error) {

close.go renamed to close_std.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
//go:build !js
2-
// +build !js
3-
41
package websocket
52

63
import (
@@ -97,7 +94,7 @@ func CloseStatus(err error) StatusCode {
9794
//
9895
// Close will unblock all goroutines interacting with the connection once
9996
// complete.
100-
func (c *Conn) Close(code StatusCode, reason string) (err error) {
97+
func (c *StdConn) Close(code StatusCode, reason string) (err error) {
10198
defer errd.Wrap(&err, "failed to close WebSocket")
10299

103100
if c.casClosing() {
@@ -130,7 +127,7 @@ func (c *Conn) Close(code StatusCode, reason string) (err error) {
130127

131128
// CloseNow closes the WebSocket connection without attempting a close handshake.
132129
// Use when you do not want the overhead of the close handshake.
133-
func (c *Conn) CloseNow() (err error) {
130+
func (c *StdConn) CloseNow() (err error) {
134131
defer errd.Wrap(&err, "failed to immediately close WebSocket")
135132

136133
if c.casClosing() {
@@ -155,7 +152,7 @@ func (c *Conn) CloseNow() (err error) {
155152
return err
156153
}
157154

158-
func (c *Conn) closeHandshake(code StatusCode, reason string) error {
155+
func (c *StdConn) closeHandshake(code StatusCode, reason string) error {
159156
err := c.writeClose(code, reason)
160157
if err != nil {
161158
return err
@@ -168,7 +165,7 @@ func (c *Conn) closeHandshake(code StatusCode, reason string) error {
168165
return nil
169166
}
170167

171-
func (c *Conn) writeClose(code StatusCode, reason string) error {
168+
func (c *StdConn) writeClose(code StatusCode, reason string) error {
172169
ce := CloseError{
173170
Code: code,
174171
Reason: reason,
@@ -196,7 +193,7 @@ func (c *Conn) writeClose(code StatusCode, reason string) error {
196193
return nil
197194
}
198195

199-
func (c *Conn) waitCloseHandshake() error {
196+
func (c *StdConn) waitCloseHandshake() error {
200197
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
201198
defer cancel()
202199

@@ -228,7 +225,7 @@ func (c *Conn) waitCloseHandshake() error {
228225
}
229226
}
230227

231-
func (c *Conn) waitGoroutines() error {
228+
func (c *StdConn) waitGoroutines() error {
232229
t := time.NewTimer(time.Second * 15)
233230
defer t.Stop()
234231

@@ -328,11 +325,11 @@ func (ce CloseError) bytesErr() ([]byte, error) {
328325
return buf, nil
329326
}
330327

331-
func (c *Conn) casClosing() bool {
328+
func (c *StdConn) casClosing() bool {
332329
return c.closing.Swap(true)
333330
}
334331

335-
func (c *Conn) isClosed() bool {
332+
func (c *StdConn) isClosed() bool {
336333
select {
337334
case <-c.closed:
338335
return true

compress.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
//go:build !js
2-
// +build !js
3-
41
package websocket
52

63
import (

0 commit comments

Comments
 (0)