syber-lowcode-business-materials
Version:
syber-lowcode-business-materials
195 lines (191 loc) • 5.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var Emitter = require('component-emitter');
var EVENT = 'heart';
var DeviceHeartCenter = /*#__PURE__*/function () {
function DeviceHeartCenter(props) {
this.emitter = new Emitter();
this.heartState = {};
this.heartListener = {};
this.timer = {};
this.initIpcRender();
this.TCPManage = props.TCPManage;
}
var _proto = DeviceHeartCenter.prototype;
_proto.initIpcRender = function initIpcRender() {};
_proto.getHeartState = function getHeartState(deviceId) {
return this.heartState[deviceId];
};
_proto.addEmitter = function addEmitter(deviceId, callback) {
if (callback) {
this.emitter.on(EVENT + '_' + deviceId, callback);
return true;
}
return false;
};
_proto.removeEmitter = function removeEmitter(deviceId, callback) {
if (callback) {
this.emitter.off(EVENT + '_' + deviceId, callback);
return true;
}
return false;
};
_proto.removeAllEmitter = function removeAllEmitter(deviceId) {
this.emitter.off(EVENT + '_' + deviceId);
};
_proto.emitEmitter = function emitEmitter(deviceId, type, data) {
this.emitter.emit(EVENT + '_' + deviceId, type, data);
}
//初始化心跳监听
;
_proto.initHeartListen = function initHeartListen(deviceId, key, callback) {
var _this = this;
if (!this.TCPManage) {
console.log('TCPManage未初始化');
return;
}
if (!deviceId) {
console.log('deviceId未传入');
return;
}
// console.log("init heart ", deviceId);
if (this.heartListener[deviceId]) {
//存在
var array = this.heartListener[deviceId];
if (array && array.length > 0) {
//array不为空
if (array.indexOf(key) > -1) {
console.log('已经存在监听');
} else {
console.log('不存在监听');
array.push(key);
this.addEmitter(deviceId, callback);
}
return;
} else {
console.log('没有进入return');
}
}
//不存在
this.addEmitter(deviceId, callback);
this.TCPManage.addListenDevicePush(deviceId, EVENT, function (data) {
// console.log('remote 收到数据 --->', data);
_this.TCPManage.sendToDevice(deviceId, EVENT);
var json = {
heart: 1,
//心跳存在
checkHeart: 1,
//校验心跳存在
message: data
};
_this.heartState[deviceId] = json;
_this.emitEmitter(deviceId, true, data);
});
this.joinAndroid(deviceId);
this.heartListener[deviceId] = [key];
this.startHeartInterval(deviceId);
};
_proto.joinAndroid = function joinAndroid(deviceId, getImageInterval) {
if (getImageInterval === void 0) {
getImageInterval = 3000;
}
if (!deviceId) {
console.log('deviceId未传入');
return;
}
if (!this.TCPManage) {
console.log("TCPManage未初始化");
return;
}
this.TCPManage.sendToDevice(deviceId, 'joinAndroid', {
thumbnailTime: getImageInterval,
serverTime: Date.now()
});
};
_proto.removeHeartListen = function removeHeartListen(deviceId, key, all, callback) {
if (all === void 0) {
all = false;
}
if (!this.TCPManage) {
console.log("TCPManage未初始化");
return;
}
if (!deviceId) {
console.log('deviceId未传入');
return;
}
if (this.heartListener[deviceId]) {
var array = this.heartListener[deviceId];
this.heartListener[deviceId] = _lodash["default"].pull(array, key);
this.heartState[deviceId] = null;
if (all) {
this.removeEmitter(deviceId);
} else {
this.removeEmitter(deviceId, callback);
}
if (array.length === 0) {
this.TCPManage.removeListenDevicePush(deviceId, EVENT);
this.stopHeartInterval(deviceId);
}
} else {
console.log('无该设备监听');
}
};
_proto.startHeartInterval = function startHeartInterval(deviceId) {
var _this2 = this;
if (this.timer[deviceId]) {
console.log('已经存在');
} else {
this.stopHeartInterval(deviceId);
this.timer[deviceId] = setInterval(function () {
if (_this2.heartState && _this2.heartState[deviceId]) {
var json = _this2.heartState[deviceId];
//json 存在并且检验值为1
if (json && json.checkHeart) {
json.checkHeart = 0;
json.heart = 1;
_this2.heartState[deviceId] = json;
} else {
_this2.heartState[deviceId] = {
heart: 0,
message: null,
checkHeart: 0
};
_this2.joinAndroid(deviceId);
_this2.emitEmitter(deviceId, false);
}
} else {
_this2.heartState[deviceId] = {
heart: 0,
message: null,
checkHeart: 0
};
_this2.joinAndroid(deviceId);
_this2.emitEmitter(deviceId, false);
}
}, 5000);
}
};
_proto.stopHeartInterval = function stopHeartInterval(deviceId) {
if (this.timer[deviceId]) {
clearInterval(this.timer[deviceId]);
this.timer[deviceId] = null;
}
}
// 构造一个单例
;
DeviceHeartCenter.getInstance = function getInstance() {
if (!this.instance) {
this.instance = new DeviceHeartCenter();
}
return this.instance;
};
DeviceHeartCenter.clearInstance = function clearInstance() {
this.instance = null;
};
return DeviceHeartCenter;
}();
var _default = exports["default"] = DeviceHeartCenter;