WIP:refactor: Refined channel-states, introduced `ChannelState` -- ALIGN
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / TestListener.java
index 1c993c1..78d4c82 100644 (file)
@@ -7,51 +7,44 @@ import de.juplo.kafka.chat.backend.api.ChatRoomInfoTo;
 import de.juplo.kafka.chat.backend.api.MessageTo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.codec.ServerSentEvent;
 import org.springframework.web.reactive.function.client.WebClient;
-import org.springframework.web.reactive.function.client.WebClientResponseException;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
-import reactor.util.retry.Retry;
 
-import java.nio.charset.Charset;
-import java.time.Duration;
-import java.util.concurrent.ThreadLocalRandom;
+import java.util.*;
 
 
 @Slf4j
-public class TestListener implements Runnable
+public class TestListener
 {
   static final ParameterizedTypeReference<ServerSentEvent<String>> SSE_TYPE = new ParameterizedTypeReference<>() {};
 
 
-  @Override
-  public void run()
+  public Flux<MessageTo> run()
   {
-    Flux
+    return Flux
         .fromArray(chatRooms)
-        .flatMap(chatRoom -> receiveMessages(chatRoom)
-            .flatMap(sse ->
-            {
-              try
+        .flatMap(chatRoom ->
+        {
+          log.info("Requesting messages from chat-room {}", chatRoom);
+          List<MessageTo> list = new LinkedList<>();
+          receivedMessages.put(chatRoom.getId(), list);
+          return receiveMessages(chatRoom)
+              .flatMap(sse ->
               {
-                return Mono.just(objectMapper.readValue(sse.data(), MessageTo.class));
-              }
-              catch (Exception e)
-              {
-                return Mono.error(e);
-              }
-            })
-            .doOnNext(message -> log.info(
-                "Received a message from chat-room {}: {}",
-                chatRoom,
-                message))
-            .take(30))
-        .takeUntil(message -> !running)
-        .then()
-        .block();
+                try
+                {
+                  return Mono.just(objectMapper.readValue(sse.data(), MessageTo.class));
+                }
+                catch (Exception e)
+                {
+                  return Mono.error(e);
+                }
+              })
+              .doOnNext(message -> list.add(message));
+        });
   }
 
   Flux<ServerSentEvent<String>> receiveMessages(ChatRoomInfoTo chatRoom)
@@ -71,7 +64,7 @@ public class TestListener implements Runnable
   private final ChatRoomInfoTo[] chatRooms;
   private final ObjectMapper objectMapper;
 
-  volatile boolean running = true;
+  final Map<UUID, List<MessageTo>> receivedMessages = new HashMap<>();
 
 
   TestListener(Integer port, ChatRoomInfoTo[] chatRooms)