1 package websocket_test
2
3 import (
4 "context"
5 "log"
6 "net/http"
7 "time"
8
9 "nhooyr.io/websocket"
10 "nhooyr.io/websocket/wsjson"
11 )
12
13 func ExampleAccept() {
14
15
16
17 fn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
18 c, err := websocket.Accept(w, r, nil)
19 if err != nil {
20 log.Println(err)
21 return
22 }
23 defer c.CloseNow()
24
25 ctx, cancel := context.WithTimeout(r.Context(), time.Second*10)
26 defer cancel()
27
28 var v interface{}
29 err = wsjson.Read(ctx, c, &v)
30 if err != nil {
31 log.Println(err)
32 return
33 }
34
35 c.Close(websocket.StatusNormalClosure, "")
36 })
37
38 err := http.ListenAndServe("localhost:8080", fn)
39 log.Fatal(err)
40 }
41
42 func ExampleDial() {
43
44
45
46 ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
47 defer cancel()
48
49 c, _, err := websocket.Dial(ctx, "ws://localhost:8080", nil)
50 if err != nil {
51 log.Fatal(err)
52 }
53 defer c.CloseNow()
54
55 err = wsjson.Write(ctx, c, "hi")
56 if err != nil {
57 log.Fatal(err)
58 }
59
60 c.Close(websocket.StatusNormalClosure, "")
61 }
62
63 func ExampleCloseStatus() {
64
65
66
67 ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
68 defer cancel()
69
70 c, _, err := websocket.Dial(ctx, "ws://localhost:8080", nil)
71 if err != nil {
72 log.Fatal(err)
73 }
74 defer c.CloseNow()
75
76 _, _, err = c.Reader(ctx)
77 if websocket.CloseStatus(err) != websocket.StatusNormalClosure {
78 log.Fatalf("expected to be disconnected with StatusNormalClosure but got: %v", err)
79 }
80 }
81
82 func Example_writeOnly() {
83
84
85 fn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
86 c, err := websocket.Accept(w, r, nil)
87 if err != nil {
88 log.Println(err)
89 return
90 }
91 defer c.CloseNow()
92
93 ctx, cancel := context.WithTimeout(r.Context(), time.Minute*10)
94 defer cancel()
95
96 ctx = c.CloseRead(ctx)
97
98 t := time.NewTicker(time.Second * 30)
99 defer t.Stop()
100
101 for {
102 select {
103 case <-ctx.Done():
104 c.Close(websocket.StatusNormalClosure, "")
105 return
106 case <-t.C:
107 err = wsjson.Write(ctx, c, "hi")
108 if err != nil {
109 log.Println(err)
110 return
111 }
112 }
113 }
114 })
115
116 err := http.ListenAndServe("localhost:8080", fn)
117 log.Fatal(err)
118 }
119
120 func Example_crossOrigin() {
121
122
123 fn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
124 c, err := websocket.Accept(w, r, &websocket.AcceptOptions{
125 OriginPatterns: []string{"example.com"},
126 })
127 if err != nil {
128 log.Println(err)
129 return
130 }
131 c.Close(websocket.StatusNormalClosure, "cross origin WebSocket accepted")
132 })
133
134 err := http.ListenAndServe("localhost:8080", fn)
135 log.Fatal(err)
136 }
137
138 func ExampleConn_Ping() {
139
140
141 ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
142 defer cancel()
143
144 c, _, err := websocket.Dial(ctx, "ws://localhost:8080", nil)
145 if err != nil {
146 log.Fatal(err)
147 }
148 defer c.CloseNow()
149
150
151 ctx = c.CloseRead(ctx)
152
153 for i := 0; i < 5; i++ {
154 err = c.Ping(ctx)
155 if err != nil {
156 log.Fatal(err)
157 }
158 }
159
160 c.Close(websocket.StatusNormalClosure, "")
161 }
162
163
164 func Example_fullStackChat() {
165
166 }
167
168
169 func Example_echo() {
170
171 }
172
View as plain text