From 5e34823a4989c670855a57fd49520b27bb76821d Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Fri, 4 Sep 2020 12:10:24 -0400 Subject: [PATCH] Optionally send online-only messages via keyspace notifications. --- .../textsecuregcm/WhisperServerService.java | 2 +- .../textsecuregcm/push/WebsocketSender.java | 61 +++++++++++++------ .../storage/MessagesManager.java | 8 +++ .../websocket/WebSocketConnection.java | 6 ++ 4 files changed, 56 insertions(+), 21 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 995b43ef8..8753e1fbc 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -300,7 +300,7 @@ public class WhisperServerService extends Application takeEphemeralMessage(final UUID destinationUuid, final long destinationDevice) { + return messagesCache.takeEphemeralMessage(destinationUuid, destinationDevice); + } + public OutgoingMessageEntityList getMessagesForDevice(String destination, UUID destinationUuid, long destinationDevice, final String userAgent) { RedisOperation.unchecked(() -> pushLatencyManager.recordQueueRead(destinationUuid, destinationDevice, userAgent)); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java index 0367a0c55..571b6ab7e 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java @@ -224,6 +224,12 @@ public class WebSocketConnection implements DispatchChannel, MessageAvailability @Override public void handleNewEphemeralMessageAvailable() { ephemeralMessageAvailableMeter.mark(); + + final Optional maybeMessage = messagesManager.takeEphemeralMessage(account.getUuid(), device.getId()); + + if (maybeMessage.isPresent()) { + sendMessage(maybeMessage.get(), Optional.empty(), false); + } } @Override