diff --git a/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java b/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java index 70af1a5a62ec7bbfbea98183832c79c4daa8748b..66886aa13608bad801f40a7d5c884a6d9c9f1ab8 100644 --- a/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java +++ b/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java @@ -2,19 +2,37 @@ package de.thm.arsnova.events; import org.springframework.context.ApplicationEvent; +import de.thm.arsnova.entities.User; + public class ARSnovaEvent extends ApplicationEvent { private static final long serialVersionUID = 1L; private String sessionKey; + private User user; private String eventName; private Object data; + private Destination destination; + public enum Destination { + USER, + SESSION + }; + public ARSnovaEvent(Object source, String sKey, String eName, Object d) { super(source); this.data = d; this.eventName = eName; this.sessionKey = sKey; + this.destination = Destination.SESSION; + } + + public ARSnovaEvent(Object source, User recipient, String eName, Object d) { + super(source); + this.data = d; + this.eventName = eName; + this.user = recipient; + this.destination = Destination.USER; } public String getSessionKey() { @@ -28,4 +46,12 @@ public class ARSnovaEvent extends ApplicationEvent { public Object getData() { return data; } + + public User getRecipient() { + return user; + } + + public Destination getDestinationType() { + return destination; + } } diff --git a/src/main/java/de/thm/arsnova/events/package-info.java b/src/main/java/de/thm/arsnova/events/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..ff9ff7561a24f40b8ed4da00cf0480cef6d0ac5d --- /dev/null +++ b/src/main/java/de/thm/arsnova/events/package-info.java @@ -0,0 +1 @@ +package de.thm.arsnova.events; diff --git a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java index 08fe6404dafe451ad07513f9d12ab3371e1e9bf6..5264ea760f074e7a929532a3ac1d300c7c13a4a1 100644 --- a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; import de.thm.arsnova.events.ARSnovaEvent; +import de.thm.arsnova.events.ARSnovaEvent.Destination; import de.thm.arsnova.socket.ARSnovaSocketIOServer; @Component @@ -56,11 +57,21 @@ public class UserSessionServiceImpl implements UserSessionService { @Override public void sendEventViaWebSocket(ARSnovaSocketIOServer server, ARSnovaEvent event) { if ( - hasConnectedWebSocket() + event.getDestinationType() == Destination.SESSION + && hasConnectedWebSocket() && event != null && session != null && event.getSessionKey().equals(session.getKeyword()) ) { server.sendToClient(getSocketId(), event); } + + if ( + event.getDestinationType() == Destination.USER + && hasConnectedWebSocket() + && event != null && user != null + && event.getRecipient().getUsername().equals(user.getUsername()) + ) { + server.sendToClient(getSocketId(), event); + } } }