40 lines
1.2 KiB
Java
40 lines
1.2 KiB
Java
package com.baeldung.webflux;
|
|
|
|
import static java.time.LocalDateTime.now;
|
|
import static java.util.UUID.randomUUID;
|
|
|
|
import java.time.Duration;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.reactive.socket.WebSocketHandler;
|
|
import org.springframework.web.reactive.socket.WebSocketSession;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
import reactor.core.publisher.Flux;
|
|
import reactor.core.publisher.Mono;
|
|
|
|
@Component("EmployeeWebSocketHandler")
|
|
public class EmployeeWebSocketHandler implements WebSocketHandler {
|
|
|
|
ObjectMapper om = new ObjectMapper();
|
|
|
|
@Override
|
|
public Mono<Void> handle(WebSocketSession webSocketSession) {
|
|
|
|
Flux<String> employeeCreationEvent = Flux.generate(sink -> {
|
|
EmployeeCreationEvent event = new EmployeeCreationEvent(randomUUID().toString(), now().toString());
|
|
try {
|
|
sink.next(om.writeValueAsString(event));
|
|
} catch (JsonProcessingException e) {
|
|
sink.error(e);
|
|
}
|
|
});
|
|
|
|
return webSocketSession.send(employeeCreationEvent
|
|
.map(webSocketSession::textMessage)
|
|
.delayElements(Duration.ofSeconds(1)));
|
|
}
|
|
}
|