diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 9dc98f082faccd9edbf349cc64bf7a2908b90503..6efdcfc9db7e1818b0d8c7528360028584ed649f 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -18,6 +18,8 @@ */ package de.thm.arsnova.services; +import java.util.List; + import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; @@ -33,4 +35,5 @@ public interface ISessionService { public String generateKeyword(); public void addUserToSessionMap(String username, String keyword); public boolean isUserInSession(User user, String keyword); + public List<String> getUsersInSession(String keyword); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 29abd915f7dbf541f5d70879e81c83aae46c5f78..d113764f420269f8a4a03dd42e91c373c307b270 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; +import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import net.sf.json.JSONObject; @@ -223,10 +224,21 @@ public class SessionService implements ISessionService { return keyword.equals(session); } + @Override + public List<String> getUsersInSession(String keyword) { + List<String> result = new ArrayList<String>(); + for(Entry<String, String> e : user2session.entrySet()) { + if(e.getValue().equals(keyword)) { + result.add(e.getKey()); + } + } + return result; + } + @Override @Transactional(isolation=Isolation.READ_COMMITTED) public void addUserToSessionMap(String username, String keyword) { - user2session.putIfAbsent(username, keyword); + user2session.put(username, keyword); } private String getSessionId(String keyword) { diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index 541f0b66cfddab0a2bdab26490189c95259fc64d..93e061eee6b81ea43d47937ba3403ec789da8672 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -3,6 +3,7 @@ package de.thm.arsnova.socket; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -66,13 +67,29 @@ public class ARSnovaSocketIOServer { new DataListener<Feedback>() { @Override public void onData(SocketIOClient client, Feedback data) { + /** + * do a check if user is in the session, for which he would give a feedback + */ User u = session2user.get(client.getSessionId().toString()); if(u == null || sessionService.isUserInSession(u, data.getSessionkey()) == false) { return; } sessionService.postFeedback(data.getSessionkey(), data.getValue(), u); + + /** + * collect a list of users which are in the current session + * iterate over all connected clients and if send feedback, + * if user is in current session + */ + List<String> users = sessionService.getUsersInSession(data.getSessionkey()); de.thm.arsnova.entities.Feedback fb = sessionService.getFeedback(data.getSessionkey()); - server.getBroadcastOperations().sendEvent("updateFeedback", fb.getValues()); + + for(SocketIOClient c : server.getAllClients()) { + u = session2user.get(c.getSessionId().toString()); + if(u != null && users.contains(u.getUsername())) { + c.sendEvent("updateFeedback", fb.getValues()); + } + } } });