Search in sources :

Example 11 with SendTo

use of org.springframework.messaging.handler.annotation.SendTo in project spring-framework by spring-projects.

the class SendToMethodReturnValueHandler method handleReturnValue.

@Override
public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType, Message<?> message) throws Exception {
    if (returnValue == null) {
        return;
    }
    MessageHeaders headers = message.getHeaders();
    String sessionId = SimpMessageHeaderAccessor.getSessionId(headers);
    DestinationHelper destinationHelper = getDestinationHelper(headers, returnType);
    SendToUser sendToUser = destinationHelper.getSendToUser();
    if (sendToUser != null) {
        boolean broadcast = sendToUser.broadcast();
        String user = getUserName(message, headers);
        if (user == null) {
            if (sessionId == null) {
                throw new MissingSessionUserException(message);
            }
            user = sessionId;
            broadcast = false;
        }
        String[] destinations = getTargetDestinations(sendToUser, message, this.defaultUserDestinationPrefix);
        for (String destination : destinations) {
            destination = destinationHelper.expandTemplateVars(destination);
            if (broadcast) {
                this.messagingTemplate.convertAndSendToUser(user, destination, returnValue, createHeaders(null, returnType));
            } else {
                this.messagingTemplate.convertAndSendToUser(user, destination, returnValue, createHeaders(sessionId, returnType));
            }
        }
    }
    SendTo sendTo = destinationHelper.getSendTo();
    if (sendTo != null || sendToUser == null) {
        String[] destinations = getTargetDestinations(sendTo, message, this.defaultDestinationPrefix);
        for (String destination : destinations) {
            destination = destinationHelper.expandTemplateVars(destination);
            this.messagingTemplate.convertAndSend(destination, returnValue, createHeaders(sessionId, returnType));
        }
    }
}
Also used : SendToUser(org.springframework.messaging.simp.annotation.SendToUser) SendTo(org.springframework.messaging.handler.annotation.SendTo) MessageHeaders(org.springframework.messaging.MessageHeaders)

Aggregations

SendTo (org.springframework.messaging.handler.annotation.SendTo)11 MessageMapping (org.springframework.messaging.handler.annotation.MessageMapping)6 Room (com.mapia.domain.Room)4 ResponseMessage (com.hry.spring.mvc.websocket.model.ResponseMessage)2 Output (org.springframework.cloud.stream.annotation.Output)2 SendToUser (org.springframework.messaging.simp.annotation.SendToUser)2 Method (java.lang.reflect.Method)1 Nullable (org.springframework.lang.Nullable)1 MessageHeaders (org.springframework.messaging.MessageHeaders)1 InvocableHandlerMethod (org.springframework.messaging.handler.invocation.InvocableHandlerMethod)1