Skip to content

Commit 5c068e1

Browse files
committed
refactoring UserStatus
1 parent cb4a60a commit 5c068e1

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
lines changed

src/main/java/com/bernd/GameController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public ViewGame getGame(@PathVariable String id, Principal p) {
7575

7676
@MessageMapping("/game/move")
7777
public void action(Move move, Principal p) {
78-
String id = statusMap.get(getPrincipal(p));
78+
String id = statusMap.getRoom(getPrincipal(p));
7979
if (id == null) {
8080
return;
8181
}

src/main/java/com/bernd/model/StatusMap.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,22 @@ public final class StatusMap {
1414

1515
private final Map<String, UserStatus> map = new LinkedHashMap<>();
1616

17-
public UserStatus put(String user, String room) {
18-
return map.put(user, UserStatus.create(room));
17+
public UserStatus setRoom(String user, String room) {
18+
return map.compute(user, (key, current) -> {
19+
if (current == null) {
20+
return UserStatus.create(room);
21+
} else {
22+
return current.touch();
23+
}
24+
});
1925
}
2026

21-
public String get(String user) {
27+
public String getRoom(String user) {
2228
UserStatus status = map.get(user);
2329
if (status == null) {
2430
return null;
2531
}
26-
return put(user, status.room()).room();
32+
return setRoom(user, status.room()).room();
2733
}
2834

2935
public String remove(String user) {
Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package com.bernd.model;
22

3-
public record UserStatus(String room, long lastSeen) {
4-
private static final long USER_TIMEOUT = 45 * 1000;
5-
public static UserStatus create(String room) {
6-
return new UserStatus(room, System.currentTimeMillis());
7-
}
8-
9-
public boolean isActive(long current) {
10-
return current < lastSeen + USER_TIMEOUT;
11-
}
3+
public record UserStatus(
4+
String room,
5+
long lastSeen) {
6+
7+
private static final long USER_TIMEOUT = 45 * 1000;
8+
9+
public static UserStatus create(String room) {
10+
return new UserStatus(room, System.currentTimeMillis());
11+
}
12+
13+
public UserStatus touch() {
14+
return new UserStatus(room, System.currentTimeMillis());
15+
}
16+
17+
public boolean isActive(long current) {
18+
return current < lastSeen + USER_TIMEOUT;
19+
}
1220
}

src/main/java/com/bernd/util/RoomManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void updateRooms(String user, String room) {
2121
}
2222

2323
public void updateStatus(String user, String room) {
24-
UserStatus old = statusMap.put(user, room);
24+
UserStatus old = statusMap.setRoom(user, room);
2525
List<String> users = statusMap.usersInRoom(room);
2626
if (old == null) {
2727
sender.sendUsers(room, users);

0 commit comments

Comments
 (0)