38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
|
|
// 事件总线(群聊频道)
|
||
|
|
window.EventBus = {
|
||
|
|
listeners: {},
|
||
|
|
|
||
|
|
// 订阅(加入群聊)
|
||
|
|
on: function(event, callback) {
|
||
|
|
if (!this.listeners[event]) {
|
||
|
|
this.listeners[event] = [];
|
||
|
|
}
|
||
|
|
this.listeners[event].push(callback);
|
||
|
|
console.log(`[事件总线] 订阅事件: ${event}`);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 取消订阅(退群)
|
||
|
|
off: function(event, callback) {
|
||
|
|
if (!this.listeners[event]) return;
|
||
|
|
if (!callback) {
|
||
|
|
delete this.listeners[event];
|
||
|
|
} else {
|
||
|
|
this.listeners[event] = this.listeners[event].filter(cb => cb !== callback);
|
||
|
|
}
|
||
|
|
console.log(`[事件总线] 取消订阅: ${event}`);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 发送消息(@所有人)
|
||
|
|
emit: function(event, data) {
|
||
|
|
console.log(`[事件总线] 发送事件: ${event}`, data);
|
||
|
|
if (!this.listeners[event]) return;
|
||
|
|
this.listeners[event].forEach(callback => {
|
||
|
|
try {
|
||
|
|
callback(data);
|
||
|
|
} catch (e) {
|
||
|
|
console.error(`[事件总线] 执行回调出错: ${e}`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|