Files
yunkong2.mqtt/test/lib/adapterSim.js
T
2018-12-25 22:05:19 +08:00

87 lines
2.2 KiB
JavaScript

'use strict';
module.exports = function (config) {
this.namespace = 'mqtt.0';
this.config = {
prefix: '',
sendInterval: 100,
publishOnSubscribe: false,
sendOnStartInterval: false,
defaultQoS: 1,
extraSet: false,
debug: true,
onchange: false,
port: 1883,
ssl: false,
webSocket: false,
certificates: null,
};
let objects = {};
let states = {};
this.config = Object.assign(this.config, config || {});
this.log = {
silly: text => console.log(`[${new Date().toISOString()} ${text}`),
debug: text => console.log(`[${new Date().toISOString()} ${text}`),
info: text => console.log(`[${new Date().toISOString()} ${text}`),
warn: text => console.warn(`[${new Date().toISOString()} ${text}`),
error: text => console.error(`[${new Date().toISOString()} ${text}`)
};
this.setState = (id, state, ack, cb) => {
if (!id.startsWith(this.namespace + '.')) {
id = this.namespace + '.' + id;
}
return this.setForeignState(id, state, ack, cb);
};
this.setForeignState = (id, state, ack, cb) => {
if (typeof ack === 'function') {
cb = ack;
ack = undefined;
}
if (typeof state !== 'object') {
state = {
val: state,
ack: ack || false
}
}
state.ts = Date.now();
state.ack = !!state.ack;
states[id] = state;
cb && cb(null);
};
this.getObject = (id, cb) => {
if (!id.startsWith(this.namespace + '.')) {
id = this.namespace + '.' + id;
}
return this.getForeignObject(id, cb);
};
this.setObject = (id, obj, cb) => {
if (!id.startsWith(this.namespace + '.')) {
id = this.namespace + '.' + id;
}
return this.setForeignObject(id, obj, cb);
};
this.getForeignObject = (id, cb) => {
cb(null, objects[id]);
};
this.setForeignObject = (id, obj, cb) => {
objects[id] = obj;
cb && cb();
};
this.clearAll = () => {
objects = {};
states = {};
};
return this;
};