moved logic from User and Session into services
This commit is contained in:
parent
76405329f8
commit
7ff944dec4
@ -47,22 +47,18 @@ public abstract class AbstractSession implements IWebSocketMessage {
|
|||||||
|
|
||||||
protected AbstractSession(@NonNull final User user) {
|
protected AbstractSession(@NonNull final User user) {
|
||||||
this.owner = user;
|
this.owner = user;
|
||||||
this.join(user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void join(@NonNull final User user) {
|
public void join(@NonNull final User user) {
|
||||||
synchronized (uuid) {
|
synchronized (uuid) {
|
||||||
users.add(user);
|
users.add(user);
|
||||||
touch();
|
touch();
|
||||||
user.join(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void leave(@NonNull final User user) {
|
public void leave(@NonNull final User user) {
|
||||||
synchronized (uuid) {
|
synchronized (uuid) {
|
||||||
users.remove(user);
|
users.remove(user);
|
||||||
touch();
|
|
||||||
user.leave(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -39,9 +39,15 @@ public abstract class AbstractSessionController<SESSION extends AbstractSession>
|
|||||||
|
|
||||||
@Scheduled(timeUnit = TimeUnit.MINUTES, initialDelay = 5, fixedRate = 5)
|
@Scheduled(timeUnit = TimeUnit.MINUTES, initialDelay = 5, fixedRate = 5)
|
||||||
public void cleanUp() {
|
public void cleanUp() {
|
||||||
final ZonedDateTime deadline = ZonedDateTime.now().minusDays(1);
|
final ZonedDateTime deadline = ZonedDateTime.now().minusDays(30);
|
||||||
synchronized (sessions) {
|
synchronized (sessions) {
|
||||||
sessions.removeIf(session -> session.getLastAccess().isBefore(deadline));
|
sessions.stream().filter(session -> session.getLastAccess().isBefore(deadline)).forEach(this::delete);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void delete(@NonNull final SESSION session) {
|
||||||
|
for (final User user : session.getUsers()) {
|
||||||
|
user.leave(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,9 +67,7 @@ public abstract class AbstractSessionController<SESSION extends AbstractSession>
|
|||||||
sessions.add(session);
|
sessions.add(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
applicationEventPublisher.publishEvent(session);
|
return join(session, user);
|
||||||
applicationEventPublisher.publishEvent(user);
|
|
||||||
return toDto(session, user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("canAccess")
|
@PostMapping("canAccess")
|
||||||
@ -89,7 +93,14 @@ public abstract class AbstractSessionController<SESSION extends AbstractSession>
|
|||||||
log.error("Wrong password: user={}, session={}", user, session);
|
log.error("Wrong password: user={}, session={}", user, session);
|
||||||
throw new ResponseStatusException(HttpStatus.FORBIDDEN);
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN);
|
||||||
}
|
}
|
||||||
|
return join(session, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private AbstractSessionDto join(@NonNull final SESSION session, @NonNull final User user) {
|
||||||
session.join(user);
|
session.join(user);
|
||||||
|
user.join(session);
|
||||||
|
log.info("User joined Session: user={}, session={}", user, session);
|
||||||
applicationEventPublisher.publishEvent(session);
|
applicationEventPublisher.publishEvent(session);
|
||||||
applicationEventPublisher.publishEvent(user);
|
applicationEventPublisher.publishEvent(user);
|
||||||
return toDto(session, user);
|
return toDto(session, user);
|
||||||
@ -124,6 +135,7 @@ public abstract class AbstractSessionController<SESSION extends AbstractSession>
|
|||||||
final User user = userService.getByPrivateUuidOrThrow(userUuid);
|
final User user = userService.getByPrivateUuidOrThrow(userUuid);
|
||||||
final SESSION session = getSessionByUuid(sessionUuid);
|
final SESSION session = getSessionByUuid(sessionUuid);
|
||||||
session.leave(user);
|
session.leave(user);
|
||||||
|
user.leave(session);
|
||||||
applicationEventPublisher.publishEvent(session);
|
applicationEventPublisher.publishEvent(session);
|
||||||
applicationEventPublisher.publishEvent(user);
|
applicationEventPublisher.publishEvent(user);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,9 +48,8 @@ public class User implements IWebSocketMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void leave(@NonNull final AbstractSession session) {
|
public void leave(@NonNull final AbstractSession session) {
|
||||||
synchronized (privateUuid) {
|
synchronized (sessions) {
|
||||||
sessions.remove(session);
|
sessions.remove(session);
|
||||||
touch();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user