Index: lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java =================================================================== diff -u -r9c603f82a3332d5e2e5b290bcc550f263c09a8f8 -rce468d42d82aebffd852640018c2e80e8b42a914 --- lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java (.../PresenceWebsocketServer.java) (revision 9c603f82a3332d5e2e5b290bcc550f263c09a8f8) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java (.../PresenceWebsocketServer.java) (revision ce468d42d82aebffd852640018c2e80e8b42a914) @@ -295,11 +295,13 @@ return; } JSONObject requestJSON = new JSONObject(input); - String requestType = requestJSON.getString("type"); - if (requestType.equals("message")) { + switch (requestJSON.getString("type")) { + case "message": PresenceWebsocketServer.storeMessage(requestJSON, session); - } else if (requestType.equals("fetchConversation")) { + break; + case "fetchConversation": PresenceWebsocketServer.sendConversation(requestJSON, session); + break; } } @@ -380,6 +382,21 @@ return messageJSON; } + public static int getActiveUserCount(long lessonId) { + Set lessonWebsockets = PresenceWebsocketServer.websockets.get(lessonId); + if (lessonWebsockets == null) { + return 0; + } + // there can be few websockets (browser windows) for a single learner + Set activeNicknames = new TreeSet(); + synchronized (lessonWebsockets) { + for (Websocket websocket : lessonWebsockets) { + activeNicknames.add(websocket.nickName); + } + } + return activeNicknames.size(); + } + private static IPresenceChatService getPresenceChatService() { if (PresenceWebsocketServer.presenceChatService == null) { WebApplicationContext ctx = WebApplicationContextUtils Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -r3dbf966d900adefc34cdad501d3c392118451cd9 -rce468d42d82aebffd852640018c2e80e8b42a914 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 3dbf966d900adefc34cdad501d3c392118451cd9) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision ce468d42d82aebffd852640018c2e80e8b42a914) @@ -38,6 +38,7 @@ import org.apache.struts.action.ActionMapping; import org.apache.tomcat.util.json.JSONException; import org.apache.tomcat.util.json.JSONObject; +import org.lamsfoundation.lams.learning.presence.PresenceWebsocketServer; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; import org.lamsfoundation.lams.learning.web.bean.ActivityURL; @@ -257,6 +258,15 @@ return mapping.findForward("displayProgress"); } + public ActionForward getPresenceChatActiveUserCount(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) throws IOException { + Long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + int count = PresenceWebsocketServer.getActiveUserCount(lessonId); + response.setContentType("text/plain;charset=utf-8"); + response.getWriter().print(count); + return null; + } + /** * Converts an activity in learner progress to a JSON object. */ Index: lams_monitoring/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rf295ad79de8fe9d221c166fa90587d0be2fdda5b -rce468d42d82aebffd852640018c2e80e8b42a914 --- lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision f295ad79de8fe9d221c166fa90587d0be2fdda5b) +++ lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ce468d42d82aebffd852640018c2e80e8b42a914) @@ -221,6 +221,7 @@ lesson.enable.presence =Allow learners to see who is online lesson.enable.presence.alert =Now learners can see who is online lesson.disable.presence.alert =Now learners can not see who is online +lesson.presence.count =users lesson.enable.im =Enable Instant Messaging lesson.enable.im.alert =Instant Messaging is now enabled lesson.disable.im.alert =Instant Messaging is now disabled Index: lams_monitoring/web/includes/javascript/monitorLesson.js =================================================================== diff -u -r27a58f395dec9927221147dac08a0b75213fd354 -rce468d42d82aebffd852640018c2e80e8b42a914 --- lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 27a58f395dec9927221147dac08a0b75213fd354) +++ lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision ce468d42d82aebffd852640018c2e80e8b42a914) @@ -489,21 +489,21 @@ counter = $('#presenceAvailableCount'); if (checked) { $.ajax({ - dataType : 'json', - url : LAMS_URL + 'PresenceChat.do', + dataType : 'text', + url : LAMS_URL + 'learning/learner.do', cache : false, data : { - 'method' : 'getChatContent', + 'method' : 'getPresenceChatActiveUserCount', 'lessonID' : lessonId }, success : function(result) { - $('span', counter).text(result.roster.length); - counter.css('display', null); + $('span', counter).text(result); + counter.show(); } }); } else { - counter.css('display', 'none'); + counter.hide(); } }