RTU_ALL_AI/config/web/js/signal-store.js

62 lines
1.5 KiB
JavaScript

/**
* @file signal-store.js
* @brief 信号数据缓存 — 接收 WS 推送并更新内存 + localStorage 持久化
*/
var SignalStore = {
data: { out: [], in: [], yk: [], ao: [], param: [] },
/**
* @brief 合并 WS 推送数据到缓存, 并持久化到 localStorage
* @param {object} push {out:[...], in:[...], ...}
*/
update: function(push) {
var self = this;
['out', 'in', 'yk', 'ao', 'param'].forEach(function(type) {
if (push[type])
{
var map = {};
self.data[type].forEach(function(s) { map[s.saddr] = s; });
push[type].forEach(function(s) { map[s.saddr] = s; });
self.data[type] = Object.keys(map).map(function(k) { return map[k]; });
}
});
this._save();
},
get: function(type) {
return this.data[type] || [];
},
addFromPush: function(type, item) {
this.data[type].push(item);
this._save();
},
remove: function(type, saddr) {
this.data[type] = this.data[type].filter(function(s) { return s.saddr !== saddr; });
this._save();
},
/** @brief 从 localStorage 恢复缓存 */
restore: function() {
try {
var saved = localStorage.getItem('rtu_signals');
if (saved) {
var parsed = JSON.parse(saved);
if (parsed && parsed.out) { this.data = parsed; }
}
} catch (e) { /* ignore corrupt data */ }
},
/** @brief 持久化到 localStorage (debounced) */
_save: function() {
var self = this;
if (this._timer) clearTimeout(this._timer);
this._timer = setTimeout(function() {
try { localStorage.setItem('rtu_signals', JSON.stringify(self.data)); } catch (e) {}
}, 500);
}
};