Skip to content

Commit 6bb3ad7

Browse files
committed
Add isOpen to WebSocketSession in WebFlux
Closes gh-26043
1 parent c73cff8 commit 6bb3ad7

File tree

6 files changed

+47
-1
lines changed

6 files changed

+47
-1
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/socket/WebSocketSession.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ public interface WebSocketSession {
8080
*/
8181
Mono<Void> send(Publisher<WebSocketMessage> messages);
8282

83+
/**
84+
* Whether the underlying connection is open.
85+
* @since 5.3.1
86+
*/
87+
boolean isOpen();
88+
8389
/**
8490
* Close the WebSocket session with {@link CloseStatus#NORMAL}.
8591
*/

spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketSession.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ else if (WebSocketMessage.Type.PONG.equals(message.getType())) {
113113
return true;
114114
}
115115

116+
@Override
117+
public boolean isOpen() {
118+
return getDelegate().isOpen();
119+
}
120+
116121
@Override
117122
public Mono<Void> close(CloseStatus status) {
118123
getDelegate().close(status.getCode(), status.getReason());

spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/ReactorNettyWebSocketSession.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
*/
1616
package org.springframework.web.reactive.socket.adapter;
1717

18+
import java.util.function.Consumer;
19+
1820
import io.netty.handler.codec.http.websocketx.WebSocketFrame;
1921
import org.reactivestreams.Publisher;
2022
import reactor.core.publisher.Flux;
2123
import reactor.core.publisher.Mono;
24+
import reactor.netty.Connection;
2225
import reactor.netty.NettyInbound;
2326
import reactor.netty.NettyOutbound;
2427
import reactor.netty.http.websocket.WebsocketInbound;
@@ -93,6 +96,13 @@ public Mono<Void> send(Publisher<WebSocketMessage> messages) {
9396
.then();
9497
}
9598

99+
@Override
100+
public boolean isOpen() {
101+
DisposedCallback callback = new DisposedCallback();
102+
getDelegate().getInbound().withConnection(callback);
103+
return callback.isDisposed();
104+
}
105+
96106
@Override
97107
public Mono<Void> close(CloseStatus status) {
98108
// this will notify WebSocketInbound.receiveCloseStatus()
@@ -129,4 +139,19 @@ public WebsocketOutbound getOutbound() {
129139
}
130140
}
131141

142+
143+
private static class DisposedCallback implements Consumer<Connection> {
144+
145+
private boolean disposed;
146+
147+
public boolean isDisposed() {
148+
return this.disposed;
149+
}
150+
151+
@Override
152+
public void accept(Connection connection) {
153+
this.disposed = connection.isDisposed();
154+
}
155+
}
156+
132157
}

spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketSession.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ else if (WebSocketMessage.Type.PONG.equals(message.getType())) {
103103
return true;
104104
}
105105

106+
@Override
107+
public boolean isOpen() {
108+
return getDelegate().isOpen();
109+
}
110+
106111
@Override
107112
public Mono<Void> close(CloseStatus status) {
108113
try {

spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/UndertowWebSocketSession.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ else if (WebSocketMessage.Type.PONG.equals(message.getType())) {
108108
return true;
109109
}
110110

111+
@Override
112+
public boolean isOpen() {
113+
return getDelegate().isOpen();
114+
}
115+
111116
@Override
112117
public Mono<Void> close(CloseStatus status) {
113118
CloseMessage cm = new CloseMessage(status.getCode(), status.getReason());

spring-websocket/src/main/java/org/springframework/web/socket/WebSocketSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public interface WebSocketSession extends Closeable {
130130
void sendMessage(WebSocketMessage<?> message) throws IOException;
131131

132132
/**
133-
* Return whether the connection is still open.
133+
* Whether the underlying connection is open.
134134
*/
135135
boolean isOpen();
136136

0 commit comments

Comments
 (0)