/** * await until all futures are settled and stream their results. Uses Actors.DEFAULT_TIMEOUT */ public static <T> Stream<T> awaitAll(IPromise<T>... futures) { return streamHelper(all(futures).await()); }
/** * create a hoarde with each actor having a dedicated thread * @param numActors * @param actor */ public Hoarde(int numActors, Class<T> actor) { actors = new Actor[numActors]; for (int i = 0; i < actors.length; i++) { actors[i] = Actors.AsActor(actor); } }
@CallerSideMethod public void __addDeadLetter(Actor receiver, String methodName) { String senderString = sender.get() == null ? "null" : sender.get().getClass().getName(); String s = "DEAD LETTER: sender:" + senderString + " receiver::msg:" + receiver.getClass().getSimpleName() + "::" + methodName; s = s.replace("_ActorProxy",""); Actors.AddDeadLetter(s); }
public static <T> IPromise<IPromise<T>[]> all(int count, Function<Integer,IPromise<T>> loop) { IPromise<T> promis[] = new IPromise[count]; for ( int i = 0; i < count; i++ ) { promis[i] = loop.apply(i); } return all(promis); }
@Override public void subscribe(Subscriber subs) { if ( subs.getFilter() instanceof RLNoQueryPredicate ) { subs.getReceiver().receive(new QueryDoneMessage()); proc.startListening(subs); } else { proc.startListening(subs); forEach(subs.getFilter(), (change, err) -> { if (Actors.isResult(err)) { subs.getReceiver().receive(new AddMessage(0,change)); } else if (Actors.isComplete(err)) { subs.getReceiver().receive(new QueryDoneMessage()); } }); } }
@Override public void complete(Object result, Object error) { if ( Actors.isComplete(error) ) { if ( finishLatch != null ) { int count = finishLatch.decrementAndGet(); if ( count == 0 ) { finSignal.resolve(); } } else finSignal.resolve(); } else { if (localCallback != null) { localCallback.complete((O) result, error); } else { System.err.println("set callback using then() prior sending"); } } } };
Actors.reject(e); Actors.SubmitDelayed(TCPServerConnector.DELAY_MS_TILL_CLOSE, () -> { selector.selectedKeys().forEach(key -> { try {
/** * similar to es6 Promise.all method, however non-IPromise objects are not allowed * * returns a future which is settled once all promises provided are settled * */ public static <T> IPromise<List<IPromise<T>>> all(List<IPromise<T>> futures) { Promise res = new Promise(); awaitSettle(futures, res); return res; }
public static void AddDeadLetter(String s) { Log.Lg.warn(null,s); DeadLetters().add(s); }
public static boolean isResult(Object error) { return isCont(error); }
@Override public IPromise closeServer() { try { clientSockets.forEach( socket -> { // need to give time for flush. No way to determine wether buffers are out => // risk of premature close + message loss Actors.SubmitDelayed(DELAY_MS_TILL_CLOSE, () -> { try { socket.close(); } catch (IOException e) { Log.Warn(this, e); } }); }); acceptSocket.close(); } catch (IOException e) { return new Promise<>(null,e); } return new Promise<>(null); }
@Override public IPromise<List<TableDescription>> getTableDescriptions() { List<IPromise> collect = tableMap.values().stream().map(ts -> ts.getDescription()).collect(Collectors.toList()); return Actors.allMapped((List)collect); }
public static <T> IPromise<IPromise<T>[]> all(int count, Function<Integer,IPromise<T>> loop) { IPromise<T> promis[] = new IPromise[count]; for ( int i = 0; i < count; i++ ) { promis[i] = loop.apply(i); } return all(promis); }
@Override public void complete(Object result, Object error) { if ( Actors.isComplete(error) ) { if ( finishLatch != null ) { int count = finishLatch.decrementAndGet(); if ( count == 0 ) { finSignal.resolve(); } } else finSignal.resolve(); } else { if (localCallback != null) { localCallback.complete((O) result, error); } else { System.err.println("set callback using then() prior sending"); } } } };
Actors.reject(e); Actors.SubmitDelayed(TCPServerConnector.DELAY_MS_TILL_CLOSE, () -> { selector.selectedKeys().forEach(key -> { try {
/** * similar to es6 Promise.all method, however non-IPromise objects are not allowed * * returns a future which is settled once all promises provided are settled * */ public static <T> IPromise<IPromise<T>[]> all(IPromise<T>... futures) { Promise res = new Promise(); awaitSettle(futures, res); return res; }
public static void AddDeadLetter(String s) { Log.Lg.warn(null,s); DeadLetters().add(s); }
public static boolean isResult(Object error) { return isCont(error); }
@Override public IPromise closeServer() { try { clientSockets.forEach( socket -> { // need to give time for flush. No way to determine wether buffers are out => // risk of premature close + message loss Actors.SubmitDelayed(DELAY_MS_TILL_CLOSE, () -> { try { socket.close(); } catch (IOException e) { Log.Warn(this, e); } }); }); acceptSocket.close(); } catch (IOException e) { return new Promise<>(null,e); } return new Promise<>(null); }
/** * await until all futures are settled and stream their results */ public static <T> Stream<T> awaitAll(long timeoutMS, IPromise<T>... futures) { return streamHelper(all(futures).await(timeoutMS)); }