matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
42 lines (41 loc) • 1.66 kB
JavaScript
import { MessageDeserializer } from '../helper/messageDeserializer.js';
import { MessageSerializer } from '../helper/messageSerializer.js';
import { ChainedConnectionListener } from './listener/implementation/chainedConnectionListener.js';
import { ChainedMessageListener } from './listener/implementation/chainedMessageListener.js';
import { SyncMessageListener } from './listener/implementation/syncMessageListener.js';
export class AbstractClient {
connectionListeners = new ChainedConnectionListener();
messageListeners = new ChainedMessageListener();
connected = false;
context;
serializer;
deserializer;
syncMessageListener;
logger;
constructor(logger, context) {
this.context = context;
this.serializer = new MessageSerializer(this.context, logger);
this.deserializer = new MessageDeserializer(this.context, logger);
this.syncMessageListener = new SyncMessageListener(logger);
this.messageListeners.register(this.syncMessageListener);
this.logger = logger;
}
async get(duid, request) {
return new Promise((resolve, reject) => {
this.syncMessageListener.waitFor(request.messageId, (response) => resolve(response), reject);
this.send(duid, request);
});
}
registerDevice(duid, localKey, pv) {
this.context.registerDevice(duid, localKey, pv);
}
registerConnectionListener(listener) {
this.connectionListeners.register(listener);
}
registerMessageListener(listener) {
this.messageListeners.register(listener);
}
isConnected() {
return this.connected;
}
}