Skip to content

Commit 0c49734

Browse files
emattheisgeoand
authored andcommitted
expose subprotocol to client connections
1 parent bb4a65d commit 0c49734

File tree

5 files changed

+90
-11
lines changed

5 files changed

+90
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package io.quarkus.websockets.next.test.subprotocol;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.net.URI;
7+
import java.util.concurrent.CountDownLatch;
8+
import java.util.concurrent.ExecutionException;
9+
import java.util.concurrent.TimeUnit;
10+
import java.util.concurrent.atomic.AtomicReference;
11+
12+
import jakarta.inject.Inject;
13+
14+
import org.junit.jupiter.api.Test;
15+
import org.junit.jupiter.api.extension.RegisterExtension;
16+
17+
import io.quarkus.test.QuarkusUnitTest;
18+
import io.quarkus.test.common.http.TestHTTPResource;
19+
import io.quarkus.websockets.next.OnOpen;
20+
import io.quarkus.websockets.next.WebSocket;
21+
import io.quarkus.websockets.next.WebSocketClient;
22+
import io.quarkus.websockets.next.WebSocketClientConnection;
23+
import io.quarkus.websockets.next.WebSocketConnection;
24+
import io.quarkus.websockets.next.WebSocketConnector;
25+
26+
public class SubprotocolFromConnectionTest {
27+
28+
@RegisterExtension
29+
public static final QuarkusUnitTest test = new QuarkusUnitTest()
30+
.withApplicationRoot(root -> {
31+
root.addClasses(Endpoint.class, Client.class);
32+
}).overrideConfigKey("quarkus.websockets-next.server.supported-subprotocols", "oak,larch");
33+
34+
@TestHTTPResource("/")
35+
URI endpointUri;
36+
37+
@Inject
38+
WebSocketConnector<Client> connector;
39+
40+
@Test
41+
void testSubprotocolFromConnection() throws InterruptedException, ExecutionException {
42+
var connection = connector.baseUri(endpointUri).addSubprotocol("larch").connectAndAwait();
43+
assertEquals("larch", connection.subprotocol());
44+
assertTrue(Client.OPEN_LATCH.await(5, TimeUnit.SECONDS));
45+
assertEquals("larch", Client.SUB_PROTOCOL.get());
46+
assertTrue(Endpoint.OPEN_LATCH.await(5, TimeUnit.SECONDS));
47+
assertEquals("larch", Endpoint.SUB_PROTOCOL.get());
48+
connection.closeAndAwait();
49+
}
50+
51+
@WebSocket(path = "/endpoint")
52+
public static class Endpoint {
53+
54+
static final CountDownLatch OPEN_LATCH = new CountDownLatch(1);
55+
56+
static final AtomicReference<String> SUB_PROTOCOL = new AtomicReference<>();
57+
58+
@OnOpen
59+
void connected(WebSocketConnection connection) {
60+
SUB_PROTOCOL.set(connection.subprotocol());
61+
OPEN_LATCH.countDown();
62+
}
63+
}
64+
65+
@WebSocketClient(path = "/endpoint")
66+
public static class Client {
67+
68+
static final CountDownLatch OPEN_LATCH = new CountDownLatch(1);
69+
70+
static final AtomicReference<String> SUB_PROTOCOL = new AtomicReference<>();
71+
72+
@OnOpen
73+
void connected(WebSocketClientConnection connection) {
74+
SUB_PROTOCOL.set(connection.subprotocol());
75+
OPEN_LATCH.countDown();
76+
}
77+
}
78+
79+
}

extensions/websockets-next/runtime/src/main/java/io/quarkus/websockets/next/Connection.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ default void closeAndAwait(CloseReason reason) {
9797
*/
9898
HandshakeRequest handshakeRequest();
9999

100+
/**
101+
*
102+
* @return the subprotocol selected by the handshake
103+
*/
104+
String subprotocol();
105+
100106
/**
101107
*
102108
* @return the time when this connection was created

extensions/websockets-next/runtime/src/main/java/io/quarkus/websockets/next/WebSocketConnection.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,6 @@ public interface WebSocketConnection extends Connection {
3636
*/
3737
Set<WebSocketConnection> getOpenConnections();
3838

39-
/**
40-
*
41-
* @return the subprotocol selected by the handshake
42-
*/
43-
String subprotocol();
44-
4539
/**
4640
* Makes it possible to send messages to all clients connected to the same WebSocket endpoint.
4741
*

extensions/websockets-next/runtime/src/main/java/io/quarkus/websockets/next/runtime/WebSocketConnectionBase.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@ public HandshakeRequest handshakeRequest() {
155155
return handshakeRequest;
156156
}
157157

158+
@Override
159+
public String subprotocol() {
160+
return webSocket().subProtocol();
161+
}
162+
158163
@Override
159164
public Instant creationTime() {
160165
return creationTime;

extensions/websockets-next/runtime/src/main/java/io/quarkus/websockets/next/runtime/WebSocketConnectionImpl.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@ public Set<WebSocketConnection> getOpenConnections() {
6565
.collect(Collectors.toUnmodifiableSet());
6666
}
6767

68-
@Override
69-
public String subprotocol() {
70-
return webSocket.subProtocol();
71-
}
72-
7368
@Override
7469
public String toString() {
7570
return "WebSocket connection [endpointId=" + endpointId + ", path=" + webSocket.path() + ", id=" + identifier + "]";

0 commit comments

Comments
 (0)