Merge branch 'feat/messages-serverside' into 'main'
Add MessageManager to broadcast Message storing content and sender to all connected users See merge request cs108-fs26/Gruppe-13!35
This commit was merged in pull request #191.
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
package ch.unibas.dmi.dbis.cs108.casono.server.domain.message;
|
||||
|
||||
/** Represents a message sent by someone */
|
||||
public record Message(String sender, String content) {}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package ch.unibas.dmi.dbis.cs108.casono.server.domain.message;
|
||||
|
||||
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
||||
|
||||
public class MessageManager {
|
||||
private final UserRegistry userRegistry;
|
||||
|
||||
public MessageManager(UserRegistry userRegistry) {
|
||||
this.userRegistry = userRegistry;
|
||||
}
|
||||
|
||||
public void broadcast(Message message) {
|
||||
userRegistry.getAllUsers().forEach(user -> user.enqueueMessage(message));
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,13 @@
|
||||
package ch.unibas.dmi.dbis.cs108.casono.server.domain.user;
|
||||
|
||||
import ch.unibas.dmi.dbis.cs108.casono.server.domain.message.Message;
|
||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
/** Represents an authenticated user on the server. */
|
||||
public class User {
|
||||
@@ -10,6 +15,7 @@ public class User {
|
||||
private final String name;
|
||||
private SessionId sessionId;
|
||||
private Instant disconnectedAt;
|
||||
private final Queue<Message> messages;
|
||||
|
||||
/**
|
||||
* Creates a new User with the given ID, name and session.
|
||||
@@ -23,6 +29,7 @@ public class User {
|
||||
this.name = name;
|
||||
this.sessionId = sessionId;
|
||||
this.disconnectedAt = null;
|
||||
this.messages = new ConcurrentLinkedQueue<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,4 +83,14 @@ public class User {
|
||||
this.sessionId = null;
|
||||
this.disconnectedAt = Instant.now();
|
||||
}
|
||||
|
||||
public synchronized void enqueueMessage(Message message) {
|
||||
messages.add(message);
|
||||
}
|
||||
|
||||
public synchronized List<Message> dequeueAllMessages(Message message) {
|
||||
List<Message> allMessages = new ArrayDeque<>(messages).stream().toList();
|
||||
messages.clear();
|
||||
return allMessages;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user