Index: lams_tool_doku/web/pages/learning/learning.jsp =================================================================== diff -u -r86f80da26f3ea9088cb699989c6dc96e8d6f1881 -r8a09bf822deb74be4445d5bf2385f8761cd6311d --- lams_tool_doku/web/pages/learning/learning.jsp (.../learning.jsp) (revision 86f80da26f3ea9088cb699989c6dc96e8d6f1881) +++ lams_tool_doku/web/pages/learning/learning.jsp (.../learning.jsp) (revision 8a09bf822deb74be4445d5bf2385f8761cd6311d) @@ -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);