11package main
22
33import (
4+ "context"
45 "crypto/tls"
6+ "github.com/coder/websocket"
57 "github.com/elazarl/goproxy"
6- "github.com/gorilla/websocket"
78 "log"
89 "net/http"
910 "net/url"
@@ -12,26 +13,23 @@ import (
1213 "time"
1314)
1415
15- var _upgrader = websocket.Upgrader {
16- HandshakeTimeout : 10 * time .Second ,
17- }
18-
1916func echo (w http.ResponseWriter , r * http.Request ) {
20- c , err := _upgrader . Upgrade (w , r , nil )
17+ c , err := websocket . Accept (w , r , nil )
2118 if err != nil {
2219 log .Printf ("upgrade: %v\n " , err )
2320 return
2421 }
25- defer c .Close ()
22+ defer c .Close (websocket . StatusNormalClosure , "" )
2623
24+ ctx := context .Background ()
2725 for {
28- mt , message , err := c .ReadMessage ( )
26+ mt , message , err := c .Read ( ctx )
2927 if err != nil {
3028 log .Printf ("read: %v\n " , err )
3129 break
3230 }
3331 log .Printf ("recv: %s\n " , message )
34- if err := c .WriteMessage ( mt , message ); err != nil {
32+ if err := c .Write ( ctx , mt , message ); err != nil {
3533 log .Printf ("write: %v\n " , err )
3634 break
3735 }
@@ -74,27 +72,30 @@ func main() {
7472 log .Fatal ("unable to parse proxy URL" )
7573 }
7674
77- dialer := websocket.Dialer {
78- Subprotocols : []string {"p1" },
79- TLSClientConfig : & tls.Config {
80- InsecureSkipVerify : true ,
81- },
82- Proxy : http .ProxyURL (parsedProxy ),
83- }
84-
75+ ctx := context .Background ()
8576 endpointUrl := "wss://localhost:12345"
86- c , _ , err := dialer .Dial (endpointUrl , nil )
77+
78+ c , _ , err := websocket .Dial (ctx , endpointUrl , & websocket.DialOptions {
79+ HTTPClient : & http.Client {
80+ Transport : & http.Transport {
81+ TLSClientConfig : & tls.Config {
82+ InsecureSkipVerify : true ,
83+ },
84+ Proxy : http .ProxyURL (parsedProxy ),
85+ },
86+ },
87+ Subprotocols : []string {"p1" },
88+ })
8789 if err != nil {
8890 log .Fatal ("dial:" , err )
8991 }
90- defer c .Close ()
9192
9293 done := make (chan struct {})
9394
9495 go func () {
9596 defer close (done )
9697 for {
97- _ , message , err := c .ReadMessage ( )
98+ _ , message , err := c .Read ( ctx )
9899 if err != nil {
99100 log .Println ("read:" , err )
100101 return
@@ -110,15 +111,15 @@ func main() {
110111 select {
111112 case t := <- ticker .C : // Message send
112113 // Write current time to the websocket client every 1 second
113- if err := c .WriteMessage ( websocket .TextMessage , []byte (t .String ())); err != nil {
114+ if err := c .Write ( ctx , websocket .MessageText , []byte (t .String ())); err != nil {
114115 log .Println ("write:" , err )
115116 return
116117 }
117118 case <- interrupt : // Server shutdown
118119 log .Println ("interrupt" )
119120 // To cleanly close a connection, a client should send a close
120121 // frame and wait for the server to close the connection.
121- err := c .WriteMessage (websocket .CloseMessage , websocket . FormatCloseMessage ( websocket . CloseNormalClosure , "" ) )
122+ err := c .Close (websocket .StatusNormalClosure , "" )
122123 if err != nil {
123124 log .Println ("write close:" , err )
124125 return
0 commit comments