Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 1x 1x 1x | import * as utils from 'sportident/lib/utils'; import {ISiCard} from 'sportident/lib/SiCard/ISiCard'; import {SiMainStationSiCardInsertedEvent, SiMainStationSiCardRemovedEvent} from 'sportident/lib/SiStation/ISiMainStation'; import {ShellCommandContext} from '../Shell'; import {BaseCommand, ArgType} from './BaseCommand'; import {SiMainStation} from 'sportident/lib/SiStation'; export class GetHolderCommand extends BaseCommand { getArgTypes(): ArgType[] { return []; } printUsage(context: ShellCommandContext): void { super.printUsage(context); context.putString('e.g. getHolder\n'); } run(context: ShellCommandContext): Promise<void> { const device = context.env.device; Iif (!device) { return Promise.reject(new Error('No device.')); } const mainStation = SiMainStation.fromSiDevice(device); Iif (mainStation === undefined) { context.putString('No such station\n'); return Promise.resolve(); } const resetCardCallbacks = () => { mainStation.removeAllEventListeners(); }; let currentReject: (() => void)|undefined = undefined; context.waitChar().then((char: number) => { Iif (char === 27 || char === 3) { // Escape || Ctrl-C resetCardCallbacks(); Iif (currentReject !== undefined) { currentReject(); } } }); return mainStation.atomically(() => { mainStation.setInfo('autoSend', false); mainStation.setInfo('mode', 'Readout'); mainStation.setInfo('code', 10); }) .then(() => { context.putString('Insert card to read...\n'); return new Promise((resolve, reject) => { currentReject = reject; resetCardCallbacks(); const handleCardRemoved: utils.EventCallback<SiMainStationSiCardRemovedEvent> = (removeEvent) => { const card = removeEvent.siCard; console.debug(`Removed card: ${card.constructor.name} ${card.cardNumber}`); resetCardCallbacks(); currentReject = undefined; setTimeout(resolve, 1); }; const handleCardRead = (card: ISiCard) => { context.putString(`${card.constructor.name} ${card.cardNumber} read.\n`); const cardHolder = card.storage.get('cardHolder')?.value ?? {}; Object.keys(cardHolder).forEach((key) => { context.putString(`${key}: ${cardHolder[key]}\n`); }); card.confirm(); context.putString('Remove card...\n'); mainStation.addEventListener('siCardRemoved', handleCardRemoved); }; const handleCardInserted: utils.EventCallback<SiMainStationSiCardInsertedEvent> = (cardEvent) => { const card = cardEvent.siCard; context.putString(`Reading ${card.constructor.name} ${card.cardNumber}...\n`); card.read() .then(handleCardRead); }; mainStation.addEventListener('siCardInserted', handleCardInserted); }); }); } } |