rxpoweredup
Version:
A Typescript RxJS-based library for controlling LEGO Powered UP hubs & peripherals.
24 lines (23 loc) • 842 B
JavaScript
export class Channel {
characteristic;
packetBuilder;
messageMiddleware;
queue = Promise.resolve();
constructor(characteristic, packetBuilder, messageMiddleware) {
this.characteristic = characteristic;
this.packetBuilder = packetBuilder;
this.messageMiddleware = messageMiddleware;
}
sendMessage(message, beforeSend) {
const p = this.queue.then(() => {
const resultingMessage = this.messageMiddleware.reduce((acc, middleware) => middleware.handle(acc), message);
const packet = this.packetBuilder.buildPacket(resultingMessage);
if (beforeSend) {
beforeSend();
}
return this.characteristic.writeValueWithoutResponse(packet);
});
this.queue = p.catch(() => void 0);
return p;
}
}