X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fimplementation%2Finmemory%2FInMemoryChatMessageService.java;h=5d5feb87845cfbd536ff6f8364b87583b01d63cc;hb=4f2a6dfe5a1c620ad795328853c1be71a2581771;hp=a4fcec8cc05767d38e4b9050dfbfdf4db4648522;hpb=074ce6ddb63442bf4bacd76ecce4b095e0513e5a;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/implementation/inmemory/InMemoryChatMessageService.java b/src/main/java/de/juplo/kafka/chat/backend/implementation/inmemory/InMemoryChatMessageService.java index a4fcec8c..5d5feb87 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/implementation/inmemory/InMemoryChatMessageService.java +++ b/src/main/java/de/juplo/kafka/chat/backend/implementation/inmemory/InMemoryChatMessageService.java @@ -1,26 +1,42 @@ package de.juplo.kafka.chat.backend.implementation.inmemory; +import de.juplo.kafka.chat.backend.domain.ChatMessageService; import de.juplo.kafka.chat.backend.domain.Message; -import de.juplo.kafka.chat.backend.domain.ChatRoomService; +import de.juplo.kafka.chat.backend.implementation.StorageStrategy; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.time.LocalDateTime; import java.util.LinkedHashMap; +import java.util.UUID; @Slf4j -public class InMemoryChatRoomService implements ChatRoomService +public class InMemoryChatMessageService implements ChatMessageService { + private final UUID chatRoomId; private final LinkedHashMap messages; - public InMemoryChatRoomService(Flux messageFlux) + public InMemoryChatMessageService(UUID chatRoomId) { - log.debug("Creating InMemoryChatRoomService"); + log.debug("Creating InMemoryChatMessageService"); + this.chatRoomId = chatRoomId; messages = new LinkedHashMap<>(); - messageFlux.subscribe(message -> messages.put(message.getKey(), message)); + } + + + Mono restore(StorageStrategy storageStrategy) + { + Flux messageFlux = storageStrategy.readChatRoomData(chatRoomId); + + return messageFlux + .doOnNext(message -> messages.put(message.getKey(), message)) + .count() + .doOnSuccess(count -> log.info("Restored InMemoryChatMessageService with {} messages", count)) + .doOnError(throwable -> log.error("Could not restore InMemoryChatMessageService")) + .then(); } @Override