/** * */ protected void publishEvent(RuleEvent event) { for(SubscriptionIntermediateFuture<RuleEvent> sub: resubscribers) { if(!sub.addIntermediateResultIfUndone(event)) { resubscribers.remove(sub); } } } }
/** * */ protected void publishEvent(RuleEvent event) { for(SubscriptionIntermediateFuture<RuleEvent> sub: resubscribers) { if(!sub.addIntermediateResultIfUndone(event)) { resubscribers.remove(sub); } } } }
/** * */ protected void publishEvent(RuleEvent event) { for(SubscriptionIntermediateFuture<RuleEvent> sub: resubscribers) { if(!sub.addIntermediateResultIfUndone(event)) { resubscribers.remove(sub); } } } }
/** * */ protected void publishEvent(RuleEvent event) { for(SubscriptionIntermediateFuture<RuleEvent> sub: resubscribers) { if(!sub.addIntermediateResultIfUndone(event)) { resubscribers.remove(sub); } } } }
@Override public IFuture<Void> execute(IInternalAccess ia) { // Notify all subscribers for(SubscriptionIntermediateFuture<String> subscriber: subscriptions) { // Add the current time as intermediate result. // The if-undone part is used to ignore errors, // when subscription was cancelled in the mean time. subscriber.addIntermediateResultIfUndone(new Date().toString()); } return IFuture.DONE; } });
public void resultAvailable(Collection<Email> emails) { long dur = (System.currentTimeMillis()-start)/1000; // System.out.println("Needed for email fetching [s]: "+dur); if(emails!=null && emails.size()>0) { for(Email email: emails) { if(!fut.addIntermediateResultIfUndone(email)) { subscriptions.remove(fut); } } } }
public IFuture<Void> execute(IInternalAccess ia) { // System.out.println("test3: "+report.getDescription()); if(ret.addIntermediateResultIfUndone("ping")) { waitForRealtimeDelay(1000, this); } return IFuture.DONE; } });
public void intermediateResultAvailable(String result) { if(!ret.addIntermediateResultIfUndone(result)) { fut.terminate(); } }
public void intermediateResultAvailable(String result) { if(!ret.addIntermediateResultIfUndone(result)) { fut.terminate(); } }
/** * Post an event to subscribed listeners. */ protected void postEvent(String result, Object value) { if(resfuts!=null) { Tuple2<String, Object> event = new Tuple2<String, Object>(result, value); for(SubscriptionIntermediateFuture<Tuple2<String, Object>> fut: resfuts) { fut.addIntermediateResultIfUndone(event); } } } }
/** * Replicates the given event and topic to all remote replication subscribers where they publish it to their local subscribers. * * @param topic The given topic * @param event The given event */ private void replicate(String topic, Event event) { List<SubscriptionIntermediateFuture<Event>> subs = repsubscribers.get(topic); if (subs != null) { for(Iterator<SubscriptionIntermediateFuture<Event>> it = subs.iterator(); it.hasNext();) { SubscriptionIntermediateFuture<Event> sub = it.next(); if (!sub.addIntermediateResultIfUndone(event)) { System.out.println("Removed: " + sub); it.remove(); } } if(subs.isEmpty()) repsubscribers.remove(topic); } }
/** * Notify the current state. */ protected void notifyCurrentState(SubscriptionIntermediateFuture<IRulebaseEvent> sub) { for(IRule<?> rule: rulebase.getRules()) { if(!sub.addIntermediateResultIfUndone(new RuleAddedEvent(-1, rule))) { rbsubscribers.remove(sub); } } } }
/** * Notify the current state. */ protected void notifyCurrentState(SubscriptionIntermediateFuture<IRulebaseEvent> sub) { for(IRule<?> rule: rulebase.getRules()) { if(!sub.addIntermediateResultIfUndone(new RuleAddedEvent(-1, rule))) { rbsubscribers.remove(sub); } } } }
/** * Subscribe to rule executions. */ public ISubscriptionIntermediateFuture<RuleEvent> subscribeToEngine() { final SubscriptionIntermediateFuture<RuleEvent> ret = (SubscriptionIntermediateFuture<RuleEvent>)SFuture.getNoTimeoutFuture(SubscriptionIntermediateFuture.class, agent); ret.setTerminationCommand(new TerminationCommand() { public void terminated(Exception reason) { resubscribers.remove(ret); } }); resubscribers.add(ret); // signal with null subscribe done ret.addIntermediateResultIfUndone(null); return ret; }
/** * Subscribe to rule executions. */ public ISubscriptionIntermediateFuture<RuleEvent> subscribeToEngine() { final SubscriptionIntermediateFuture<RuleEvent> ret = (SubscriptionIntermediateFuture<RuleEvent>)SFuture.getNoTimeoutFuture(SubscriptionIntermediateFuture.class, agent); ret.setTerminationCommand(new TerminationCommand() { public void terminated(Exception reason) { resubscribers.remove(ret); } }); resubscribers.add(ret); // signal with null subscribe done ret.addIntermediateResultIfUndone(null); return ret; }
/** * Subscribe to rule executions. */ public ISubscriptionIntermediateFuture<RuleEvent> subscribeToEngine() { final SubscriptionIntermediateFuture<RuleEvent> ret = (SubscriptionIntermediateFuture<RuleEvent>)SFuture.getNoTimeoutFuture(SubscriptionIntermediateFuture.class, agent); ret.setTerminationCommand(new TerminationCommand() { public void terminated(Exception reason) { resubscribers.remove(ret); } }); resubscribers.add(ret); // signal with null subscribe done ret.addIntermediateResultIfUndone(null); return ret; }
/** * Subscribe to rule executions. */ public ISubscriptionIntermediateFuture<RuleEvent> subscribeToEngine() { final SubscriptionIntermediateFuture<RuleEvent> ret = (SubscriptionIntermediateFuture<RuleEvent>)SFuture.getNoTimeoutFuture(SubscriptionIntermediateFuture.class, agent); ret.setTerminationCommand(new TerminationCommand() { public void terminated(Exception reason) { resubscribers.remove(ret); } }); resubscribers.add(ret); // signal with null subscribe done ret.addIntermediateResultIfUndone(null); return ret; }
/** * Notify all subscribers of an event. */ protected IFuture<Void> notifySubscribers(ARulebaseEvent event, Set<Integer> evs) { Future<Void> ret = new Future<Void>(); if(!rbsubscribers.isEmpty()) { ARulebaseEvent re = event; for(SubscriptionIntermediateFuture<IRulebaseEvent> sub: rbsubscribers) { evs.add(Integer.valueOf(re.getId())); if(!sub.addIntermediateResultIfUndone(re)) { rbsubscribers.remove(sub); } re = re.createCopy(); } } else { ret.setResult(null); } return ret; }
@AgentBody public void body() { Random r = new Random(); while(true) { int delay = r.nextInt(5)*1000; agent.getComponentFeature(IExecutionFeature.class).waitForDelay(delay).get(); String item = SUtil.createUniqueId("Item"); System.out.println("Offering new item: "+item); openitems.add(item); for(SubscriptionIntermediateFuture<String> sub: subscriptions) { sub.addIntermediateResultIfUndone(item); // if(!sub.addIntermediateResultIfUndone(item)) // subscriptions.remove(sub); } } }
/** * The agent body. */ @AgentBody public void body() { for(int i=0; i<100; i++) { agent.getComponentFeature(IExecutionFeature.class).waitForDelay(2000).get(); for(SubscriptionIntermediateFuture<String> sub: subscriptions) { if(!sub.addIntermediateResultIfUndone("News "+i)) { subscriptions.remove(sub); } } } }