Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -r7e4b8f931ea9c503f32cbd7d06563fd875219544 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 7e4b8f931ea9c503f32cbd7d06563fd875219544) @@ -294,14 +294,21 @@ * The scribe or a Monitor has force completed the activity. Browsers will refresh and display report summary. */ static void sendCloseRequest(Long toolSessionId) throws JSONException, IOException { + Set sessionWebsockets = LearningWebsocketServer.websockets.get(toolSessionId); + if (sessionWebsockets == null) { + return; + } + // make a copy of the websocket collection so it does not get blocked while sending messages + sessionWebsockets = new HashSet(sessionWebsockets); + JSONObject responseJSON = new JSONObject(); responseJSON.put("close", true); String response = responseJSON.toString(); - // make a copy of the websocket collection so it does not get blocked while sending messages - Set sessionWebsockets = new HashSet(LearningWebsocketServer.websockets.get(toolSessionId)); for (Session websocket : sessionWebsockets) { - websocket.getBasicRemote().sendText(response); + if (websocket.isOpen()) { + websocket.getBasicRemote().sendText(response); + } } }