MCSManager/model/ObserverModel.js
2017-11-13 12:26:31 +08:00

72 lines
2.0 KiB
JavaScript

//一个专门为了解决内存泄露而设计的观察者模型
// var observerMask = {
// 'event': [{
// 'callbackName': 'dsdsds',
// 'callback': () => {}
// },
// {
// sd: 'callbackfun'
// }
// ],
// 'event2': []
// };
var observerMask = {};
const CALLBACK = 'CALLBACK';
const CALLBACK_NAME = 'CALLBACK_NAME'
const FUNCTION_END = '__FUNCTI0N_END__'
module.exports.FUNCTION_END = FUNCTION_END;
module.exports.listener = function(event, _callbackName, _callback) {
let callbackName = '';
let callback = null;
if (_callback != undefined) {
callbackName = _callbackName;
callback = _callback;
} else {
callback = _callbackName;
}
let listTmp = observerMask[event];
let callbackConfig = {};
callbackConfig[CALLBACK_NAME] = callbackName;
callbackConfig[CALLBACK] = callback;
if (observerMask.hasOwnProperty(event)) {
observerMask[event].push(callbackConfig);
return true;
}
observerMask[event] = [callbackConfig];
return false;
}
module.exports.emit = function(event, msg) {
if (observerMask.hasOwnProperty(event)) {
for (var i in observerMask[event]) {
let returnV = observerMask[event][i][CALLBACK](msg);
if (returnV && returnV === FUNCTION_END) {
//如果函数自己返回自己 需要删除自己,就删除
delete observerMask[event][i][CALLBACK];
delete observerMask[event][i];
}
}
return true;
}
return false;
}
module.exports.remove = function(event, callbackName) {
if (observerMask.hasOwnProperty(event)) {
for (var i in observerMask[event]) {
if (observerMask[event][i][CALLBACK_NAME] = callbackName) {
delete observerMask[event][i][CALLBACK];
delete observerMask[event][i];
return true;
}
}
}
return false;
}