refactor: Simplify and optimize event handling and listener management

This commit is contained in:
子沐呀
2024-12-16 17:44:06 +08:00
Unverified
parent e88362e96a
commit 4494e7986c
4 changed files with 76 additions and 47 deletions
+6 -5
View File
@@ -7,7 +7,7 @@ const getPluginName = () => {
} catch (error) {
return error.stack.trim().match(/plugins\\(.*)\\.*\.js:[0-9]+\)$/i)?.[1] || "Unknown";
}
}
};
module.exports = {
Event: {
@@ -37,6 +37,7 @@ module.exports = {
*/
listen: function (eventName, callback) {
try {
if (typeof callback !== "function") return false;
const eventReflection = {
onServerStopping: "ll::ServerStoppingEvent",
onClientLogin: "gmlib::ClientLoginAfterEvent",
@@ -75,6 +76,7 @@ module.exports = {
* @returns {number}
*/
emplaceListener: function (eventName, callback, priority = this.EventPriority.Normal, pluginName = getPluginName()) {
if (typeof callback !== "function") throw new Error("callback must be a function!");
const /** @type {number} */ eventId = ll.imports("GMLIB_Event_API", "emplaceListener")(pluginName, eventName, priority);
if (eventId === -1) throw new Error(`Event ${eventName} creation failed!`);
ll.exports((...data) => {
@@ -83,7 +85,7 @@ module.exports = {
callback({
params: data,
cancel: () => result = true,
setCancelled: (/** @type {boolean} */value) => result = value,
setCancelled: (/** @type {boolean} */value) => { result = value; },
isCancelled: () => result,
getId: () => eventId,
getEventType: () => eventName
@@ -95,8 +97,7 @@ module.exports = {
}
return result;
}, pluginName, eventName + "_" + eventId);
if (this.mEventData[eventName] === undefined) this.mEventData[eventName] = [];
this.mEventData[eventName].push(eventId);
(this.mEventData[eventName] ??= []).push(eventId);
return eventId;
},
@@ -140,7 +141,7 @@ module.exports = {
* @param {string | undefined} eventName
* @returns {number[] | Object.<string, number[]>}
*/
getListener: function(eventName) {
getListener: function (eventName) {
return eventName === undefined ? this.mEventData : this.mEventData[eventName] ?? [];
},