diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ddac79c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "rage-eventbus", + "version": "0.0.1", + "lockfileVersion": 1 +} diff --git a/package.json b/package.json index 394207c..4210c69 100644 --- a/package.json +++ b/package.json @@ -15,5 +15,6 @@ "bugs": { "url": "https://github.com/micaww/rage-eventbus/issues" }, - "homepage": "https://github.com/micaww/rage-eventbus#readme" + "homepage": "https://github.com/micaww/rage-eventbus#readme", + "dependencies": {} } diff --git a/src/index.js b/src/index.js index e69de29..1e8cca4 100644 --- a/src/index.js +++ b/src/index.js @@ -0,0 +1,63 @@ +const util = require('./util.js'); + +//const isClient = !!mp.game.joaat; +//const isCEF = !!mp.trigger; + +const listeners = {}; + +/*mp.events.add('rbus:process', (data) => { + +});*/ + +const rbus = {}; + +/** + * Register an event listener. + * @param {string} eventName - The name of the event. + * @param {function} cb - The event's callback. The return value will be sent back to the caller. + */ +rbus.on = (eventName, cb) => { + if(!listeners[eventName]) listeners[eventName] = []; + listeners[eventName].push(cb); +}; + +/** + * Unregister an event listener. + * @param {string} eventName - The name of the event. + * @param {function} cb - The callback that was registered with `on`. + */ +rbus.off = (eventName, cb) => { + if(!listeners[eventName]) return; + listeners[eventName] = listeners[eventName].filter(listener => listener !== cb); +}; + +/** + * Calls a local event listener. + * @param {string} eventName - The name of the event. + * @returns {Promise} - The result from the local event listener. + */ +rbus.send = (eventName) => { + if(!listeners[eventName] || !listeners[eventName].length) return Promise.reject('NO_LISTENERS'); + return Promise.resolve(listeners[eventName][0]()); +}; + +/** + * Calls a remote event listener residing on the server. + * @param {string} eventName - The name of the event. + * @returns {Promise} - The result from the remote event listener. + */ +rbus.sendServer = (eventName) => { + +}; + +/** + * Calls a remote event listener residing on the client. + * @param player - The player to send to + * @param {string} eventName - The name of the event + * @returns {Promise} - The result from the remote event listener + */ +rbus.sendClient = (player, eventName) => { + +}; + +module.exports = rbus; \ No newline at end of file diff --git a/src/util.js b/src/util.js new file mode 100644 index 0000000..9504be4 --- /dev/null +++ b/src/util.js @@ -0,0 +1,11 @@ +const util = {}; + +util.uid = () => { + let firstPart = (Math.random() * 46656) | 0; + let secondPart = (Math.random() * 46656) | 0; + firstPart = ("000" + firstPart.toString(36)).slice(-3); + secondPart = ("000" + secondPart.toString(36)).slice(-3); + return firstPart + secondPart; +}; + +module.exports = util; \ No newline at end of file