Compare commits

..
Author SHA1 Message Date
rilaxik 4695f5dbd1 types 2024-06-11 02:57:19 +01:00
rilaxik fa4c218a7a Merge remote-tracking branch 'origin/master'
# Conflicts:
#	server/src/index.ts
#	server/src/types.ts
2024-06-11 02:50:29 +01:00
rilaxik 454fc12d2e types 2024-06-11 02:49:56 +01:00
Oleksandr Honcharov 2da34bd382 temp 2024-06-11 03:38:31 +03:00
3 changed files with 51 additions and 27 deletions
+38 -16
View File
@@ -9,34 +9,50 @@ import {
import { nativeEvents } from './native.events' import { nativeEvents } from './native.events'
class Server { class Server {
private isNativeEvent(eventName: string): eventName is keyof IServerEvents {
return nativeEvents.includes(eventName)
}
public testRegister(
event: string,
callback: (player: PlayerMp, ...args: unknown[]) => void,
) {
rpc.register(event, async (data, info) => {
callback(info.player as PlayerMp, ...data)
})
}
public register<EventName extends RageFW_ServerEvent>( public register<EventName extends RageFW_ServerEvent>(
eventName: EventName, eventName: EventName,
callback: RageFW_ServerEventCallback<EventName>, callback: RageFW_ServerEventCallback<EventName>,
): void { ): void {
if (nativeEvents.includes(eventName)) { if (this.isNativeEvent(eventName)) {
mp.events.add(eventName, callback) mp.events.add(eventName, callback)
} else { } else {
rpc.register(eventName, callback as rpc.ProcedureListener) rpc.register(eventName, async (data: any[], info) => {
return callback(info.player as PlayerMp, data)
})
} }
} }
public registerMany<EventName extends RageFW_ServerEvent>(events: { public registerMany<EventName extends RageFW_ServerEvent>(events: {
[event in EventName]: RageFW_ServerEventCallback<event> [event in EventName]: RageFW_ServerEventCallback<event>
}): void { }): void {
Object.entries(events).map(([eventName, callback]) => { Object.entries<RageFW_ServerEventCallback<EventName>>(events).map(
if (nativeEvents.includes(eventName)) { ([eventName, callback]) => {
mp.events.add( if (this.isNativeEvent(eventName)) {
eventName as keyof IServerEvents, mp.events.add(eventName, callback)
callback as (...arg: unknown[]) => void, } else {
) rpc.register(eventName, (args: unknown[]) => {
} else { return Array.isArray(args)
rpc.register(eventName, (args: unknown[]) => { ? (callback as (...arg: typeof args) => void)(
return Array.isArray(args) ...args,
? (callback as (...arg: typeof args) => void)(...args) )
: (callback as (arg: typeof args) => void)(args) : (callback as (arg: typeof args) => void)(args)
}) })
} }
}) },
)
} }
} }
@@ -54,3 +70,9 @@ export const fw = {
event: new Server(), event: new Server(),
player: new Player(), player: new Player(),
} }
fw.event.register('ggfdgfd', player => {})
fw.event.registerMany({
trailerAttached: player => {},
})
+9 -10
View File
@@ -9,16 +9,15 @@ export type RageFW_ServerEvent =
| keyof RageFW_ICustomServerEvent | keyof RageFW_ICustomServerEvent
| keyof IServerEvents | keyof IServerEvents
export type RageFW_ServerEventCallback< export type RageFW_ServerEventCallback<K extends RageFW_ServerEvent> =
K extends keyof RageFW_ICustomServerEvent | keyof IServerEvents, K extends keyof RageFW_ICustomServerEvent
> = K extends keyof RageFW_ICustomServerEvent ? (
? ( player: PlayerMp,
player: PlayerMp, ...args: Parameters<RageFW_ICustomServerEvent[K]>
...args: Parameters<RageFW_ICustomServerEvent[K]> ) => ReturnType<RageFW_ICustomServerEvent[K]>
) => ReturnType<RageFW_ICustomServerEvent[K]> : K extends keyof IServerEvents
: K extends keyof IServerEvents ? IServerEvents[K]
? ThisifyServerEvents[K] : never
: never
export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent
+4 -1
View File
@@ -1,5 +1,8 @@
declare module 'rage-fw-shared-types' { declare module 'rage-fw-shared-types' {
export interface RageFW_ICustomServerEvent {} export interface RageFW_ICustomServerEvent {
customServerEvent(customArgs: string[]): boolean
customServerEvent2(customArgs2: number[]): void
}
export interface RageFW_ICustomClientEvent {} export interface RageFW_ICustomClientEvent {}
} }