|
775 | 775 | ;; No conn send/recv activity w/in kalive window
|
776 | 776 | ;; so send ping to client. Should trigger close
|
777 | 777 | ;; if conn is broken.
|
778 |
| - (interfaces/sch-send! server-ch websocket? |
779 |
| - (pack packer :chsk/ws-ping))) |
780 |
| - (recur udt-t1)))))) |
| 778 | + ;; |
| 779 | + ;; Might be nice to expect pong reply? Ref. #423 |
| 780 | + (interfaces/sch-send! server-ch websocket? |
| 781 | + (pack packer :chsk/ws-ping))) |
| 782 | + |
| 783 | + (recur udt-t1)))))) |
781 | 784 |
|
782 | 785 | ;; Ajax handshake/poll
|
783 | 786 | (let [_ (tracef "New Ajax handshake/poll: %s (%s)" uid sch-uuid)
|
|
805 | 808 | (assert websocket?)
|
806 | 809 | (upd-conn! :ws uid client-id)
|
807 | 810 | (let [[clj ?cb-uuid] (unpack packer req-ppstr)]
|
808 |
| - (receive-event-msg! clj ; Should be ev |
809 |
| - (when ?cb-uuid |
810 |
| - (fn reply-fn [resp-clj] ; Any clj form |
811 |
| - (tracef "Chsk send (ws reply): %s" resp-clj) |
812 |
| - ;; true iff apparent success: |
| 811 | + ;; clj should be ev |
| 812 | + (if (= clj [:chsk/ws-ping]) |
| 813 | + (do |
| 814 | + ;; Auto reply to ping |
| 815 | + (when-let [cb-uuid ?cb-uuid] |
813 | 816 | (interfaces/sch-send! server-ch websocket?
|
814 |
| - (pack packer resp-clj ?cb-uuid))))))) |
| 817 | + (pack packer "pong" cb-uuid))) |
| 818 | + |
| 819 | + (receive-event-msg! clj nil)) |
| 820 | + |
| 821 | + (receive-event-msg! clj |
| 822 | + (when ?cb-uuid |
| 823 | + (fn reply-fn [resp-clj] ; Any clj form |
| 824 | + (tracef "Chsk send (ws reply): %s" resp-clj) |
| 825 | + ;; true iff apparent success: |
| 826 | + (interfaces/sch-send! server-ch websocket? |
| 827 | + (pack packer resp-clj ?cb-uuid)))))))) |
815 | 828 |
|
816 | 829 | :on-close ; We rely on `on-close` to trigger for _every_ conn!
|
817 | 830 | (fn [server-ch websocket? _status]
|
|
1373 | 1386 | ;; No conn send/recv activity w/in kalive window
|
1374 | 1387 | ;; so send ping to server. Should trigger close
|
1375 | 1388 | ;; if conn is broken.
|
1376 |
| - (-chsk-send! chsk [:chsk/ws-ping] {:flush? true}))) |
| 1389 | + (-chsk-send! chsk [:chsk/ws-ping] |
| 1390 | + {:flush? true |
| 1391 | + :timeout-ms 5000 ; TODO Configurable |
| 1392 | + :cb ; Server will auto reply |
| 1393 | + (fn [reply] |
| 1394 | + (when (and (have-handle?) (not= reply "pong") #_(= reply :chsk/timeout)) |
| 1395 | + (-chsk-disconnect! chsk :ws-ping-timeout) |
| 1396 | + (-chsk-connect! chsk)))}))) |
1377 | 1397 | (recur)))))
|
1378 | 1398 |
|
1379 | 1399 | chsk)))
|
|
0 commit comments