public ObservableTransformer match()

in rx-central-ble/src/main/java/com/uber/rxcentralble/core/matchers/RssiScanMatcher.java [40:72]


  public ObservableTransformer<ScanData, ScanData> match() {
    return scanDataStream ->
            scanDataStream
                    .doOnSubscribe(disposable -> matches.clear())
                    .compose(serviceScanMatcher.match())
                    .doOnNext(scanData -> {
                      synchronized (syncRoot) {
                        matches.put(scanData.getBluetoothDevice().getAddress(), scanData);
                      }
                    })
                    .delay(matchDelayMs, TimeUnit.MILLISECONDS)
                    .filter(match -> {
                      synchronized (syncRoot) {
                        for (ScanData other : matches.values()) {
                          // Skip our self.
                          if (other.getBluetoothDevice().getAddress().contentEquals(
                                  match.getBluetoothDevice().getAddress())) {
                            continue;
                          }

                          // If the other match is closer then do not match.
                          // RSSI is measured in dB; negative values, closer to zero indicates
                          // stronger signal.
                          if (other.getRssi() > match.getRssi()) {
                            return false;
                          }
                        }

                        // This is our match.
                        return true;
                      }
                    });
  }