From d808266129148336cd2fe45035db5f52f3ff54ec Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Thu, 6 Jun 2013 09:39:01 +0200
Subject: [PATCH] Handle session and user destinated events

---
 .../de/thm/arsnova/events/ARSnovaEvent.java   | 26 +++++++++++++++++++
 .../de/thm/arsnova/events/package-info.java   |  1 +
 .../services/UserSessionServiceImpl.java      | 13 +++++++++-
 3 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/de/thm/arsnova/events/package-info.java

diff --git a/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java b/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java
index 70af1a5a..66886aa1 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 00000000..ff9ff756
--- /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 08fe6404..5264ea76 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);
+		}
 	}
 }
-- 
GitLab