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

reiern70 pushed a commit to branch improvement/reiern70/WICKET-6967
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 0ef90df522c4309cae3923f080b54eaf17dd645d
Author: reiern70 <[email protected]>
AuthorDate: Fri Apr 1 13:10:54 2022 -0600

    [WICKET-6967] allow sending asynchronous messages
---
 .../protocol/ws/api/IWebSocketConnection.java      | 50 ++++++++++++++++++++++
 .../ws/util/tester/TestWebSocketConnection.java    | 34 ++++++++++++++-
 .../ws/javax/JavaxWebSocketConnection.java         | 45 ++++++++++++++++++-
 3 files changed, 125 insertions(+), 4 deletions(-)

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 82cf6e9..dea6e60 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,6 +17,7 @@
 package org.apache.wicket.protocol.ws.api;
 
 import java.io.IOException;
+import java.util.concurrent.Future;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
@@ -55,6 +56,27 @@ public interface IWebSocketConnection
         */
        IWebSocketConnection sendMessage(String message) throws IOException;
 
+    /**
+     * Sends a text message to the client.
+     *
+     * @param message
+     *      the text message
+     * @return a {@link java.util.concurrent.Future} representing the send 
operation
+     *
+     */
+    Future<Void> sendAsynchronousMessage(String message);
+
+    /**
+     * Sends a text message to the client.
+     *
+     * @param message
+     *      the text message
+     * @param timeOut
+     *      the timeout for operation
+     * @return a {@link java.util.concurrent.Future} representing the send 
operation
+     */
+    Future<Void> sendAsynchronousMessage(String message, long timeOut);
+
        /**
         * Sends a binary message to the client.
         *
@@ -69,6 +91,34 @@ public interface IWebSocketConnection
         */
        IWebSocketConnection sendMessage(byte[] message, int offset, int 
length) throws IOException;
 
+    /**
+     * Sends a binary message to the client.
+     *
+     * @param message
+     *      the binary message
+     * @param offset
+     *      the offset to read from
+     * @param length
+     *      how much data to read
+     * @return a {@link java.util.concurrent.Future} representing the send 
operation
+     */
+    Future<Void> sendAsynchronousMessage(byte[] message, int offset, int 
length);
+
+    /**
+     * Sends a binary message to the client.
+     *
+     * @param message
+     *      the binary message
+     * @param offset
+     *      the offset to read from
+     * @param length
+     *      how much data to read
+     * @param timeOut
+     *      *      the timeout for operation
+     * @return a {@link java.util.concurrent.Future} representing the send 
operation
+     */
+    Future<Void> sendAsynchronousMessage(byte[] message, int offset, int 
length, long timeOut);
+
        /**
         * Broadcasts a push message to the wicket page (and it's components) 
associated with this
         * connection. The components can then send messages or component 
updates to client by adding
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 1923f49..fda3245 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
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.ws.util.tester;
 
 import java.io.IOException;
+import java.util.concurrent.Future;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.protocol.http.WebApplication;
@@ -62,7 +63,22 @@ abstract class TestWebSocketConnection implements 
IWebSocketConnection
                return this;
        }
 
-       @Override
+    @Override
+    public Future<Void> sendAsynchronousMessage(String message)
+    {
+        checkOpenness();
+        onOutMessage(message);
+        return null;
+    }
+
+    @Override
+    public Future<Void> sendAsynchronousMessage(String message, long timeOut) {
+        checkOpenness();
+        onOutMessage(message);
+        return null;
+    }
+
+    @Override
        public IWebSocketConnection sendMessage(byte[] message, int offset, int 
length) throws IOException
        {
                checkOpenness();
@@ -70,7 +86,21 @@ abstract class TestWebSocketConnection implements 
IWebSocketConnection
                return this;
        }
 
-       /**
+    @Override
+    public Future<Void> sendAsynchronousMessage(byte[] message, int offset, 
int length) {
+        checkOpenness();
+        onOutMessage(message, offset, length);
+        return null;
+    }
+
+    @Override
+    public Future<Void> sendAsynchronousMessage(byte[] message, int offset, 
int length, long timeOut) {
+        checkOpenness();
+        onOutMessage(message, offset, length);
+        return null;
+    }
+
+    /**
         * A callback method that is called when a text message should be send 
to the client
         *
         * @param message
diff --git 
a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketConnection.java
 
b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketConnection.java
index f7e4ca4..9466707 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketConnection.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketConnection.java
@@ -18,8 +18,10 @@ package org.apache.wicket.protocol.ws.javax;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.concurrent.Future;
 
 import javax.websocket.CloseReason;
+import javax.websocket.RemoteEndpoint;
 import javax.websocket.Session;
 
 import org.apache.wicket.protocol.ws.api.AbstractWebSocketConnection;
@@ -82,7 +84,25 @@ public class JavaxWebSocketConnection extends 
AbstractWebSocketConnection
                return this;
        }
 
-       @Override
+    @Override
+    public Future<Void> sendAsynchronousMessage(String message)
+    {
+        checkClosed();
+
+        return session.getAsyncRemote().sendText(message);
+    }
+
+    @Override
+    public Future<Void> sendAsynchronousMessage(String message, long timeOut)
+    {
+        checkClosed();
+
+        RemoteEndpoint.Async remoteEndpoint  = session.getAsyncRemote();
+        remoteEndpoint.setSendTimeout(timeOut);
+        return remoteEndpoint.sendText(message);
+    }
+
+    @Override
        public synchronized IWebSocketConnection sendMessage(byte[] message, 
int offset, int length)
                throws IOException
        {
@@ -93,7 +113,28 @@ public class JavaxWebSocketConnection extends 
AbstractWebSocketConnection
                return this;
        }
 
-       private void checkClosed()
+    @Override
+    public Future<Void> sendAsynchronousMessage(byte[] message, int offset, 
int length)
+    {
+        checkClosed();
+
+        ByteBuffer buf = ByteBuffer.wrap(message, offset, length);
+        return session.getAsyncRemote().sendBinary(buf);
+    }
+
+    @Override
+
+    public Future<Void> sendAsynchronousMessage(byte[] message, int offset, 
int length, long timeOut)
+    {
+        checkClosed();
+
+        RemoteEndpoint.Async remoteEndpoint  = session.getAsyncRemote();
+        remoteEndpoint.setSendTimeout(timeOut);
+        ByteBuffer buf = ByteBuffer.wrap(message, offset, length);
+        return remoteEndpoint.sendBinary(buf);
+    }
+
+    private void checkClosed()
        {
                if (!isOpen())
                {

Reply via email to