62 lines
1.3 KiB
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);
|
|
}
|
|
|
|
}
|