private boolean enqueue(QuerySet querySet) { boolean newEntry = false; LinkedList<QuerySet> queries = mBssQueues.get(querySet.getBssid()); if (queries == null) { queries = new LinkedList<>(); mBssQueues.put(querySet.getBssid(), queries); newEntry = true; } queries.addLast(querySet); return newEntry; }
public void tickle(boolean wifiOff) { synchronized (mCache) { if (wifiOff) { mBssQueues.clear(); } else { long now = System.currentTimeMillis(); Iterator<Map.Entry<Long, LinkedList<QuerySet>>> bssIterator = mBssQueues.entrySet().iterator(); while (bssIterator.hasNext()) { // Get the list of entries for this BSSID Map.Entry<Long, LinkedList<QuerySet>> bssEntries = bssIterator.next(); Iterator<QuerySet> querySetIterator = bssEntries.getValue().iterator(); while (querySetIterator.hasNext()) { QuerySet querySet = querySetIterator.next(); QueryEntry queryEntry = querySet.peek(); long age = queryEntry.age(now); if (age > RequeryTimeHigh) { // Timed out entry, move on to the next. queryEntry = querySet.pop(); if (queryEntry == null) { // Empty query set, update status and remove it. querySet.getOsuInfo().setIconStatus(OSUInfo.IconStatus.NotAvailable); querySetIterator.remove(); } else { // Start a query on the next entry and bail out of the set iteration initiateQuery(querySet.getBssid()); break; } } else if (age > RequeryTimeLow) { // Re-issue queries for qualified entries and bail out of set iteration initiateQuery(querySet.getBssid()); break; } } if (bssEntries.getValue().isEmpty()) { // Kill the whole bucket if the set list is empty bssIterator.remove(); } } } } }
public void startIconQuery(OSUInfo osuInfo, List<IconInfo> icons) { Log.d("ZXZ", String.format("Icon query on %012x for %s", osuInfo.getBSSID(), icons)); if (icons == null || icons.isEmpty()) { return; } QuerySet querySet = new QuerySet(osuInfo, icons); for (QueryEntry entry : querySet.getAllEntries()) { HSIconFileElement iconElement = mCache.get(entry.getKey()); if (iconElement != null) { osuInfo.setIconFileElement(iconElement, entry.getKey().getFileName()); mOSUManager.iconResults(Arrays.asList(osuInfo)); return; } } if (enqueue(querySet)) { initiateQuery(querySet.getBssid()); } }