From 491d0de40aace16d961d6a8f2e4d4646c976cbea Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de>
Date: Sun, 17 Mar 2013 11:36:06 +0100
Subject: [PATCH] Use userService's getUsersInSessionCount instead of
 sessionService's countActiveUsers for reportActiveUserCountForSession as it
 was already the case for reportSessionDataToClient. Added check against null
 for session key in Socket.IO's disconnect handler. Logging adjustments for
 Socket.IO specific code.

---
 .../arsnova/controller/SocketController.java  |  4 ++--
 .../arsnova/socket/ARSnovaSocketIOServer.java | 19 +++++++++++--------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/SocketController.java b/src/main/java/de/thm/arsnova/controller/SocketController.java
index 6b3b11705..eafd424ff 100644
--- a/src/main/java/de/thm/arsnova/controller/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/SocketController.java
@@ -43,7 +43,7 @@ import de.thm.arsnova.socket.ARSnovaSocketIOServer;
 @RequestMapping("/socket")
 public class SocketController extends AbstractController {
 
-	public static final Logger LOGGER = LoggerFactory.getLogger(SessionController.class);
+	public static final Logger LOGGER = LoggerFactory.getLogger(SocketController.class);
 
 	@Autowired
 	private IUserService userService;
@@ -58,7 +58,7 @@ public class SocketController extends AbstractController {
 			return;
 		}
 		User u = userService.getCurrentUser();
-		LOGGER.info("authorize session: " + socketid + ", user is:  " + u);
+		LOGGER.info("Mapping socket {} to user {}.", socketid, u.getUsername());
 		response.setStatus(u != null ? HttpStatus.NO_CONTENT.value() : HttpStatus.UNAUTHORIZED.value());
 		if (u != null) {
 			userService.putUser2SocketId(UUID.fromString(socketid), u);
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index d1e55601b..7f0279ea5 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -115,20 +115,23 @@ public class ARSnovaSocketIOServer {
 		server.addConnectListener(new ConnectListener() {
 			@Override
 			public void onConnect(SocketIOClient client) {
-				logger.info("addConnectListener.onConnect: Client: {}", new Object[] { client });
+				logger.info("Client {} connected.", client.getSessionId());
 			}
 		});
 
 		server.addDisconnectListener(new DisconnectListener() {
 			@Override
 			public void onDisconnect(SocketIOClient client) {
-				logger.info("addDisconnectListener.onDisconnect: Client: {}", new Object[] { client });
-				String sessionKey = userService.getSessionForUser(
-					userService.getUser2SocketId(client.getSessionId()).getUsername()
-				);
-				reportActiveUserCountForSession(sessionKey);
+				logger.info("Client {} disconnected.", client.getSessionId());
+				String username = userService.getUser2SocketId(client.getSessionId()).getUsername();
+				String sessionKey = userService.getSessionForUser(username);
+				logger.info("Removing disconnected user {} (session key: {}).", username, sessionKey);
 				userService.removeUserFromSessionBySocketId(client.getSessionId());
 				userService.removeUser2SocketId(client.getSessionId());
+				if (null != sessionKey) {
+					/* user disconnected before joining a session */
+					reportActiveUserCountForSession(sessionKey);
+				}
 			}
 		});
 
@@ -238,7 +241,7 @@ public class ARSnovaSocketIOServer {
 
 	public void reportActiveUserCountForSession(String sessionKey) {
 		/* This check is needed as long as the HTTP polling solution is active simultaneously. */
-		int count = sessionService.countActiveUsers(sessionKey);
+		int count = userService.getUsersInSessionCount(sessionKey);
 		if (count == lastActiveUserCount) {
 			return;
 		}
@@ -275,7 +278,7 @@ public class ARSnovaSocketIOServer {
 		for (SocketIOClient c : server.getAllClients()) {
 			User u = userService.getUser2SocketId(c.getSessionId());
 			if (u != null && users.contains(u)) {
-				logger.info("sending out to client {}, username is: {}, current session is: {}",
+				logger.debug("sending out to client {}, username is: {}, current session is: {}",
 						new Object[] { c.getSessionId(), u.getUsername(), sessionKey });
 				c.sendEvent(eventName, data);
 			}
-- 
GitLab