@Override
public Receive createReceive() {
return receiveBuilder()
.match(Result.class, r -> expected.contains(r.getPosition()), r -> {
expected.remove(r.getPosition());
results.put(r.getPosition(), r.getValue());
if (results.size() == 2) {
flakiness();
Integer result = evaluate(expr, results.get(Left),results.get(Right));
log().info("Evaluated expression {} to value {}", expr, result);
getContext().parent().tell(new Result(expr, result, myPosition), self());
getContext().stop(self());
}
})
.match(Result.class, r -> {
throw new IllegalStateException("Expected results for positions " +
expected.stream().map(Object::toString).collect(Collectors.joining(", ")) +
" but got position " + r.getPosition());
})
.build();
}