Support receipt on DISCONNECT with simple broker

Issue: SPR-14568
This commit is contained in:
Rossen Stoyanchev
2016-08-29 18:30:17 -04:00
parent 3b95e0b6e0
commit 8b4f60b8e5
5 changed files with 80 additions and 10 deletions

View File

@@ -65,6 +65,8 @@ public class SimpMessageHeaderAccessor extends NativeMessageHeaderAccessor {
public static final String CONNECT_MESSAGE_HEADER = "simpConnectMessage";
public static final String DISCONNECT_MESSAGE_HEADER = "simpDisconnectMessage";
public static final String HEART_BEAT_HEADER = "simpHeartbeat";

View File

@@ -275,7 +275,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
}
else if (SimpMessageType.DISCONNECT.equals(messageType)) {
logMessage(message);
handleDisconnect(sessionId, user);
handleDisconnect(sessionId, user, message);
}
else if (SimpMessageType.SUBSCRIBE.equals(messageType)) {
logMessage(message);
@@ -310,12 +310,15 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
}
}
private void handleDisconnect(String sessionId, Principal user) {
private void handleDisconnect(String sessionId, Principal user, Message<?> origMessage) {
this.sessions.remove(sessionId);
this.subscriptionRegistry.unregisterAllSubscriptions(sessionId);
SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.DISCONNECT_ACK);
accessor.setSessionId(sessionId);
accessor.setUser(user);
if (origMessage != null) {
accessor.setHeader(SimpMessageHeaderAccessor.DISCONNECT_MESSAGE_HEADER, origMessage);
}
initHeaders(accessor);
Message<byte[]> message = MessageBuilder.createMessage(EMPTY_PAYLOAD, accessor.getMessageHeaders());
getClientOutboundChannel().send(message);
@@ -432,7 +435,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
long now = System.currentTimeMillis();
for (SessionInfo info : sessions.values()) {
if (info.getReadInterval() > 0 && (now - info.getLastReadTime()) > info.getReadInterval()) {
handleDisconnect(info.getSessiondId(), info.getUser());
handleDisconnect(info.getSessiondId(), info.getUser(), null);
}
if (info.getWriteInterval() > 0 && (now - info.getLastWriteTime()) > info.getWriteInterval()) {
SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.HEARTBEAT);