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);
});
});
}
}
|