Index: lams_tool_doku/web/pages/learning/learning.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_doku/web/pages/learning/learning.jsp,v diff -u -r1.5 -r1.6 --- lams_tool_doku/web/pages/learning/learning.jsp 4 May 2017 13:33:32 -0000 1.5 +++ lams_tool_doku/web/pages/learning/learning.jsp 24 May 2017 05:42:33 -0000 1.6 @@ -96,14 +96,39 @@ //init the connection with server using server URL but with different protocol var dokuWebsocket = new WebSocket(''.replace('http', 'ws') - + 'learningWebsocket?toolContentID=' + ${toolContentID}); + + 'learningWebsocket?toolContentID=' + ${toolContentID}), + dokuWebsocketPingTimeout = null, + dokuWebsocketPingFunc = null; + dokuWebsocketPingFunc = function(skipPing){ + if (dokuWebsocket.readyState == dokuWebsocket.CLOSING + || dokuWebsocket.readyState == dokuWebsocket.CLOSED){ + location.reload(); + } + + // check and ping every 3 minutes + dokuWebsocketPingTimeout = setTimeout(dokuWebsocketPingFunc, 3*60*1000); + // initial set up does not send ping + if (!skipPing) { + dokuWebsocket.send("ping"); + } + }; + // set up timer for the first time + dokuWebsocketPingFunc(true); + dokuWebsocket.onclose = function(){ - location.reload(); + // react only on abnormal close + if (e.code === 1006) { + location.reload(); + } }; // run when the server pushes new reports and vote statistics dokuWebsocket.onmessage = function(e) { + // reset ping timer + clearTimeout(dokuWebsocketPingTimeout); + dokuWebsocketPingFunc(true); + // create JSON object var input = JSON.parse(e.data);