@@ -242,6 +242,7 @@ It may also be used from an asynchronous handler.
242
242
``` clojure
243
243
(fn [request respond raise]
244
244
(respond #:ring.websocket{:listener websocket-listener}))
245
+ ```
245
246
246
247
A websocket response contains the following keys. Any key not marked as
247
248
** required** may be omitted.
@@ -275,14 +276,35 @@ protocol:
275
276
(on-close [listener socket code reason]))
276
277
```
277
278
278
- The arguments are described as follows:
279
+ #### on-open
280
+
281
+ Called once when the websocket is first opened. Supplies a ` socket `
282
+ argument that satisfies ` ring.websocket/Socket ` , described in section
283
+ 3.3.
284
+
285
+ #### on-message
286
+
287
+ Called when a text or binary message frame is received from the client.
288
+ The ` message ` argument may be a ` String ` or a ` java.nio.ByteBuffer `
289
+ depending on whether the message is text or binary.
290
+
291
+ #### on-pong
292
+
293
+ Called when a "pong" frame is received from the client. The ` data `
294
+ argument is a ` java.nio.ByteBuffer ` that contains optional client
295
+ session data.
279
296
280
- * ` socket ` - described in section 3.3.
281
- * ` message ` - a ` String ` or ` java.nio.ByteBuffer ` containing a message
282
- * ` data ` - a ` java.nio.ByteBuffer ` containing pong data
283
- * ` throwable ` - an error inheriting from ` java.lang.Throwable `
284
- * ` code ` - an integer from 1000 to 4999
285
- * ` reason ` - a string describing the reason for closing the socket
297
+ #### on-error
298
+
299
+ Called when an error occurs. This may cause the websocket to be closed.
300
+ The ` throwable ` argument is a ` java.lang.Throwable ` that was generated
301
+ by the error.
302
+
303
+ #### on-close
304
+
305
+ Called once when the websocket is closed. Guaranteed to be called, even
306
+ if an error occurs, so may be used for finalizing/cleanup logic. Takes
307
+ an integer ` code ` and a string ` reason ` as arguments.
286
308
287
309
### 3.3. Websocket Sockets
288
310
@@ -294,19 +316,44 @@ A socket must satisfy the `ring.websocket/Socket` protocol:
294
316
(-send [socket message])
295
317
(-ping [socket data])
296
318
(-pong [socket data])
297
- (-close [socket status reason]))
319
+ (-close [socket code reason]))
298
320
```
299
321
300
- The types of the arguments are the same as those described for the
301
- ` Listener ` protocol. The ` -open? ` method must return true or false.
302
-
303
322
It * may* optionally satisfy the ` ring.websocket/AsyncSocket ` protocol:
304
323
305
324
``` clojure
306
325
(defprotocol AsyncSocket
307
326
(-send-async [socket message succeed fail]))
308
327
```
309
328
310
- Where ` succeed ` is a callback function that expects zero arguments, and
311
- ` fail ` is a callback function expecting a single ` java.lang.Throwable `
312
- argument.
329
+ #### -open?
330
+
331
+ Returns a truthy or falsey value denoting whether the socket is
332
+ currently connected to the client.
333
+
334
+ #### -send
335
+
336
+ Sends a websocket message frame that may be a ` String ` (for text), or
337
+ a ` java.nio.ByteBuffer ` (for binary).
338
+
339
+ #### -send-async
340
+
341
+ As above, but does not block and requires two callback functions:
342
+
343
+ - ` succeed ` is called with zero arguments when the send succeeds
344
+ - ` fail ` is called with a single ` java.lang.Throwable ` argument when the
345
+ send fails
346
+
347
+ #### -ping
348
+
349
+ Sends a websocket ping frame with a ` java.nio.ByteBuffer ` of session
350
+ data (which may be empty).
351
+
352
+ #### -pong
353
+
354
+ Sends an unsolicited pong frame with a ` java.nio.ByteBuffer ` of session
355
+ data (which may be empty).
356
+
357
+ #### -close
358
+
359
+ Closes the websocket with the supplied integer code and reason string.
0 commit comments