protected void repeat(String name, long secs) { eventStates.put(name, State.REPEAT); if (secs <= 0) { secs = (long) observedRegion.getRepeatWaitTime(); } eventRepeatWaitTimes.put(name, (new Date()).getTime() + 1000 * secs); log(lvl, "repeat (%s): %s after %d seconds", eventTypes.get(name), name, secs); }
protected void initialize() { log(3, "resetting observe states for " + observedRegion.toStringShort()); synchronized (eventNames) { for (String name : eventNames.keySet()) { eventStates.put(name, State.FIRST); eventCounts.put(name, 0); eventMatches.put(name, null); } } shouldStopOnFirstEvent = false; if (Observing.getStopOnFirstEvent()) { log(lvl, "requested to stop on first event"); shouldStopOnFirstEvent = true; } }
protected boolean update(ScreenImage simg) { boolean fromPatterns = checkPatterns(simg); log(lvl, "update result: Patterns: %s", fromPatterns); if (!observedRegion.isObserving()) { return false; } boolean fromChanges = checkChanges(simg); log(lvl, "update result: Changes: %s", fromChanges); if (!observedRegion.isObserving()) { return false; } return false || fromPatterns || fromChanges; } }
private void callEventObserver(String name, Match match, long time) { Object ptn = eventNames.get(name); ObserveEvent.Type obsType = eventTypes.get(name); log(lvl, "%s: %s with: %s at: %s", obsType, name, ptn, match); ObserveEvent observeEvent = new ObserveEvent(name, obsType, ptn, match, observedRegion, time); Object callBack = eventCallBacks.get(name); Observing.addEvent(observeEvent); if (callBack != null && callBack instanceof ObserverCallBack) { log(lvl, "running call back: %s", obsType); if (obsType == ObserveEvent.Type.APPEAR) { ((ObserverCallBack) callBack).appeared(observeEvent); } else if (obsType == ObserveEvent.Type.VANISH) { ((ObserverCallBack) callBack).vanished(observeEvent); } else if (obsType == ObserveEvent.Type.CHANGE) { ((ObserverCallBack) callBack).changed(observeEvent); } else if (obsType == ObserveEvent.Type.GENERIC) { ((ObserverCallBack) callBack).happened(observeEvent); } } }
private void callChangeObserver(FindResults results) { int n; log(lvl, "changes: %d in: %s", results.size(), observedRegion); for (String name : eventNames.keySet()) { if (eventTypes.get(name) != ObserveEvent.Type.CHANGE) { continue; } n = (Integer) eventNames.get(name); List<Match> changes = new ArrayList<Match>(); for (int i = 0; i < results.size(); i++) { FindResult r = results.get(i); if (r.getW() * r.getH() >= n) { changes.add(observedRegion.toGlobalCoord(new Match(r, observedRegion.getScreen()))); } } if (changes.size() > 0) { long now = (new Date()).getTime(); eventCounts.put(name, eventCounts.get(name) + 1); ObserveEvent observeEvent = new ObserveEvent(name, ObserveEvent.Type.CHANGE, null, null, observedRegion, now); observeEvent.setChanges(changes); observeEvent.setIndex(n); Observing.addEvent(observeEvent); Object callBack = eventCallBacks.get(name); if (callBack != null) { log(lvl, "running call back"); ((ObserverCallBack) callBack).changed(observeEvent); } } } }
private boolean checkPatterns(ScreenImage simg) { log(lvl + 1, "update: checking patterns"); if (!observedRegion.isObserving()) { return false; f.find(new Pattern(img).similar(Settings.CheckLastSeenSimilar)); if (f.hasNext()) { log(lvl + 1, "checkLastSeen: still there"); match = new Match(new Region(img.getLastSeen()), img.getLastSeenScore()); match.setTimes(0, (new Date()).getTime() - lastSearchTime); hasMatch = true; } else { log(lvl + 1, "checkLastSeen: not there"); log(lvl + 1, "(%s): %s match: %s in:%s", eventTypes.get(name), ptn.toString(), match.toStringShort(), observedRegion.toStringShort()); } else if (eventStates.get(ptn) == State.FIRST) { log(lvl + 1, "(%s): %s match: %s in:%s", eventTypes.get(name), ptn.toString(), match.toStringShort(), observedRegion.toStringShort()); eventStates.put(name, State.UNKNOWN);