X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2FTestListener.java;h=e5b25293dc11238da625424459cd8fac9e89b604;hb=ab1eee218b7944a848148ed4ba0272fea9f23780;hp=b74b8e8c94e4e4e8332db5568c7ec7ea6c103925;hpb=97931a75f37e8e122a33f932b05380a1b63a6caf;p=demos%2Fkafka%2Fchat diff --git a/src/test/java/de/juplo/kafka/chat/backend/TestListener.java b/src/test/java/de/juplo/kafka/chat/backend/TestListener.java index b74b8e8c..e5b25293 100644 --- a/src/test/java/de/juplo/kafka/chat/backend/TestListener.java +++ b/src/test/java/de/juplo/kafka/chat/backend/TestListener.java @@ -17,48 +17,45 @@ import java.util.*; @Slf4j -public class TestListener implements Runnable +public class TestListener { static final ParameterizedTypeReference> SSE_TYPE = new ParameterizedTypeReference<>() {}; - @Override - public void run() + public Flux run() { - Flux + return Flux .fromArray(chatRooms) .flatMap(chatRoom -> { List list = new LinkedList<>(); receivedMessages.put(chatRoom.getId(), list); - return receiveMessages(chatRoom) - .flatMap(sse -> - { - try - { - return Mono.just(objectMapper.readValue(sse.data(), MessageTo.class)); - } - catch (Exception e) - { - return Mono.error(e); - } - }) - .doOnNext(message -> - { - list.add(message); - log.info( - "Received a message from chat-room {}: {}", - chatRoom, - message); - }) - .take(30); + return receiveMessages(chatRoom); + }); + } + + Flux receiveMessages(ChatRoomInfoTo chatRoom) + { + log.info("Requesting messages for chat-room {}", chatRoom); + List list = receivedMessages.get(chatRoom.getId()); + return receiveServerSentEvents(chatRoom) + .flatMap(sse -> + { + try + { + return Mono.just(objectMapper.readValue(sse.data(), MessageTo.class)); + } + catch (Exception e) + { + return Mono.error(e); + } }) - .takeUntil(message -> !running) - .then() - .block(); + .doOnNext(message -> list.add(message)) + .doOnComplete(() -> log.info("{} was completed!", chatRoom)) + .doOnError(throwalbe -> log.error("{} failed: {}", chatRoom, throwalbe)); } - Flux> receiveMessages(ChatRoomInfoTo chatRoom) + Flux> receiveServerSentEvents(ChatRoomInfoTo chatRoom) { return webClient .get() @@ -77,8 +74,6 @@ public class TestListener implements Runnable final Map> receivedMessages = new HashMap<>(); - volatile boolean running = true; - TestListener(Integer port, ChatRoomInfoTo[] chatRooms) {