Spring WebFlux websocket close

Viewed 148

I'cand figure out how to close websocket on server side. Here is my code:

    @Override
    public Mono<Void> handle(WebSocketSession session) {
        Flux<WebSocketMessage> flux = session.receive()
                .map(WebSocketMessage::getPayloadAsText)
                .map(s -> {
                    if (s.equals("bye")) {
                        //todo: NEED TO CLOSE - session.close()
                        return "You said bye!";
                    } else {
                        return s;
                    }
                })
                .map(String::toUpperCase)
                .map(session::textMessage).log();

        
        return session.send(flux).log();
    }
1 Answers

You can use takeUntil method:

Flux<WebSocketMessage> flux = session.receive()
    .map(WebSocketMessage::getPayloadAsText)
    .takeUntil("bye"::equals)
    .map(s -> {
        if (s.equals("bye")) {
            return "You said bye!";
        } else {
            return s;
        }
        })
    .map(session::textMessage).log();
Related