From 7c5a4675dd3ce347b92f252654c8b2baf097ca68 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Sun, 15 Mar 2026 18:35:25 +0100 Subject: [PATCH] Add: UserRegistry to store all active users and grand synchronized access --- .../server/domain/user/UserRegistry.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserRegistry.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserRegistry.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserRegistry.java new file mode 100644 index 0000000..600d901 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserRegistry.java @@ -0,0 +1,42 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.domain.user; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId; +import java.util.Iterator; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +public class UserRegistry { + private final ConcurrentHashMap byId = new ConcurrentHashMap<>(); + + public synchronized Optional registerIfAvailable(String name, SessionId sessionId) { + Iterator users = byId.elements().asIterator(); + while(users.hasNext()) { + User user = users.next(); + + if (user.getName() == name) { + return Optional.empty(); + } + } + + User user = new User(new UserId(), name, sessionId); + byId.put(user.getId(), user); + return Optional.of(user); + } + + public Optional findBySessionId(SessionId sessionId) { + Iterator users = byId.elements().asIterator(); + while(users.hasNext()) { + User user = users.next(); + Optional currentSessionId = user.getSessionId(); + + if (currentSessionId.isEmpty()) { + continue; + } + + if (currentSessionId.get() == sessionId) { + return Optional.of(user); + } + } + return Optional.empty(); + } +} \ No newline at end of file