diff --git a/http-service/pom.xml b/http-service/pom.xml
index bb5f1a4c4a..b58c202a79 100644
--- a/http-service/pom.xml
+++ b/http-service/pom.xml
@@ -101,6 +101,11 @@
minio
3.0.6
+
+ redis.clients
+ jedis
+ 2.10.0
+
org.springframework.boot
diff --git a/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java b/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java
index 1ec97c0e0c..73aae1c360 100644
--- a/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java
+++ b/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java
@@ -39,6 +39,7 @@ import net.runelite.http.api.RuneLiteAPI;
import net.runelite.http.service.util.InstantConverter;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -48,12 +49,16 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.sql2o.Sql2o;
import org.sql2o.converters.Converter;
import org.sql2o.quirks.NoQuirks;
+import redis.clients.jedis.Jedis;
@SpringBootApplication
@EnableScheduling
@Slf4j
public class SpringBootWebApplication extends SpringBootServletInitializer
{
+ @Value("${redis.host:localhost}")
+ private String redisHost;
+
@Bean
protected ServletContextListener listener()
{
@@ -124,6 +129,12 @@ public class SpringBootWebApplication extends SpringBootServletInitializer
return new Sql2o(dataSource, new NoQuirks(converters));
}
+ @Bean
+ Jedis jedis()
+ {
+ return new Jedis(redisHost);
+ }
+
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
diff --git a/http-service/src/main/java/net/runelite/http/service/account/AccountService.java b/http-service/src/main/java/net/runelite/http/service/account/AccountService.java
index 5553a345f0..99ca9e2c54 100644
--- a/http-service/src/main/java/net/runelite/http/service/account/AccountService.java
+++ b/http-service/src/main/java/net/runelite/http/service/account/AccountService.java
@@ -39,6 +39,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.runelite.http.api.RuneLiteAPI;
import net.runelite.http.api.account.OAuthResponse;
+import net.runelite.http.api.ws.WebsocketGsonFactory;
+import net.runelite.http.api.ws.WebsocketMessage;
import net.runelite.http.api.ws.messages.LoginResponse;
import net.runelite.http.service.account.beans.SessionEntry;
import net.runelite.http.service.account.beans.UserEntry;
@@ -55,6 +57,7 @@ import org.springframework.web.bind.annotation.RestController;
import org.sql2o.Connection;
import org.sql2o.Sql2o;
import org.sql2o.Sql2oException;
+import redis.clients.jedis.Jedis;
@RestController
@RequestMapping("/account")
@@ -88,24 +91,28 @@ public class AccountService
private static final String RL_REDIR = "http://runelite.net/logged-in";
private final Gson gson = RuneLiteAPI.GSON;
+ private final Gson websocketGson = WebsocketGsonFactory.build();
private final Sql2o sql2o;
private final String oauthClientId;
private final String oauthClientSecret;
private final AuthFilter auth;
+ private final Jedis jedis;
@Autowired
public AccountService(
@Qualifier("Runelite SQL2O") Sql2o sql2o,
@Value("${oauth.client-id}") String oauthClientId,
@Value("${oauth.client-secret}") String oauthClientSecret,
- AuthFilter auth
+ AuthFilter auth,
+ Jedis jedis
)
{
this.sql2o = sql2o;
this.oauthClientId = oauthClientId;
this.oauthClientSecret = oauthClientSecret;
this.auth = auth;
+ this.jedis = jedis;
try (Connection con = sql2o.open())
{
@@ -232,17 +239,16 @@ public class AccountService
private void notifySession(UUID uuid, String username)
{
- WSService service = SessionManager.findSession(uuid);
- if (service == null)
- {
- logger.info("Session {} logged in - but no websocket session", uuid);
- return;
- }
-
LoginResponse response = new LoginResponse();
response.setUsername(username);
- service.send(response);
+ WSService service = SessionManager.findSession(uuid);
+ if (service != null)
+ {
+ service.send(response);
+ }
+
+ jedis.publish("session." + uuid, websocketGson.toJson(response, WebsocketMessage.class));
}
@RequestMapping("/logout")