Browse Source

Allow sending headers with the disconnect frame

pull/23965/head
Ilja 7 years ago committed by Rossen Stoyanchev
parent
commit
08f1cb454a
  1. 8
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java
  2. 6
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java
  3. 21
      spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/DefaultStompSessionTests.java

8
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java

@ -362,9 +362,17 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { @@ -362,9 +362,17 @@ public class DefaultStompSession implements ConnectionHandlingStompSession {
@Override
public void disconnect() {
disconnect(null);
}
@Override
public void disconnect(@Nullable StompHeaders headers) {
this.closing = true;
try {
StompHeaderAccessor accessor = createHeaderAccessor(StompCommand.DISCONNECT);
if (headers != null) {
accessor.addNativeHeaders(headers);
}
Message<byte[]> message = createMessage(accessor, EMPTY_PAYLOAD);
execute(message);
}

6
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java

@ -116,6 +116,12 @@ public interface StompSession { @@ -116,6 +116,12 @@ public interface StompSession {
*/
void disconnect();
/**
* Disconnect the session by sending a DISCONNECT frame.
* @param headers the headers for the disconnect message frame
*/
void disconnect(StompHeaders headers);
/**
* A handle to use to track receipts.

21
spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/DefaultStompSessionTests.java

@ -659,4 +659,25 @@ public class DefaultStompSessionTests { @@ -659,4 +659,25 @@ public class DefaultStompSessionTests {
verifyNoMoreInteractions(this.sessionHandler);
}
@Test
public void disconnectWithHeaders() {
this.session.afterConnected(this.connection);
assertTrue(this.session.isConnected());
StompHeaders headers = new StompHeaders();
headers.add("foo", "bar");
this.session.disconnect(headers);
Message<byte[]> message = this.messageCaptor.getValue();
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
headers = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
assertEquals(headers.toString(), 1, headers.size());
assertEquals(headers.get("foo").size(), 1);
assertEquals(headers.get("foo").get(0), "bar");
assertFalse(this.session.isConnected());
verifyNoMoreInteractions(this.sessionHandler);
}
}

Loading…
Cancel
Save