Example usage for org.springframework.messaging.simp.stomp StompCommand DISCONNECT

List of usage examples for org.springframework.messaging.simp.stomp StompCommand DISCONNECT

Introduction

In this page you can find the example usage for org.springframework.messaging.simp.stomp StompCommand DISCONNECT.

Prototype

StompCommand DISCONNECT

To view the source code for org.springframework.messaging.simp.stomp StompCommand DISCONNECT.

Click Source Link

Usage

From source file:com.codeveo.lago.bot.stomp.client.WebSocketStompSession.java

public void disconnect() {
    StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.DISCONNECT);
    Message<byte[]> message = MessageBuilder.withPayload(EMPTY_PAYLOAD).setHeaders(headers).build();
    sendInternal(message);/*w w w.j  a v a2  s  .  c  o  m*/
    try {
        this.webSocketSession.close(CloseStatus.GOING_AWAY);
    } catch (IOException e) {
        throw new IllegalStateException(e);
    }
}

From source file:fr.jugorleans.poker.client.stomp.WebSocketStompSession.java

public void disconnect() {
    StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.DISCONNECT);
    Message<byte[]> message = MessageBuilder.withPayload(EMPTY_PAYLOAD).setHeaders(headers).build();
    sendInternal(message);//www  .  j a  v a  2 s. co m
    try {
        this.webSocketSession.close();
    } catch (IOException e) {
        throw new IllegalStateException(e);
    }
}

From source file:org.springframework.messaging.simp.stomp.DefaultStompSession.java

@Override
public void disconnect() {
    this.closing = true;
    try {/*from   ww  w .  java2  s.  c o m*/
        StompHeaderAccessor accessor = createHeaderAccessor(StompCommand.DISCONNECT);
        Message<byte[]> message = createMessage(accessor, EMPTY_PAYLOAD);
        execute(message);
    } finally {
        resetConnection();
    }
}

From source file:org.springframework.messaging.simp.stomp.StompProtocolHandler.java

@Override
public void afterSessionEnded(WebSocketSession session, CloseStatus closeStatus, MessageChannel outputChannel) {

    if ((this.queueSuffixResolver != null) && (session.getPrincipal() != null)) {
        this.queueSuffixResolver.removeQueueSuffix(session.getPrincipal().getName(), session.getId());
    }//from  w  ww.j  a va 2s. c o  m

    StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.DISCONNECT);
    headers.setSessionId(session.getId());
    Message<?> message = MessageBuilder.withPayloadAndHeaders(new byte[0], headers).build();
    outputChannel.send(message);
}

From source file:org.springframework.messaging.simp.stomp.StompWebSocketHandler.java

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {

    String sessionId = session.getId();
    this.sessions.remove(sessionId);

    if ((this.queueSuffixResolver != null) && (session.getPrincipal() != null)) {
        this.queueSuffixResolver.removeQueueSuffix(session.getPrincipal().getName(), sessionId);
    }//ww w  . ja va 2 s.c o m

    StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.DISCONNECT);
    headers.setSessionId(sessionId);
    Message<?> message = MessageBuilder.withPayloadAndHeaders(new byte[0], headers).build();
    this.dispatchChannel.send(message);
}

From source file:org.springframework.web.socket.messaging.StompSubProtocolHandler.java

/**
 * Handle incoming WebSocket messages from clients.
 *///from   w  ww .j av a  2 s. com
public void handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> webSocketMessage,
        MessageChannel outputChannel) {

    List<Message<byte[]>> messages;
    try {
        ByteBuffer byteBuffer;
        if (webSocketMessage instanceof TextMessage) {
            byteBuffer = ByteBuffer.wrap(((TextMessage) webSocketMessage).asBytes());
        } else if (webSocketMessage instanceof BinaryMessage) {
            byteBuffer = ((BinaryMessage) webSocketMessage).getPayload();
        } else {
            return;
        }

        BufferingStompDecoder decoder = this.decoders.get(session.getId());
        if (decoder == null) {
            throw new IllegalStateException("No decoder for session id '" + session.getId() + "'");
        }

        messages = decoder.decode(byteBuffer);
        if (messages.isEmpty()) {
            if (logger.isTraceEnabled()) {
                logger.trace("Incomplete STOMP frame content received in session " + session + ", bufferSize="
                        + decoder.getBufferSize() + ", bufferSizeLimit=" + decoder.getBufferSizeLimit() + ".");
            }
            return;
        }
    } catch (Throwable ex) {
        if (logger.isErrorEnabled()) {
            logger.error("Failed to parse " + webSocketMessage + " in session " + session.getId()
                    + ". Sending STOMP ERROR to client.", ex);
        }
        handleError(session, ex, null);
        return;
    }

    for (Message<byte[]> message : messages) {
        try {
            StompHeaderAccessor headerAccessor = MessageHeaderAccessor.getAccessor(message,
                    StompHeaderAccessor.class);
            Assert.state(headerAccessor != null, "No StompHeaderAccessor");

            headerAccessor.setSessionId(session.getId());
            headerAccessor.setSessionAttributes(session.getAttributes());
            headerAccessor.setUser(getUser(session));
            headerAccessor.setHeader(SimpMessageHeaderAccessor.HEART_BEAT_HEADER,
                    headerAccessor.getHeartbeat());
            if (!detectImmutableMessageInterceptor(outputChannel)) {
                headerAccessor.setImmutable();
            }

            if (logger.isTraceEnabled()) {
                logger.trace("From client: " + headerAccessor.getShortLogMessage(message.getPayload()));
            }

            StompCommand command = headerAccessor.getCommand();
            boolean isConnect = StompCommand.CONNECT.equals(command);
            if (isConnect) {
                this.stats.incrementConnectCount();
            } else if (StompCommand.DISCONNECT.equals(command)) {
                this.stats.incrementDisconnectCount();
            }

            try {
                SimpAttributesContextHolder.setAttributesFromMessage(message);
                boolean sent = outputChannel.send(message);

                if (sent) {
                    if (isConnect) {
                        Principal user = headerAccessor.getUser();
                        if (user != null && user != session.getPrincipal()) {
                            this.stompAuthentications.put(session.getId(), user);
                        }
                    }
                    if (this.eventPublisher != null) {
                        Principal user = getUser(session);
                        if (isConnect) {
                            publishEvent(this.eventPublisher, new SessionConnectEvent(this, message, user));
                        } else if (StompCommand.SUBSCRIBE.equals(command)) {
                            publishEvent(this.eventPublisher, new SessionSubscribeEvent(this, message, user));
                        } else if (StompCommand.UNSUBSCRIBE.equals(command)) {
                            publishEvent(this.eventPublisher, new SessionUnsubscribeEvent(this, message, user));
                        }
                    }
                }
            } finally {
                SimpAttributesContextHolder.resetAttributes();
            }
        } catch (Throwable ex) {
            if (logger.isErrorEnabled()) {
                logger.error("Failed to send client message to application via MessageChannel" + " in session "
                        + session.getId() + ". Sending STOMP ERROR to client.", ex);
            }
            handleError(session, ex, message);
        }
    }
}

From source file:org.springframework.web.socket.messaging.StompSubProtocolHandler.java

private Message<byte[]> createDisconnectMessage(WebSocketSession session) {
    StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.DISCONNECT);
    if (getHeaderInitializer() != null) {
        getHeaderInitializer().initHeaders(headerAccessor);
    }//from   w  w  w.java  2  s  .c om

    headerAccessor.setSessionId(session.getId());
    headerAccessor.setSessionAttributes(session.getAttributes());

    Principal user = getUser(session);
    if (user != null) {
        headerAccessor.setUser(user);
    }

    return MessageBuilder.createMessage(EMPTY_PAYLOAD, headerAccessor.getMessageHeaders());
}