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 | 1x 1x 1x | import si from 'sportident/lib';
import {SiDeviceReceiveEvent} from 'sportident/lib/SiDevice/ISiDevice';
import * as utils from 'sportident/lib/utils';
import {SiExternalApplicationReceiveEvent} from '../ISiExternalApplication';
import {ShellCommandContext} from '../Shell';
import {BaseCommand, ArgType} from './BaseCommand';
export class PipeCommand extends BaseCommand {
getArgTypes(): ArgType[] {
return [
{
name: 'path',
regex: /^\S+$/,
description: 'The absolute path of a pipe (on the machine where testbench-server is running)',
},
];
}
printUsage(context: ShellCommandContext): void {
super.printUsage(context);
context.putString('e.g. pipe /tmp/vwin_com1\n');
}
run(context: ShellCommandContext): Promise<void> {
const url = context.args[1];
const device = context.env.device;
const SiExternalApplication = context.env.externalApplication;
return new Promise((resolve, reject) => {
Iif (!SiExternalApplication) {
reject(new Error('No SiExternalApplication.'));
return;
}
Iif (!device) {
reject(new Error('No device.'));
return;
}
const externalApplication = new SiExternalApplication(url);
let deviceToApplicationBuffer: number[] = [];
let applicationToDeviceBuffer: number[] = [];
const onDeviceReceive: utils.EventCallback<SiDeviceReceiveEvent> =
(e) => {
const uint8Data = e.uint8Data;
deviceToApplicationBuffer.push(...uint8Data);
const {messages, remainder} = si.protocol.parseAll(deviceToApplicationBuffer);
messages.forEach((message) => {
console.log('SiDevice:', si.protocol.prettyMessage(message));
});
deviceToApplicationBuffer = remainder;
externalApplication.send(uint8Data);
};
device.addEventListener('receive', onDeviceReceive);
const onApplicationReceive: utils.EventCallback<SiExternalApplicationReceiveEvent> =
(e) => {
const uint8Data = e.uint8Data;
applicationToDeviceBuffer.push(...uint8Data);
const {messages, remainder} = si.protocol.parseAll(applicationToDeviceBuffer);
messages.forEach((message) => {
console.log('SiExternalApplication:', si.protocol.prettyMessage(message));
});
applicationToDeviceBuffer = remainder;
device.send(uint8Data);
};
externalApplication.addEventListener('receive', onApplicationReceive);
context.waitChar().then((char: number) => {
Iif (char === 27 || char === 3) { // Escape || Ctrl-C
device.removeEventListener('receive', onDeviceReceive);
externalApplication.removeEventListener('receive', onApplicationReceive);
externalApplication.close();
context.putString('Piping finished.\n');
resolve();
}
});
});
}
}
|