You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2019/04/05 06:29:46 UTC

[wicket] branch master updated: WICKET-6649 Store the applicationName, sessionId and key in WebSocket Text/BinaryMessage and in IWebSocketConnection

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new 12b1fb2  WICKET-6649 Store the applicationName, sessionId and key in WebSocket Text/BinaryMessage and in IWebSocketConnection
12b1fb2 is described below

commit 12b1fb227564c22f4887dea23610be7cb8c5d977
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Fri Apr 5 09:29:24 2019 +0300

    WICKET-6649 Store the applicationName, sessionId and key in WebSocket Text/BinaryMessage and in IWebSocketConnection
---
 .../ws/api/AbstractWebSocketConnection.java        | 28 +++++++++++++++++++++
 .../ws/api/AbstractWebSocketProcessor.java         |  6 ++---
 .../protocol/ws/api/IWebSocketConnection.java      | 18 ++++++++++++++
 .../protocol/ws/api/message/BinaryMessage.java     | 19 ++++++++++----
 .../protocol/ws/api/message/TextMessage.java       | 18 ++++++++++++--
 .../ws/util/tester/TestWebSocketConnection.java    | 29 ++++++++++++++++++++++
 .../ws/util/tester/TestWebSocketProcessor.java     |  2 +-
 .../ws/util/tester/SendPayloadWithContextTest.java |  8 +++++-
 8 files changed, 116 insertions(+), 12 deletions(-)

diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
index 02ae01c..8726d56 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
@@ -16,7 +16,9 @@
  */
 package org.apache.wicket.protocol.ws.api;
 
+import org.apache.wicket.Application;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -24,6 +26,11 @@ import org.apache.wicket.util.lang.Args;
  */
 public abstract class AbstractWebSocketConnection implements IWebSocketConnection
 {
+
+	private final String applicationName;
+	private final String sessionId;
+	private final IKey key;
+
 	private final AbstractWebSocketProcessor webSocketProcessor;
 
 	/**
@@ -34,6 +41,9 @@ public abstract class AbstractWebSocketConnection implements IWebSocketConnectio
 	 */
 	public AbstractWebSocketConnection(AbstractWebSocketProcessor webSocketProcessor)
 	{
+		this.applicationName = webSocketProcessor.getApplication().getName();
+		this.sessionId = webSocketProcessor.getSessionId();
+		this.key = webSocketProcessor.getRegistryKey();
 		this.webSocketProcessor = Args.notNull(webSocketProcessor, "webSocketProcessor");
 	}
 
@@ -42,4 +52,22 @@ public abstract class AbstractWebSocketConnection implements IWebSocketConnectio
 	{
 		webSocketProcessor.broadcastMessage(message);
 	}
+
+	@Override
+	public Application getApplication()
+	{
+		return Application.get(applicationName);
+	}
+
+	@Override
+	public String getSessionId()
+	{
+		return sessionId;
+	}
+
+	@Override
+	public IKey getKey()
+	{
+		return key;
+	}
 }
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
index 90b7a44..1a86128 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
@@ -145,13 +145,13 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 	@Override
 	public void onMessage(final String message)
 	{
-		broadcastMessage(new TextMessage(message));
+		broadcastMessage(new TextMessage(getApplication(), getSessionId(), getRegistryKey(), message));
 	}
 
 	@Override
 	public void onMessage(byte[] data, int offset, int length)
 	{
-		BinaryMessage binaryMessage = new BinaryMessage(data, offset, length);
+		BinaryMessage binaryMessage = new BinaryMessage(getApplication(), getSessionId(), getRegistryKey(), data, offset, length);
 		broadcastMessage(binaryMessage);
 	}
 
@@ -375,7 +375,7 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 		return payload;
 	}
 
-	private IKey getRegistryKey()
+	protected IKey getRegistryKey()
 	{
 		IKey key;
 		if (Strings.isEmpty(resourceName))
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
index 7a492df..82cf6e9 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
@@ -17,7 +17,10 @@
 package org.apache.wicket.protocol.ws.api;
 
 import java.io.IOException;
+
+import org.apache.wicket.Application;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 
 /**
  * Common interface for native WebSocket connections
@@ -76,4 +79,19 @@ public interface IWebSocketConnection
 	 * @since 6.4
 	 */
 	void sendMessage(IWebSocketPushMessage message);
+
+	/**
+	 * @return The application for which this WebSocket connection is registered
+	 */
+	Application getApplication();
+
+	/**
+	 * @return The id of the session for which this WebSocket connection is registered
+	 */
+	String getSessionId();
+
+	/**
+	 * @return The registry key for which this WebSocket connection is registered
+	 */
+	IKey getKey();
 }
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
index 9728e2b..8b1f92d 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
@@ -16,12 +16,15 @@
  */
 package org.apache.wicket.protocol.ws.api.message;
 
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
+
 /**
  * A {@link IWebSocketMessage message} with binary data
  *
  * @since 6.0
  */
-public class BinaryMessage implements IWebSocketMessage
+public class BinaryMessage extends AbstractClientMessage
 {
 	private final byte[] data;
 	private final int offset;
@@ -30,15 +33,21 @@ public class BinaryMessage implements IWebSocketMessage
 	/**
 	 * Constructor.
 	 *
+	 * @param application
+	 *      the Wicket application
+	 * @param sessionId
+	 *      the id of the http session
+	 * @param key
+	 *      the page id or resource name
 	 * @param data
 	 *      the binary message from the client
 	 * @param offset
-	 *      the offset to read from
+ *      the offset to read from
 	 * @param length
-	 *      how much data to read
 	 */
-	public BinaryMessage(byte[] data, int offset, int length)
+	public BinaryMessage(WebApplication application, String sessionId, IKey key, byte[] data, int offset, int length)
 	{
+		super(application, sessionId, key);
 		this.data = data;
 		this.offset = offset;
 		this.length = length;
@@ -58,4 +67,4 @@ public class BinaryMessage implements IWebSocketMessage
 	{
 		return length;
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
index 5893b05..993c94d 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.protocol.ws.api.message;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -23,12 +25,24 @@ import org.apache.wicket.util.lang.Args;
  *
  * @since 6.0
  */
-public class TextMessage implements IWebSocketMessage
+public class TextMessage extends AbstractClientMessage
 {
 	private final CharSequence text;
 
-	public TextMessage(final CharSequence text)
+	/**
+	 *
+	 * @param application
+	 *      the Wicket application
+	 * @param sessionId
+	 *      the id of the http session
+	 * @param key
+	 *      the page id or resource name
+	 * @param text
+	 *      the message sent from the client
+	 */
+	public TextMessage(Application application, String sessionId, IKey key, CharSequence text)
 	{
+		super(application, sessionId, key);
 		this.text = Args.notEmpty(text, "text");
 	}
 
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
index a5c1544..1923f49 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
@@ -18,7 +18,10 @@ package org.apache.wicket.protocol.ws.util.tester;
 
 import java.io.IOException;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 
 /**
  * A WebSocketConnection used for the testing.
@@ -27,8 +30,18 @@ import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
  */
 abstract class TestWebSocketConnection implements IWebSocketConnection
 {
+	private final WebApplication application;
+	private final String sessionId;
+	private final IKey registryKey;
 	private boolean isOpen = true;
 
+	public TestWebSocketConnection(WebApplication application, String sessionId, IKey registryKey)
+	{
+		this.application = application;
+		this.sessionId = sessionId;
+		this.registryKey = registryKey;
+	}
+
 	@Override
 	public boolean isOpen()
 	{
@@ -85,5 +98,21 @@ abstract class TestWebSocketConnection implements IWebSocketConnection
 		}
 	}
 
+	@Override
+	public Application getApplication()
+	{
+		return application;
+	}
 
+	@Override
+	public String getSessionId()
+	{
+		return sessionId;
+	}
+
+	@Override
+	public IKey getKey()
+	{
+		return registryKey;
+	}
 }
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
index f7b55e1..e48b908 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
@@ -126,7 +126,7 @@ abstract class TestWebSocketProcessor extends AbstractWebSocketProcessor
 	@Override
 	public void onOpen(Object connection)
 	{
-		onConnect(new TestWebSocketConnection() {
+		onConnect(new TestWebSocketConnection(getApplication(), getSessionId(), getRegistryKey()) {
 
 			@Override
 			protected void onOutMessage(String message)
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java b/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
index 53429d8..a81e8c8 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
@@ -33,6 +33,7 @@ import org.junit.jupiter.api.Test;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -95,8 +96,13 @@ public class SendPayloadWithContextTest
 			add(new WebSocketBehavior()
 			{
 				@Override
-				protected void onMessage(WebSocketRequestHandler handler, TextMessage ignored)
+				protected void onMessage(WebSocketRequestHandler handler, TextMessage message)
 				{
+					assertNotNull(message.getApplication(), "The application must be available");
+					assertNotNull(message.getSessionId(), "The session id must be available");
+					assertNotNull(message.getKey(), "The key must be available");
+					assertNotNull(message.getText(), "The text must be set");
+
 					// send an outbound message with the current context encoded as String
 					handler.push(String.valueOf(context.get()));
 				}