From 8a3c0b04782d75ba062a77d17d38d748cbb58d9e Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de> Date: Fri, 8 Mar 2013 09:02:15 +0100 Subject: [PATCH] Active user count is now broadcasted via Socket.IO when **/online URL is requested. --- .../java/de/thm/arsnova/services/SessionService.java | 11 ++++++++--- .../de/thm/arsnova/socket/ARSnovaSocketIOServer.java | 6 ++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index a568c205..52343f34 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -38,6 +38,7 @@ import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; import de.thm.arsnova.exceptions.ForbiddenException; +import de.thm.arsnova.socket.ARSnovaSocketIOServer; @Service public class SessionService implements ISessionService { @@ -49,7 +50,10 @@ public class SessionService implements ISessionService { @Autowired private IUserService userService; - + + @Autowired + private ARSnovaSocketIOServer socketIoServer; + @Autowired(required=false) private ConnectorClient connectorClient; @@ -61,15 +65,16 @@ public class SessionService implements ISessionService { @Authenticated public final Session joinSession(final String keyword) { userService.addCurrentUserToSessionMap(keyword); + socketIoServer.reportActiveUserCountForSession(keyword); + Session session = databaseDao.getSession(keyword); - if (connectorClient != null && session.isCourseSession()) { String courseid = session.getCourseId(); if (!connectorClient.getMembership(userService.getCurrentUser().getUsername(), courseid).isMember()) { throw new ForbiddenException(); } } - + return session; } diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index 456123f9..5e5eb9ee 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -54,6 +54,8 @@ public class ARSnovaSocketIOServer { private String storepass; private final Configuration config; private SocketIOServer server; + + private int lastActiveUserCount = 0; public ARSnovaSocketIOServer() { config = new Configuration(); @@ -221,6 +223,10 @@ public class ARSnovaSocketIOServer { public void reportActiveUserCountForSession(String sessionKey) { int count = sessionService.countActiveUsers(sessionKey); + if (count == lastActiveUserCount) { + return; + } + lastActiveUserCount = count; broadcastInSession(sessionKey, "updateActiveUserCount", count); } -- GitLab