Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import java.awt.image.BufferedImage;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -304,7 +303,7 @@ public void onGameStateChanged(GameStateChanged gameStateChanged)
final Client client = Microbot.getClient();
if (client != null) {
int[] currentRegions = client.getTopLevelWorldView().getMapRegions();
boolean wasLoggedIn = LoginManager.isLoggedIn();
boolean wasLoggedIn = LoginManager.getLastKnownGameState() == GameState.LOGGED_IN;
if (!wasLoggedIn) {
LoginManager.markLoggedIn();
Rs2RunePouch.fullUpdate();
Expand All @@ -315,7 +314,6 @@ public void onGameStateChanged(GameStateChanged gameStateChanged)
if (currentRegions != null) {
Microbot.setLastKnownRegions(currentRegions.clone());
}
LoginManager.markLoggedIn();
}
}
if (gameStateChanged.getGameState() == GameState.HOPPING || gameStateChanged.getGameState() == GameState.LOGIN_SCREEN || gameStateChanged.getGameState() == GameState.CONNECTION_LOST)
Expand All @@ -329,6 +327,8 @@ public void onGameStateChanged(GameStateChanged gameStateChanged)
}
Microbot.setLastKnownRegions(null);
}
// update last known game state to track login/logout transitions
LoginManager.setLastKnownGameState(gameStateChanged.getGameState());
}

@Subscribe
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,21 +39,31 @@ public final class LoginManager {
private static final Object LOGIN_LOCK = new Object();
private static final AtomicBoolean LOGIN_ATTEMPT_ACTIVE = new AtomicBoolean(false);
private static final AtomicReference<Instant> LAST_LOGIN_ATTEMPT = new AtomicReference<>(null);
private static final AtomicReference<GameState> LAST_KNOWN_GAME_STATE = new AtomicReference<>(GameState.UNKNOWN);

@Getter
private static Instant lastLoginTimestamp = null;

private static final AtomicReference<Instant> lastLoginTimestamp = new AtomicReference<>(null);

@Setter
public static ConfigProfile activeProfile = null;

public static ConfigProfile getActiveProfile() {
return Microbot.getConfigManager().getProfile();
}

public static Instant getLastLoginTimestamp() {
return lastLoginTimestamp.get();
}

public static GameState getLastKnownGameState() {
return LAST_KNOWN_GAME_STATE.get();
}

public static void setLastKnownGameState(GameState gameState) {
LAST_KNOWN_GAME_STATE.set(gameState);
}

private LoginManager() {
// Utility class
throw new IllegalStateException("Unable to instantiate utility class");
}

/**
Expand Down Expand Up @@ -86,7 +96,7 @@ public static void markLoggedIn() {
// Only set timestamp if client reports logged in.
if (isLoggedIn()) {
LOGIN_ATTEMPT_ACTIVE.set(false);
lastLoginTimestamp = Instant.now();
lastLoginTimestamp.set(Instant.now());
}
}

Expand All @@ -101,10 +111,10 @@ public static void markLoggedOut() {
* Returns the duration the account has been logged in for. Equivalent to Microbot.getLoginTime().
*/
public static Duration getLoginDuration() {
if (lastLoginTimestamp == null || !isLoggedIn()) {
if (getLastLoginTimestamp() == null || !isLoggedIn()) {
return Duration.of(0, ChronoUnit.MILLIS);
}
return Duration.between(lastLoginTimestamp, Instant.now());
return Duration.between(getLastLoginTimestamp(), Instant.now());
}

/**
Expand Down