rage-framework/client/src/core/client.ts

83 lines
2.8 KiB
TypeScript
Raw Normal View History

import { rpc } from './rpc'
import { FW_Middleware } from './middleware'
import type * as T from '../types'
2024-10-30 15:27:22 +00:00
/** Client-side interactions */
export class FW_Client {
2024-10-30 15:27:22 +00:00
/**
* Registers a client event with an associated callback
*
* @param eventName - The name of the event to register
* @param callback - The callback function to be executed when the event is triggered
* @param [options] - Optional settings for callback execution
* @param [options.middlewares] - Middleware functions to be checked before the callback executes
* @returns {FW_Client} The current client instance, enabling method chaining
2024-10-30 15:27:22 +00:00
*
* @example
* // Registering an event
* fw.event.register("playerDeath", (player, reason, killer) => {
* fw.system.log.info(player, reason, killer)
* })
*
* @example
* // Registering an event with middlewares
* fw.event.register("playerDeath", (player, reason, killer) => {
* fw.system.log.info(player, reason, killer)
* }, {
* middlewares: [ignoreSuicide] // <- your middlewares here
* })
*
* // or
*
* fw.event.register("playerDeath", (player, reason, killer) => {
* fw.system.log.info(player, reason, killer)
* }, {
* middlewares: {
* executables: [ignoreSuicide], // <- your middlewares here
* onError: (msg) => fw.system.log.info(`${player.socialClub} has commited suicide`)
* }
* })
*
* @see {@link https://git.entityseven.com/entityseven/rage-framework/wiki Wiki}
*/
public register<EventName extends T.FW_ClientEvent>(
eventName: EventName,
callback: T.FW_ClientCallback<EventName>,
2024-10-29 17:03:07 +00:00
options?: {
middlewares?: T.FW_MiddlewareOptions<EventName>
2024-10-29 17:03:07 +00:00
},
): FW_Client {
rpc.register<
Parameters<typeof callback>,
2024-10-29 17:03:07 +00:00
ReturnType<typeof callback> | Promise<unknown>,
EventName
2024-10-29 17:03:07 +00:00
>(eventName, async (...data) => {
if (!options?.middlewares) return await callback(...data)
await FW_Middleware.process(options.middlewares, callback, data)
2024-10-29 17:03:07 +00:00
})
return this
}
2024-10-30 15:27:22 +00:00
/**
* Unregisters a client event, removing the associated callback
*
* @param eventName - The name of the event to unregister
* @returns {Client} The current client instance, enabling method chaining
*
* @example
* // Unregistering an event
* fw.event.unregister("playerDeath")
*
* @see {@link https://git.entityseven.com/entityseven/rage-framework/wiki Wiki}
*/
public unregister<EventName extends T.FW_ClientEvent>(
eventName: EventName,
): FW_Client {
rpc.unregister<EventName>(eventName)
return this
}
}