From dc9e713e6bd1a1dc3d005ed26f386e22b4d23927 Mon Sep 17 00:00:00 2001 From: Danya H Date: Sun, 9 Jun 2024 01:06:20 +0100 Subject: [PATCH] event register types + triggerClient --- server/src/index.ts | 95 +++++++++++++++++++++++++++++++++++--------- server/tsconfig.json | 1 + 2 files changed, 77 insertions(+), 19 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 8b0293b..d2dd2d1 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,36 +1,93 @@ /// import rpc from 'rage-rpc' -type ServerEvent = K extends keyof IServerEvents ? K : never -type ServerEventCallback = K extends keyof IServerEvents - ? ThisifyServerEvents[K] +type RageFW_ServerEvent = K extends keyof RageFW_ICustomServerEvent + ? K + : K extends keyof IServerEvents + ? K + : never + +type RageFW_ServerEventCallback = K extends keyof RageFW_ICustomServerEvent + ? ( + player: PlayerMp, + ...args: Parameters + ) => ReturnType + : K extends keyof IServerEvents + ? ThisifyServerEvents[K] + : never + +type RageFW_ClientEvent = K extends keyof RageFW_ICustomClientEvent + ? K + : K extends keyof IServerEvents + ? K + : never + +type RageFW_ClientEventArguments = K extends keyof RageFW_ICustomClientEvent + ? Parameters + : (K extends keyof IServerEvents ? ThisifyServerEvents[K] : never)[] + +type RageFW_ClientEventReturn = K extends keyof RageFW_ICustomClientEvent + ? ReturnType : never -declare class Server { - public register>( - eventName: K, - callback: ServerEventCallback, +interface RageFW_ICustomServerEvent { + customEvent(arg1: number, arg2: boolean): void +} + +interface RageFW_ICustomClientEvent { + customClientEvent(arg1: number, arg2: boolean): boolean +} + +class Server { + register( + eventName: RageFW_ServerEvent, + callback: RageFW_ServerEventCallback, ): void - public registerMultiple(events: { - [name: string]: (player: PlayerMp, ...args: any[]) => any - }): void - - registerMultiple(events: { [name: string]: (...args: any[]) => any }) { - Object.entries(events).forEach(([name, callback]) => - rpc.register(name, (data: any[]) => { - return Array.isArray(data) ? callback(...data) : callback(data) - }), - ) + public register( + eventName: string, + callback: (...args: unknown[]) => unknown, + ) { + rpc.register(eventName, callback) } - register() {} + // public registerMultiple(events: { + // [name: string]: (player: PlayerMp, ...args: any[]) => any + // }): void + // + // registerMultiple(events: { [name: string]: (...args: any[]) => any }) { + // Object.entries(events).forEach(([name, callback]) => + // rpc.register(name, (data: any[]) => { + // return Array.isArray(data) ? callback(...data) : callback(data) + // }), + // ) + // } + // + // register() {} +} + +class Player { + triggerClient( + player: PlayerMp, + eventName: RageFW_ClientEvent, + ...args: RageFW_ClientEventArguments + ): RageFW_ClientEventReturn + public triggerClient( + player: PlayerMp, + eventName: string, + ...args: unknown[] + ) { + return rpc.callClient(player, eventName, ...args) + } } export const rage = { event: new Server(), + player: new Player(), } -rage.event.register('customevent', vehicle => {}) +rage.event.register('customEvent', (player, arg1, arg2) => { + rage.player.triggerClient(player, 'customClientEvent', arg1, arg2) +}) function test() {} diff --git a/server/tsconfig.json b/server/tsconfig.json index 5a57bcc..adf1a0d 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -3,6 +3,7 @@ "target": "ESNext", "lib": ["ESNext", "ES5"], "module": "ESNext", + "moduleResolution": "NodeNext", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true,