diff --git a/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java b/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java index cdc0ce474525e179b80b7a77ffa55f4305d86c89..5cefd4ab9bc4c952c2b781a182fb8537c1af24e1 100644 --- a/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java +++ b/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; +import de.thm.arsnova.services.UserService; import de.thm.arsnova.services.UserSessionService; import de.thm.arsnova.socket.ARSnovaSocketIOServer; @@ -18,10 +19,15 @@ public class ARSnovaEventListener implements ApplicationListener<ARSnovaEvent> { private ARSnovaSocketIOServer socketIoServer; @Autowired - private UserSessionService userSessionService; + private UserService userService; @Override public void onApplicationEvent(ARSnovaEvent event) { - userSessionService.sendEventViaWebSocket(socketIoServer, event); + for( UserSessionService userSessionService : userService.getUserSessionServices().values() ) { + if (userSessionService != null) { + LOGGER.info(userSessionService.getUser().getUsername()); + userSessionService.sendEventViaWebSocket(socketIoServer, event); + } + } } } diff --git a/src/main/java/de/thm/arsnova/services/FeedbackService.java b/src/main/java/de/thm/arsnova/services/FeedbackService.java index db7bff304020fdb69d818c6af8156e2f233034c5..d6ab9cd6f58d10082fbff79a736ffa205abbd11d 100644 --- a/src/main/java/de/thm/arsnova/services/FeedbackService.java +++ b/src/main/java/de/thm/arsnova/services/FeedbackService.java @@ -19,6 +19,7 @@ package de.thm.arsnova.services; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -111,6 +112,7 @@ public class FeedbackService implements IFeedbackService { public final boolean saveFeedback(final String keyword, final int value, final User user) { boolean result = feedbackStorage.saveFeedback(keyword, value, user); if (result) { + System.out.println(new Date().toLocaleString()); this.server.reportUpdatedFeedbackForSession(keyword); } return result; diff --git a/src/main/java/de/thm/arsnova/services/IUserService.java b/src/main/java/de/thm/arsnova/services/IUserService.java index 485a75c659cd99fd62b816d3645285968ab6d137..cdf2f93fe9a109cb0568665119ee9f5e14666021 100644 --- a/src/main/java/de/thm/arsnova/services/IUserService.java +++ b/src/main/java/de/thm/arsnova/services/IUserService.java @@ -19,10 +19,10 @@ package de.thm.arsnova.services; -import java.util.Date; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import de.thm.arsnova.entities.User; @@ -55,5 +55,7 @@ public interface IUserService { int loggedInUsers(); - void setLastOnlineActivity(User user, Date date); + void triggerOnlineActivity(User user, UserSessionService uss); + + ConcurrentHashMap<User, UserSessionService> getUserSessionServices(); } diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java index 8adff15bb8191be5415afff3ce8842ff8fd57c7b..0c5a51d3b6ebff87bd7c2b495312d9431f37176d 100644 --- a/src/main/java/de/thm/arsnova/services/UserService.java +++ b/src/main/java/de/thm/arsnova/services/UserService.java @@ -1,7 +1,8 @@ package de.thm.arsnova.services; -import java.util.Date; +import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -40,18 +41,18 @@ public class UserService implements IUserService { /* used for HTTP polling online check solution (legacy) */ private static final ConcurrentHashMap<User, String> user2sessionLegacy = new ConcurrentHashMap<User, String>(); - private static final ConcurrentHashMap<User, Date> lastOnline = new ConcurrentHashMap<User, Date>(); + private static final ConcurrentHashMap<User, UserSessionService> userSessionServices = new ConcurrentHashMap<User, UserSessionService>(); @Override - public void setLastOnlineActivity(User user, Date date) { - lastOnline.put(user, date); + public void triggerOnlineActivity(User user, UserSessionService uss) { + userSessionServices.put(user, uss); LOGGER.info("Updating active user {}", user.getUsername()); - for (Entry<User,Date> e : lastOnline.entrySet()) { + for (Entry<User,UserSessionService> e : userSessionServices.entrySet()) { LOGGER.info("User in Map {}", e.getKey().getUsername()); - if (e.getValue().getTime() < System.currentTimeMillis() - MAX_USER_INACTIVE_SECONDS * 1000) { + if (e.getValue().getLastActivity().getTime() < System.currentTimeMillis() - MAX_USER_INACTIVE_SECONDS * 1000) { LOGGER.info("Removing inactive user {}", e.getKey()); - lastOnline.remove(e.getKey()); + userSessionServices.remove(e.getKey()); this.removeUserFromMaps(e.getKey()); LOGGER.info("Active user count: {}", this.loggedInUsers()); } @@ -208,4 +209,9 @@ public class UserService implements IUserService { public int loggedInUsers() { return user2sessionLegacy.size(); } + + @Override + public ConcurrentHashMap<User, UserSessionService> getUserSessionServices() { + return userSessionServices; + } } diff --git a/src/main/java/de/thm/arsnova/services/UserSessionService.java b/src/main/java/de/thm/arsnova/services/UserSessionService.java index c514a700ddd9de794fead6c7c359b7b70e1f85e9..f2d2de5efd45c35899e78a63002f8a8f42e5370b 100644 --- a/src/main/java/de/thm/arsnova/services/UserSessionService.java +++ b/src/main/java/de/thm/arsnova/services/UserSessionService.java @@ -1,5 +1,6 @@ package de.thm.arsnova.services; +import java.util.Date; import java.util.UUID; import de.thm.arsnova.entities.LoggedIn; @@ -20,6 +21,7 @@ public interface UserSessionService { UUID getSocketId(); LoggedIn keepalive(); + public Date getLastActivity(); void sendEventViaWebSocket(ARSnovaSocketIOServer server, ARSnovaEvent event); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java index 57340a41f8717ae94118d3903b79f62ca7b544ea..ee60dcd268140a6e18fa1084ff1530422ae4732f 100644 --- a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java @@ -80,7 +80,7 @@ public class UserSessionServiceImpl implements UserSessionService, Serializable public LoggedIn keepalive() { if (this.user != null) { this.lastActive = new Date(); - userService.setLastOnlineActivity(this.user, this.lastActive); + userService.triggerOnlineActivity(this.user, this); LoggedIn result = new LoggedIn(); result.setUser(this.user.getUsername()); @@ -91,6 +91,11 @@ public class UserSessionServiceImpl implements UserSessionService, Serializable return new LoggedIn(); } + @Override + public Date getLastActivity() { + return this.lastActive; + } + private boolean hasConnectedWebSocket() { return getSocketId() != null; } diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index b6b2044a6a4b9151027cffd95e5d47f7e2e34b7c..affae3483b19cd61853c930522146cc8cc54c083 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -308,7 +308,7 @@ public class ARSnovaSocketIOServer { public void sendToClient(UUID sessionId, ARSnovaEvent event) { for (SocketIOClient c : server.getAllClients()) { if (c.getSessionId().equals(sessionId)) { - LOGGER.info("Send Event {}", event.getEventName()); + LOGGER.info("Send Event {} -- {}", event.getEventName(), userService.getCurrentUser().getUsername()); c.sendEvent(event.getEventName(), event.getData()); break; }