matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
56 lines (55 loc) • 2.26 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';
import { ConnectionStateListener } from './listener/implementation/connectionStateListener.js';
export class AbstractClient {
isInDisconnectingStep = false;
retryCount = 0;
connectionListeners = new ChainedConnectionListener();
messageListeners = new ChainedMessageListener();
serializer;
deserializer;
context;
connected = false;
logger;
syncMessageListener;
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;
}
initializeConnectionStateListener() {
const connectionStateListener = new ConnectionStateListener(this.logger, this, this.clientName, this.shouldReconnect);
this.connectionListeners.register(connectionStateListener);
}
async get(duid, request) {
return new Promise((resolve, reject) => {
this.syncMessageListener.waitFor(request.messageId, request, (response) => resolve(response), reject);
this.send(duid, request);
})
.then((result) => {
return result;
})
.catch((error) => {
this.logger.error(error.message);
return undefined;
});
}
registerDevice(duid, localKey, pv, nonce) {
this.context.registerDevice(duid, localKey, pv, nonce);
}
registerConnectionListener(listener) {
this.connectionListeners.register(listener);
}
registerMessageListener(listener) {
this.messageListeners.register(listener);
}
isConnected() {
return this.connected;
}
}