Tools/src/main/java/de/ph87/tools/user/User.java

62 lines
1.3 KiB
Java

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<AbstractSession> 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<Object> getWebsocketTopic() {
return List.of("User", privateUuid);
}
}