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