2019-07-03 18:23:26 -04:00
|
|
|
package org.thoughtcrime.securesms.gcm;
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.WorkerThread;
|
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.IncomingMessageProcessor;
|
|
|
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
|
|
|
import org.thoughtcrime.securesms.logging.Log;
|
|
|
|
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieves messages over the REST endpoint.
|
|
|
|
*/
|
|
|
|
public class RestStrategy implements MessageRetriever.Strategy {
|
|
|
|
|
|
|
|
private static final String TAG = Log.tag(RestStrategy.class);
|
|
|
|
|
|
|
|
private static final long SOCKET_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
|
|
|
|
|
|
|
|
@WorkerThread
|
|
|
|
@Override
|
|
|
|
public boolean run() {
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
|
|
|
|
try (IncomingMessageProcessor.Processor processor = ApplicationDependencies.getIncomingMessageProcessor().acquire()) {
|
|
|
|
SignalServiceMessageReceiver receiver = ApplicationDependencies.getSignalServiceMessageReceiver();
|
|
|
|
receiver.setSoTimeoutMillis(SOCKET_TIMEOUT);
|
|
|
|
|
|
|
|
receiver.retrieveMessages(envelope -> {
|
|
|
|
Log.i(TAG, "Retrieved an envelope." + timeSuffix(startTime));
|
|
|
|
processor.processEnvelope(envelope);
|
|
|
|
Log.i(TAG, "Successfully processed an envelope." + timeSuffix(startTime));
|
|
|
|
});
|
|
|
|
|
|
|
|
return true;
|
|
|
|
} catch (IOException e) {
|
2019-08-06 14:10:26 -04:00
|
|
|
Log.w(TAG, "Failed to retrieve messages. Resetting the SignalServiceMessageReceiver.", e);
|
|
|
|
ApplicationDependencies.resetSignalServiceMessageReceiver();
|
2019-07-03 18:23:26 -04:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private static String timeSuffix(long startTime) {
|
|
|
|
return " (" + (System.currentTimeMillis() - startTime) + " ms elapsed)";
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NonNull String toString() {
|
|
|
|
return RestStrategy.class.getSimpleName();
|
|
|
|
}
|
|
|
|
}
|