rxpoweredup
Version:
A Typescript RxJS-based library for controlling LEGO Powered UP hubs & peripherals.
50 lines (49 loc) • 2.64 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { injectable } from 'tsyringe';
import { PortOutputCommandTaskState } from '../queue-tasks';
import { PortCommandExecutionStatus } from '../../../hub';
let FeedbackHandler = class FeedbackHandler {
inProgressOrWaitingForResponse = new Set([
PortOutputCommandTaskState.inProgress,
PortOutputCommandTaskState.waitingForResponse,
]);
waitingForResponse = new Set([PortOutputCommandTaskState.waitingForResponse]);
handlePortOutputCommandFeedback(commands, feedback) {
if (feedback.currentCommandDiscarded) {
const command = this.getFirstPortOutputCommandWithMatchingState(commands, this.inProgressOrWaitingForResponse);
command?.setExecutionStatus(PortCommandExecutionStatus.discarded);
}
if (feedback.bufferEmptyCommandCompleted) {
const command = this.getFirstPortOutputCommandWithMatchingState(commands, this.inProgressOrWaitingForResponse);
command?.setExecutionStatus(PortCommandExecutionStatus.completed);
}
if (feedback.busyOrFull) {
commands.forEach((t) => {
t.setExecutionStatus(PortCommandExecutionStatus.completed);
});
}
if (feedback.executionError) {
const command = this.getFirstPortOutputCommandWithMatchingState(commands, this.inProgressOrWaitingForResponse);
command?.setExecutionStatus(PortCommandExecutionStatus.executionError);
}
if (feedback.bufferEmptyCommandInProgress) {
const command = this.getFirstPortOutputCommandWithMatchingState(commands, this.waitingForResponse);
if (command) {
command.state = PortOutputCommandTaskState.inProgress;
command.setExecutionStatus(PortCommandExecutionStatus.inProgress);
}
}
}
getFirstPortOutputCommandWithMatchingState(commands, states) {
return commands.find((t) => states.has(t.state));
}
};
FeedbackHandler = __decorate([
injectable()
], FeedbackHandler);
export { FeedbackHandler };