async account session check

This commit is contained in:
Lucwousin
2019-10-14 05:51:26 +02:00
parent acb4ec0b65
commit f47ccfa177
2 changed files with 40 additions and 35 deletions

View File

@@ -25,6 +25,7 @@
package net.runelite.http.api.account; package net.runelite.http.api.account;
import com.google.gson.JsonParseException; import com.google.gson.JsonParseException;
import io.reactivex.Observable;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@@ -96,7 +97,7 @@ public class AccountClient
} }
} }
public boolean sessionCheck() public Observable<Boolean> sessionCheck()
{ {
HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
.addPathSegment("account") .addPathSegment("account")
@@ -105,19 +106,22 @@ public class AccountClient
logger.debug("Built URI: {}", url); logger.debug("Built URI: {}", url);
Request request = new Request.Builder() return Observable.fromCallable(() ->
.header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) {
.url(url) Request request = new Request.Builder()
.build(); .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString())
.url(url)
.build();
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
{ {
return response.isSuccessful(); return response.isSuccessful();
} }
catch (IOException ex) catch (IOException ex)
{ {
logger.debug("Unable to verify session", ex); logger.debug("Unable to verify session", ex);
return true; // assume it is still valid if the server is unreachable return true; // assume it is still valid if the server is unreachable
} }
});
} }
} }

View File

@@ -25,6 +25,7 @@
package net.runelite.client.account; package net.runelite.client.account;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.reactivex.schedulers.Schedulers;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileWriter; import java.io.FileWriter;
@@ -37,7 +38,6 @@ import javax.inject.Singleton;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionClose;
import net.runelite.client.events.SessionOpen; import net.runelite.client.events.SessionOpen;
@@ -57,13 +57,11 @@ public class SessionManager
private AccountSession accountSession; private AccountSession accountSession;
private final EventBus eventBus; private final EventBus eventBus;
private final ConfigManager configManager;
private final WSClient wsClient; private final WSClient wsClient;
@Inject @Inject
private SessionManager(ConfigManager configManager, EventBus eventBus, WSClient wsClient) private SessionManager(EventBus eventBus, WSClient wsClient)
{ {
this.configManager = configManager;
this.eventBus = eventBus; this.eventBus = eventBus;
this.wsClient = wsClient; this.wsClient = wsClient;
@@ -94,13 +92,26 @@ public class SessionManager
// Check if session is still valid // Check if session is still valid
AccountClient accountClient = new AccountClient(session.getUuid()); AccountClient accountClient = new AccountClient(session.getUuid());
if (!accountClient.sessionCheck()) accountClient.sessionCheck()
{ .subscribeOn(Schedulers.io())
log.debug("Loaded session {} is invalid", session.getUuid()); .subscribe(b ->
return; {
} if (!b)
{
openSession(session, false); log.debug("Loaded session {} is invalid", session.getUuid());
}
else
{
openSession(session, false);
}
}, ex ->
{
if (ex instanceof IOException)
{
log.debug("Unable to verify session", ex);
openSession(session, false);
}
});
} }
private void saveSession() private void saveSession()
@@ -143,13 +154,6 @@ public class SessionManager
accountSession = session; accountSession = session;
if (session.getUsername() != null)
{
// Initialize config for new session
// If the session isn't logged in yet, don't switch to the new config
configManager.switchSession();
}
eventBus.post(SessionOpen.class, new SessionOpen()); eventBus.post(SessionOpen.class, new SessionOpen());
} }
@@ -176,9 +180,6 @@ public class SessionManager
accountSession = null; // No more account accountSession = null; // No more account
// Restore config
configManager.switchSession();
eventBus.post(SessionClose.class, new SessionClose()); eventBus.post(SessionClose.class, new SessionClose());
} }