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