Index: lams_tool_leader/web/pages/learning/leaderselection.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_leader/web/pages/learning/leaderselection.jsp,v diff -u -r1.2.2.7 -r1.2.2.8 --- lams_tool_leader/web/pages/learning/leaderselection.jsp 13 May 2017 06:28:43 -0000 1.2.2.7 +++ lams_tool_leader/web/pages/learning/leaderselection.jsp 24 May 2017 05:42:30 -0000 1.2.2.8 @@ -28,16 +28,37 @@ //init the connection with server using server URL but with different protocol var leaderWebsocket = new WebSocket(''.replace('http', 'ws') - + 'learningWebsocket?toolSessionID=' + ${toolSessionID}); + + 'learningWebsocket?toolSessionID=' + ${toolSessionID}), + leaderWebsocketPingTimeout = null, + leaderWebsocketPingFunc = null; + + leaderWebsocketPingFunc = function(skipPing){ + if (leaderWebsocket.readyState == leaderWebsocket.CLOSING + || leaderWebsocket.readyState == leaderWebsocket.CLOSED){ + location.reload(); + } + + // check and ping every 3 minutes + leaderWebsocketPingTimeout = setTimeout(leaderWebsocketPingFunc, 3*60*1000); + // initial set up does not send ping + if (!skipPing) { + leaderWebsocket.send("ping"); + } + }; + // set up timer for the first time + leaderWebsocketPingFunc(true); leaderWebsocket.onclose = function(e){ + // react only on abnormal close if (e.code === 1006) { location.reload(); } }; // run when the leader has just been selected leaderWebsocket.onmessage = function(e) { + // no need to reset ping timer as the only possible message is page refresh + // create JSON object var input = JSON.parse(e.data);