rage-framework/server/src/index.ts

78 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-06-08 22:35:14 +00:00
import rpc from 'rage-rpc'
2024-06-10 03:15:09 +00:00
import {
RageFW_ClientEvent,
RageFW_ClientEventArguments,
RageFW_ClientEventReturn,
RageFW_ServerEvent,
RageFW_ServerEventCallback,
} from './types.js'
import { nativeEvents } from './native.events'
2024-06-08 22:35:14 +00:00
2024-06-10 00:53:42 +00:00
class Server {
2024-06-11 00:38:31 +00:00
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>(
eventName: EventName,
2024-06-09 00:06:20 +00:00
callback: RageFW_ServerEventCallback<EventName>,
): void {
2024-06-11 00:38:31 +00:00
if (this.isNativeEvent(eventName)) {
2024-06-10 03:15:09 +00:00
mp.events.add(eventName, callback)
} else {
2024-06-11 00:38:31 +00:00
rpc.register(eventName, async (data: any[], info) => {
return callback(info.player as PlayerMp, data)
})
2024-06-10 03:15:09 +00:00
}
2024-06-09 00:06:20 +00:00
}
2024-06-09 16:19:06 +00:00
public registerMany<EventName extends RageFW_ServerEvent>(events: {
2024-06-09 21:53:59 +00:00
[event in EventName]: RageFW_ServerEventCallback<event>
2024-06-09 16:19:06 +00:00
}): void {
2024-06-10 03:15:09 +00:00
Object.entries(events).map(([eventName, callback]) => {
if (nativeEvents.includes(eventName)) {
mp.events.add(
eventName as keyof IServerEvents,
callback as (...arg: unknown[]) => void,
)
} else {
rpc.register(eventName, (args: unknown[]) => {
return Array.isArray(args)
? (callback as (...arg: typeof args) => void)(...args)
: (callback as (arg: typeof args) => void)(args)
})
}
})
2024-06-09 16:19:06 +00:00
}
2024-06-08 22:35:14 +00:00
}
2024-06-10 03:15:09 +00:00
class Player {
public triggerClient<EventName extends RageFW_ClientEvent>(
player: PlayerMp,
eventName: EventName,
...args: RageFW_ClientEventArguments<EventName>
): Promise<RageFW_ClientEventReturn<EventName>> {
return rpc.callClient(player, eventName, args)
}
}
export const fw = {
2024-06-08 22:35:14 +00:00
event: new Server(),
2024-06-10 03:15:09 +00:00
player: new Player(),
2024-06-08 22:35:14 +00:00
}
2024-06-11 00:38:31 +00:00
fw.event.register('ggfdgfd', player => {})
fw.event.registerMany({
trailerAttached: player => {},
})