Task<Void> objectsTask = Task.forResult(null).continueWhile(new Callable<Boolean>() { @Override public Boolean call() {
/** * Continues a task with the equivalent of a Task-based while loop, where the body of the loop is * a task continuation. */ public Task<Void> continueWhile(Callable<Boolean> predicate, Continuation<Void, Task<Void>> continuation) { return continueWhile(predicate, continuation, IMMEDIATE_EXECUTOR); }
private Task<Queue<ModuleInfo>> discoverModules(Collection<Constant.Module> ignore) { final Queue<ModuleInfo> info = new LinkedList<>(); final Queue<Constant.Module> modules = new LinkedList<>(); final Capture<Boolean> terminate = new Capture<>(false); for(Constant.Module it: Constant.Module.values()) { if (!ignore.contains(it)) { modules.add(it); } } return Task.forResult(null).continueWhile(() -> !terminate.get() && !modules.isEmpty(), ignored -> { final Constant.Module next = modules.poll(); return readModuleInfoTask.execute("Did not receive info for module (" + next.friendlyName + ") within %dms", Constant.RESPONSE_TIMEOUT, () -> gatt.writeCharacteristicAsync(MW_CMD_GATT_CHAR, WriteType.WITHOUT_RESPONSE, new byte[] { next.id, READ_INFO_REGISTER }) ).continueWithTask(task -> { if (task.isFaulted()) { terminate.set(true); return Task.<Void>forError(task.getError()); } else { info.add(new ModuleInfo(task.getResult())); return Task.<Void>forResult(null); } }); }).continueWithTask(task -> task.isFaulted() ? Task.forError(new TaskTimeoutException(task.getError(), info)) : Task.forResult(info)); } @Override
final Capture<Boolean> terminate = new Capture<>(false); return Task.forResult(null).continueWhile(() -> !terminate.get() && !eventCodeBlocks.isEmpty(), ignored -> { Pair<? extends DataTypeBase, ? extends CodeBlock> current = eventCodeBlocks.poll(); return Task.forResult(null).continueWhile(() -> !terminate2.get() && !recordedCommands.isEmpty(), ignored2 -> { mwPrivate.sendCommand(recordedCommands.poll()); return createEventTask.execute("Did not receive event id within %dms", Constant.RESPONSE_TIMEOUT,
final Capture<Boolean> terminate = new Capture<>(false); return Task.forResult(null).continueWhile(() -> !terminate.get() && !pendingProcessors.isEmpty(), ignored -> { final Processor current= pendingProcessors.poll(); DataTypeBase input= current.editor.source.input;
final Capture<Boolean> terminate = new Capture<>(false); return Task.forResult(null).continueWhile(() -> !terminate.get() && !producers.isEmpty(), ignored -> { final DataLogger next = new DataLogger(producers.poll()); final byte[] eventConfig= next.source.eventConfig; final Capture<Byte> i = new Capture<>((byte) 0); return Task.forResult(null).continueWhile(() -> !terminate.get() && i.get() < nReqLogIds, ignored2 -> { final int entrySize= Math.min(remainder.get(), LOG_ENTRY_SIZE), entryOffset= LOG_ENTRY_SIZE * i.get() + next.source.attributes.offset;
final Capture<Byte> nextId = new Capture<>(id); return Task.forResult(null).continueWhile(() -> !terminate.get(), ignored -> pullProcessorConfigTask.execute("Did not received data processor config within %dms", Constant.RESPONSE_TIMEOUT, () -> mwPrivate.sendCommand(new byte[] {DATA_PROCESSOR.id, Util.setRead(ADD), nextId.get()})
mag = new Capture<>(null); return Task.forResult(null).continueWhile(() -> !terminate.get(), ignored -> !ct.isCancellationRequested() ? readCalibrationStateAsync().onSuccessTask(task -> { if (updateHandler != null) { updateHandler.receivedUpdate(task.getResult());