fix error reconnect when using long polling

This commit is contained in:
David Botton 2022-05-12 14:32:08 -04:00
parent 82f749e21f
commit a197942d66
2 changed files with 42 additions and 26 deletions

View file

@ -276,6 +276,7 @@ the default answer. (Private)"
(let ((ws (websocket-driver:make-server env))) (let ((ws (websocket-driver:make-server env)))
(websocket-driver:on :open ws (websocket-driver:on :open ws
(lambda () (lambda ()
(handler-case
(let* ((query (getf env :query-string)) (let* ((query (getf env :query-string))
(items (when query (items (when query
(quri:url-decode-params query))) (quri:url-decode-params query)))
@ -284,20 +285,31 @@ the default answer. (Private)"
:test #'equalp))))) :test #'equalp)))))
(when (typep id 'string) (when (typep id 'string)
(setf id (parse-integer id :junk-allowed t))) (setf id (parse-integer id :junk-allowed t)))
(handle-new-connection ws id)))) (handle-new-connection ws id))
(t (c)
(print env)
(format t "Condition caught in clog-server :open - ~A.~&" c)
(values 0 c)))))
(websocket-driver:on :message ws (websocket-driver:on :message ws
(lambda (msg) (handle-message ws msg))) (lambda (msg)
(handler-case
(handle-message ws msg)
(t (c)
(format t "Condition caught in clog-server :message - ~A.~&" c)
(values 0 c)))))
(websocket-driver:on :close ws (websocket-driver:on :close ws
(lambda (&key code reason) (lambda (&key code reason)
(declare (ignore code reason)) (declare (ignore code reason))
(handle-close-connection ws))) (handler-case
(handle-close-connection ws)
(t (c)
(format t "Condition caught in clog-server :message - ~A.~&" c)
(values 0 c)))))
(lambda (responder) (lambda (responder)
(declare (ignore responder)) (declare (ignore responder))
(websocket-driver:start-connection ws))) (websocket-driver:start-connection ws)))
(t (c) (t (c)
(format t "Condition caught in clog-server - ~A.~&" c) (format t "Condition caught in clog-server start-up - ~A.~&" c)
(values 0 c)))) (values 0 c))))
;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;
@ -656,7 +668,7 @@ the browser contents in case of connection loss."
" "
/*compiled version*/ /*compiled version*/
var ws=null; var ws=null;
var adr; var adr; var adrc;
var clog={}; var clog={};
var pingerid; var pingerid;
var s = document.location.search; var s = document.location.search;
@ -745,14 +757,16 @@ function Open_ws() {
if (location.port != '') { adr = adr + ':' + location.port; } if (location.port != '') { adr = adr + ':' + location.port; }
adr = adr + '/clog'; adr = adr + '/clog';
if (clog['connection_id']) { adr = adr + '?r=' + clog['connection_id'] } if (clog['connection_id']) {
adrc = adr + '?r=' + clog['connection_id'];
} else { adrc = adr }
try { try {
console.log ('connecting to ' + adr); console.log ('connecting to ' + adrc);
ws = new WebSocket (adr); ws = new WebSocket (adrc);
} catch (e) { } catch (e) {
console.log ('trying again, connecting to ' + adr); console.log ('trying again, connecting to ' + adrc);
ws = new WebSocket (adr); ws = new WebSocket (adrc);
} }
if (ws != null) { if (ws != null) {

View file

@ -1,6 +1,6 @@
/*static version*/ /*static version*/
var ws=null; var ws=null;
var adr; var adr; var adrc;
var clog={}; var clog={};
var pingerid; var pingerid;
var s = document.location.search; var s = document.location.search;
@ -89,14 +89,16 @@ function Open_ws() {
if (location.port != '') { adr = adr + ':' + location.port; } if (location.port != '') { adr = adr + ':' + location.port; }
adr = adr + '/clog'; adr = adr + '/clog';
if (clog['connection_id']) { adr = adr + '?r=' + clog['connection_id'] } if (clog['connection_id']) {
adrc = adr + '?r=' + clog['connection_id'];
} else { adrc = adr }
try { try {
console.log ('connecting to ' + adr); console.log ('connecting to ' + adrc);
ws = new WebSocket (adr); ws = new WebSocket (adrc);
} catch (e) { } catch (e) {
console.log ('trying again, connecting to ' + adr); console.log ('trying again, connecting to ' + adrc);
ws = new WebSocket (adr); ws = new WebSocket (adrc);
} }
if (ws != null) { if (ws != null) {