logger.debug("Checking for new message from server");
try {
isWaitingForMessage = true;
- var result = signalWebSocket.readOrEmpty(timeout.toMillis(), envelope1 -> {
+ var queueNotEmpty = signalWebSocket.readMessageBatch(timeout.toMillis(), 1, batch -> {
+ logger.debug("Retrieved {} envelopes!", batch.size());
isWaitingForMessage = false;
- final var recipientId = envelope1.hasSourceUuid() ? account.getRecipientResolver()
- .resolveRecipient(envelope1.getSourceAddress()) : null;
- logger.trace("Storing new message from {}", recipientId);
- // store message on disk, before acknowledging receipt to the server
- cachedMessage[0] = account.getMessageCache().cacheMessage(envelope1, recipientId);
+ for (final var it : batch) {
+ SignalServiceEnvelope envelope1 = new SignalServiceEnvelope(it.getEnvelope(),
+ it.getServerDeliveredTimestamp());
+ final var recipientId = envelope1.hasSourceUuid() ? account.getRecipientResolver()
+ .resolveRecipient(envelope1.getSourceAddress()) : null;
+ logger.trace("Storing new message from {}", recipientId);
+ // store message on disk, before acknowledging receipt to the server
+ cachedMessage[0] = account.getMessageCache().cacheMessage(envelope1, recipientId);
+ }
+ return true;
});
isWaitingForMessage = false;
backOffCounter = 0;
- if (result.isPresent()) {
+ if (queueNotEmpty) {
if (remainingMessages > 0) {
remainingMessages -= 1;
}
- envelope = result.get();
+ envelope = cachedMessage[0].loadEnvelope();
logger.debug("New message received from server");
} else {
logger.debug("Received indicator that server queue is empty");