clean
parent
5cb3a79a27
commit
c7af1cabe3
@ -1,13 +0,0 @@
|
|||||||
package org.session.libsignal.service.internal.util.concurrent;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
public interface ListenableFuture<T> extends Future<T> {
|
|
||||||
void addListener(Listener<T> listener);
|
|
||||||
|
|
||||||
public interface Listener<T> {
|
|
||||||
public void onSuccess(T result);
|
|
||||||
public void onFailure(ExecutionException e);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,117 +0,0 @@
|
|||||||
package org.session.libsignal.service.internal.util.concurrent;
|
|
||||||
|
|
||||||
import org.session.libsignal.service.internal.util.concurrent.ListenableFuture;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.TimeoutException;
|
|
||||||
|
|
||||||
public class SettableFuture<T> implements ListenableFuture<T> {
|
|
||||||
|
|
||||||
private final List<Listener<T>> listeners = new LinkedList<Listener<T>>();
|
|
||||||
|
|
||||||
private boolean completed;
|
|
||||||
private boolean canceled;
|
|
||||||
private volatile T result;
|
|
||||||
private volatile Throwable exception;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized boolean cancel(boolean mayInterruptIfRunning) {
|
|
||||||
if (!completed && !canceled) {
|
|
||||||
canceled = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized boolean isCancelled() {
|
|
||||||
return canceled;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized boolean isDone() {
|
|
||||||
return completed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean set(T result) {
|
|
||||||
synchronized (this) {
|
|
||||||
if (completed || canceled) return false;
|
|
||||||
|
|
||||||
this.result = result;
|
|
||||||
this.completed = true;
|
|
||||||
|
|
||||||
notifyAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyAllListeners();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setException(Throwable throwable) {
|
|
||||||
synchronized (this) {
|
|
||||||
if (completed || canceled) return false;
|
|
||||||
|
|
||||||
this.exception = throwable;
|
|
||||||
this.completed = true;
|
|
||||||
|
|
||||||
notifyAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyAllListeners();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized T get() throws InterruptedException, ExecutionException {
|
|
||||||
while (!completed) wait();
|
|
||||||
|
|
||||||
if (exception != null) throw new ExecutionException(exception);
|
|
||||||
else return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized T get(long timeout, TimeUnit unit)
|
|
||||||
throws InterruptedException, ExecutionException, TimeoutException
|
|
||||||
{
|
|
||||||
long startTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
while (!completed && System.currentTimeMillis() - startTime < unit.toMillis(timeout)) {
|
|
||||||
wait(unit.toMillis(timeout));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!completed) throw new TimeoutException();
|
|
||||||
else return get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addListener(Listener<T> listener) {
|
|
||||||
synchronized (this) {
|
|
||||||
listeners.add(listener);
|
|
||||||
|
|
||||||
if (!completed) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void notifyAllListeners() {
|
|
||||||
List<Listener<T>> localListeners;
|
|
||||||
|
|
||||||
synchronized (this) {
|
|
||||||
localListeners = new LinkedList<Listener<T>>(listeners);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Listener<T> listener : localListeners) {
|
|
||||||
notifyListener(listener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void notifyListener(Listener<T> listener) {
|
|
||||||
if (exception != null) listener.onFailure(new ExecutionException(exception));
|
|
||||||
else listener.onSuccess(result);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
@file:JvmName("PromiseUtilities")
|
|
||||||
package org.session.libsignal.service.loki.utilities
|
|
||||||
|
|
||||||
import nl.komponents.kovenant.*
|
|
||||||
import nl.komponents.kovenant.jvm.asDispatcher
|
|
||||||
import org.session.libsignal.libsignal.logging.Log
|
|
||||||
import java.util.concurrent.Executors
|
|
||||||
|
|
||||||
fun Kovenant.createContext(): Context {
|
|
||||||
return createContext {
|
|
||||||
callbackContext.dispatcher = Executors.newSingleThreadExecutor().asDispatcher()
|
|
||||||
workerContext.dispatcher = ThreadUtils.executorPool.asDispatcher()
|
|
||||||
multipleCompletion = { v1, v2 ->
|
|
||||||
Log.d("Loki", "Promise resolved more than once (first with $v1, then with $v2); ignoring $v2.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <V, E : Throwable> Promise<V, E>.get(defaultValue: V): V {
|
|
||||||
return try {
|
|
||||||
get()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
defaultValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <V, E : Throwable> Promise<V, E>.recover(callback: (exception: E) -> V): Promise<V, E> {
|
|
||||||
val deferred = deferred<V, E>()
|
|
||||||
success {
|
|
||||||
deferred.resolve(it)
|
|
||||||
}.fail {
|
|
||||||
try {
|
|
||||||
val value = callback(it)
|
|
||||||
deferred.resolve(value)
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
deferred.reject(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return deferred.promise
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
package org.session.libsignal.service.loki.utilities
|
package org.session.libsignal.utilities
|
||||||
|
|
||||||
import java.util.concurrent.*
|
import java.util.concurrent.*
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package org.session.libsession.utilities.concurrent;
|
package org.session.libsignal.utilities.concurrent;
|
||||||
|
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
@ -1,4 +1,4 @@
|
|||||||
package org.session.libsession.utilities.concurrent;
|
package org.session.libsignal.utilities.concurrent;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
Loading…
Reference in New Issue