projects
/
demos
/
kafka
/
chat
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactore: Renamed `ChatroomFactory` to `ChatHomeService` -- Rename
[demos/kafka/chat]
/
src
/
main
/
java
/
de
/
juplo
/
kafka
/
chat
/
backend
/
domain
/
Chatroom.java
diff --git
a/src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java
b/src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java
index
966a28e
..
2261e02
100644
(file)
--- a/
src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java
+++ b/
src/main/java/de/juplo/kafka/chat/backend/domain/Chatroom.java
@@
-17,19
+17,21
@@
public class Chatroom
private final UUID id;
@Getter
private final String name;
private final UUID id;
@Getter
private final String name;
- private final PersistenceStrategy persistence;
- private final Sinks.Many<Message> sink;
+ private final ChatroomService chatroomService;
+ private final int bufferSize;
+ private Sinks.Many<Message> sink;
public Chatroom(
UUID id,
String name,
public Chatroom(
UUID id,
String name,
-
PersistenceStrategy persisten
ce,
+
ChatroomService chatroomServi
ce,
int bufferSize)
{
this.id = id;
this.name = name;
int bufferSize)
{
this.id = id;
this.name = name;
- this.persistence = persistence;
- this.sink = Sinks.many().multicast().onBackpressureBuffer(bufferSize);
+ this.chatroomService = chatroomService;
+ this.bufferSize = bufferSize;
+ this.sink = createSink();
}
}
@@
-39,20
+41,30
@@
public class Chatroom
String user,
String text)
{
String user,
String text)
{
- return
persisten
ce
+ return
chatroomServi
ce
.persistMessage(Message.MessageKey.of(user, id), timestamp, text)
.persistMessage(Message.MessageKey.of(user, id), timestamp, text)
- .doOnNext(message -> sink.tryEmitNext(message).orThrow());
+ .doOnNext(message ->
+ {
+ Sinks.EmitResult result = sink.tryEmitNext(message);
+ if (result.isFailure())
+ {
+ log.warn("Emitting of message failed with {} for {}", result.name(), message);
+ }
+ });
}
public Mono<Message> getMessage(String username, Long messageId)
{
}
public Mono<Message> getMessage(String username, Long messageId)
{
- return persistence.getMessage(Message.MessageKey.of(username, messageId));
+ Message.MessageKey key = Message.MessageKey.of(username, messageId);
+ return chatroomService.getMessage(key);
}
}
- public Flux<Message> listen()
+
synchronized
public Flux<Message> listen()
{
{
- return sink.asFlux();
+ return sink
+ .asFlux()
+ .doOnCancel(() -> sink = createSink()); // Sink hast to be recreated on auto-cancel!
}
public Flux<Message> getMessages()
}
public Flux<Message> getMessages()
@@
-62,6
+74,14
@@
public class Chatroom
public Flux<Message> getMessages(long first, long last)
{
public Flux<Message> getMessages(long first, long last)
{
- return persistence.getMessages(first, last);
+ return chatroomService.getMessages(first, last);
+ }
+
+ private Sinks.Many<Message> createSink()
+ {
+ return Sinks
+ .many()
+ .multicast()
+ .onBackpressureBuffer(bufferSize);
}
}
}
}