package de.ph87.tools.user; import com.fasterxml.jackson.annotation.JsonIgnore; import de.ph87.tools.session.AbstractSession; import de.ph87.tools.web.IWebSocketMessage; import lombok.Getter; import lombok.NonNull; import lombok.Setter; import lombok.ToString; import java.time.ZonedDateTime; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; @Getter @ToString public class User implements IWebSocketMessage { @NonNull public final String privateUuid = UUID.randomUUID().toString(); @NonNull public final String publicUuid = UUID.randomUUID().toString(); public final ZonedDateTime created = ZonedDateTime.now(); @JsonIgnore @ToString.Exclude private final Set sessions = new HashSet<>(); private ZonedDateTime lastAccess = created; @Setter @NonNull public String name = "unnamed"; private void touch() { lastAccess = ZonedDateTime.now(); } public void join(@NonNull final AbstractSession session) { synchronized (privateUuid) { sessions.add(session); touch(); } } public void leave(@NonNull final AbstractSession session) { synchronized (sessions) { sessions.remove(session); } } @Override public List getWebsocketTopic() { return List.of("User", privateUuid); } }