Мониторинг токенов

Пример мониторинга подключения/отключения токенов, подключаемых через ридеры iR301-UL, iR301-U, bR301, JaCarta USB и bR301 BLE (startWithQueue).

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

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

// 3. Запуск процесса мониторинга токенов
BOOL started = [readerWatcher
                startWithQueue:dispatch_get_main_queue()
                notificationCenter:NSNotificationCenter.defaultCenter
                tokenAttached:^(id<JCToken>  _Nonnull token) {
    // 5. Обработка события подключения токена
}
                tokenDetached:^(id<JCToken>  _Nonnull token) {
    // 6. Обработка события отключения токена
}
                watcherStopped:^{
    // 7. Обработка события остановки мониторинга токенов
}];

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

Регистрация уведомления о подключения токена

tokenAttachedObserver = [[NSNotificationCenter defaultCenter]
                         addObserverForName:JCTokenAttachedNotification
                         object:nil
                         queue:[NSOperationQueue mainQueue]
                         usingBlock:^(NSNotification * _Nonnull note) {
    // Обработка события подключения токена
    id<JCToken> token = [note.userInfo objectForKey:JCNotificationParamToken];
}];

// ...

// Не забудьте удалить tokenAttachedObserver как того требует [NSNotificationCenter addObserverForName:object:queue:usingBlock]
[[NSNotificationCenter defaultCenter] removeObserver:tokenAttachedObserver];
tokenAttachedObserver = nil;

Регистрация уведомления об отключении токена

tokenDetachedObserver = [[NSNotificationCenter defaultCenter]
                         addObserverForName:JCTokenDetachedNotification
                         object:nil
                         queue:[NSOperationQueue mainQueue]
                         usingBlock:^(NSNotification * _Nonnull note) {
    // Обработка события отключения токена
    id<JCToken> token = [note.userInfo objectForKey:JCNotificationParamToken];
}];

// ...

// Не забудьте удалить tokenDetachedObserver как того требует [NSNotificationCenter addObserverForName:object:queue:usingBlock]
[[NSNotificationCenter defaultCenter] removeObserver:tokenDetachedObserver];
tokenDetachedObserver = nil;