From 12fe28d8ab8b1aad0d756b44484ff1868ce41a09 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 | 64 ++++++++++++------- .../storage/MessagesManager.java | 8 +++ .../websocket/WebSocketConnection.java | 6 ++ 4 files changed, 56 insertions(+), 24 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, final UUID messageGuid) { + return messagesCache.takeEphemeralMessage(destinationUuid, destinationDevice, messageGuid); + } + 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 0701ba8bd..ced591ad2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java @@ -225,6 +225,12 @@ public class WebSocketConnection implements DispatchChannel, MessageAvailability @Override public void handleEphemeralMessageAvailable(final UUID ephemeralMessageGuid) { ephemeralMessageAvailableMeter.mark(); + + final Optional maybeMessage = messagesManager.takeEphemeralMessage(account.getUuid(), device.getId(), ephemeralMessageGuid); + + if (maybeMessage.isPresent()) { + sendMessage(maybeMessage.get(), Optional.empty(), false); + } } @Override