diff --git a/src/main/java/de/thm/arsnova/entities/User.java b/src/main/java/de/thm/arsnova/entities/User.java index bbe76a586d532b162825ee20d42529b21db454b1..13ae4a9cba5b4f8f2535694ce4132974c0b2414c 100644 --- a/src/main/java/de/thm/arsnova/entities/User.java +++ b/src/main/java/de/thm/arsnova/entities/User.java @@ -67,13 +67,20 @@ public class User implements Serializable { this.type = type; } + @Override public String toString() { - return "User, username: " + this.username + ", type: " + this.type; + return "User [username=" + username + ", type=" + type + "]"; } @Override public int hashCode() { - return username.hashCode(); + // See http://stackoverflow.com/a/113600 + final int theAnswer = 42; + final int theOthers = 37; + + int result = theAnswer; + result = theOthers * result + this.username.hashCode(); + return theOthers * result + this.type.hashCode(); } @Override diff --git a/src/main/java/de/thm/arsnova/services/IUserService.java b/src/main/java/de/thm/arsnova/services/IUserService.java index a045c91e0b21cc8e7949b3e62bd20aae88dc0205..4e94a08f74ac76e0c79f718622712be502efa29a 100644 --- a/src/main/java/de/thm/arsnova/services/IUserService.java +++ b/src/main/java/de/thm/arsnova/services/IUserService.java @@ -39,7 +39,7 @@ public interface IUserService { boolean isUserInSession(User user, String keyword); - List<String> getUsersInSession(String keyword); + List<User> getUsersInSession(String keyword); void addCurrentUserToSessionMap(String keyword); diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java index 617c7cb9e19e9f919173d5c8be94dd66f25e5849..052a3de313dfd19c09a81ac3a3d57597da6a222d 100644 --- a/src/main/java/de/thm/arsnova/services/UserService.java +++ b/src/main/java/de/thm/arsnova/services/UserService.java @@ -41,7 +41,7 @@ public class UserService implements IUserService, InitializingBean, DisposableBe public static final Logger LOGGER = LoggerFactory.getLogger(UserService.class); private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<UUID, User>(); - private static final ConcurrentHashMap<String, String> user2session = new ConcurrentHashMap<String, String>(); + private static final ConcurrentHashMap<User, String> user2session = new ConcurrentHashMap<User, String>(); @Override public User getCurrentUser() { @@ -106,16 +106,16 @@ public class UserService implements IUserService, InitializingBean, DisposableBe public boolean isUserInSession(User user, String keyword) { if (keyword == null) return false; - String session = user2session.get(user.getUsername()); + String session = user2session.get(user); if (session == null) return false; return keyword.equals(session); } @Override - public List<String> getUsersInSession(String keyword) { - List<String> result = new ArrayList<String>(); - for (Entry<String, String> e : user2session.entrySet()) { + public List<User> getUsersInSession(String keyword) { + List<User> result = new ArrayList<User>(); + for (Entry<User, String> e : user2session.entrySet()) { if (e.getValue().equals(keyword)) { result.add(e.getKey()); } @@ -129,7 +129,7 @@ public class UserService implements IUserService, InitializingBean, DisposableBe User user = getCurrentUser(); if (user == null) throw new UnauthorizedException(); - user2session.put(user.getUsername(), keyword); + user2session.put(user, keyword); } @Override @@ -149,7 +149,7 @@ public class UserService implements IUserService, InitializingBean, DisposableBe Hashtable<String, Map<?, ?>> map = (Hashtable<String, Map<?, ?>>) ois.readObject(); ois.close(); Map<UUID, User> s2u = (Map<UUID, User>) map.get("socketid2user"); - Map<String, String> u2s = (Map<String, String>) map.get("user2session"); + Map<User, String> u2s = (Map<User, String>) map.get("user2session"); LOGGER.info("load from store: {}", map); diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index 886851ca3aeb0ecd46d26dd1317bafe00e973ace..6c8ad2c9c36973e53bb84efe75c0dd519888e985 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -202,12 +202,12 @@ public class ARSnovaSocketIOServer { * all connected clients and if send feedback, if user is in current * session */ - List<String> users = userService.getUsersInSession(session); + List<User> users = userService.getUsersInSession(session); de.thm.arsnova.entities.Feedback fb = feedbackService.getFeedback(session); for (SocketIOClient c : server.getAllClients()) { User u = userService.getUser2SocketId(c.getSessionId()); - if (u != null && users.contains(u.getUsername())) { + if (u != null && users.contains(u)) { logger.info("sending out to client {}, username is: {}, current session is: {}", new Object[] { c.getSessionId(), u.getUsername(), session }); c.sendEvent("updateFeedback", fb.getValues());