Получение списка токенов

Пример получения списка токенов, подключенных через ридеры iR301-UL, iR301-U, bR301, JaCarta USB и |bR301BLE|(|jcrw_getTokensWithQueue|).

В данном случае:

  • обработчик результата вызывается в главном потоке (аргумент queue);
  • будет выполнено 5 попыток получения списка токенов (аргумент attempts);
  • задержка между попытками - 1 секунда (аргумент attemptsDelay);
  • поиск остановится как только будет обнаружен токен Криптотокен 2 ЭП (аргумент predicate).
// 1. Проверка наличия readerWatcher.
// Объект существует, если инициализация менеджера прошла успешно
// и был передан хотя бы один из следующих флагов: JCReadersIR301AndBR301, JCReadersBR301BLEAndBR500, JCReadersCTK
id<JCReaderWatcher> readerWatcher = JCManager.defaultManager.readerWatcher;
if (!readerWatcher) {
    // 2. Обработка отсутствия объекта readerWatcher
    return;
}

// 3. Запуск процесса поиска токенов
BOOL started = [readerWatcher
                getTokensWithQueue:dispatch_get_main_queue()
                attempts:5
                attemptsDelay:1.0
                predicate:^BOOL(id<JCToken> _Nonnull token, BOOL * _Nonnull stop) {
    // 5. При появлении нового токена проверяем его тип
    if(token.type == JCTokenTypeCT2) {
        // Если это токен Криптотокен 2 ЭП, то пропускаем его и останавливаем процесс поиска
        *stop = YES;
        return YES;
    }
    // Если токен не подходит, то игнорируем его и продолжаем поиск
    return NO;
}

                handler:^(NSArray<id<JCToken>> * _Nullable tokens, NSError * _Nullable error) {
    if(error) {
        // 6. Обработка ошибки поиска токенов
        return;
    }
    // 7. Обработка списка токенов (tokens)
}];

if (!started) {
    // 4. Обработка ситуации, когда процесс поиска токенов не запустился.
    return;
}