Files
2026-05-23 22:10:14 +08:00

139 lines
2.5 KiB
JavaScript

/*******************************************************************************
*
* Nx事件服务
*
*
*
* 2021.12.10
******************************************************************************/
const NxObject = require( "nx.object" );
var nxEventor = cc.Class( {
extends: NxObject,
name: "nxEventor",
// 初始化
initialize: function( _args ) {
// USPER
if( !this._super( _args ) ) {
return false;
}
this.binders = {};
// 全局服务开启
nx.event = this;
return true;
},
// 销毁
uninitialize: function() {
this.clear();
// 全局服务关闭
nx.event = null;
// USPER
return this._super();
},
// 是否存在监听
isbinded: function( _binder ) {
return this.binders[ _binder ] ? true : false;
},
// 监听
bind: function( _binder, _lst ) {
var key = nx.factory.getUUID( _binder, true );
if( nx.dt.strEmpty( key ) ) {
nx.logger.error( "[事件]监听事件失败,无效的监听对象!" + key );
return false;
}
if( this.binders[ key ] ) {
nx.logger.error( "[事件]监听关键字重复!" + key );
return false;
}
if( !nx.dt.arrGood( _lst ) ) {
nx.logger.error( "[事件]监听事件失败,序列无效!" + key );
return false;
}
var bds = {};
for( let i in _lst ) {
let bd = _lst[ i ];
let id = "" + bd[0];
if( nx.dt.strEmpty( id ) ||
!nx.dt.fnGood( bd[ 1 ] ) ) {
nx.logger.error( "[事件]监听事件失败,无效的监听项!" + key );
return false;
}
bds[id] = bd[1];
}
this.binders[ key ] = bds;
nx.logger.debug( "[事件]增加监听:", key );
return true;
},
// 解除
unbind: function( _binder ) {
var key = nx.factory.getUUID( _binder, false );
if( nx.dt.strEmpty( key ) ) {
nx.logger.error( "[事件]解除监听事件失败,无效的监听对象!" + key );
return false;
}
if( this.binders[ key ] ) {
nx.logger.debug( "[事件]解除监听:", key );
delete this.binders[ key ];
}
return true;
},
// 发送
send: function( id, args, log = true ) {
id = id + '';
if( nx.dt.strEmpty( id ) ) {
nx.logger.error( "[事件]消息发送失败,参数非法!" );
return false;
}
if( log ) {
nx.logger.debug( "[事件]发布:%s 参数:%s", id, args ? nx.dt.enjson( args ) : "" );
}
nx.dt.trycatch( () => {
for( var k in this.binders ) {
var bs = this.binders[ k ];
if( typeof ( bs[ id ] ) == "function" ) {
bs[ id ]( args );
}
}
} );
return true;
},
// 清理
clear: function() {
this.binders = {};
}
} );
module.exports = nxEventor;