rage-framework-example/apps/rpc/src/utils.ts
2024-10-03 12:56:21 +01:00

74 lines
1.8 KiB
TypeScript

export enum Environment {
BROWSER = 'BROWSER',
CLIENT = 'CLIENT',
SERVER = 'SERVER',
UNKNOWN = 'UNKNOWN',
}
export enum Events {
EVENT_LISTENER = '__rpc:listener',
EVENT_RESPONSE = '__rpc:response',
}
export enum Errors {
EVENT_NOT_REGISTERED = 'Event not registered',
UNKNOWN_ENVIRONMENT = 'Unknown environment',
NO_DATA = 'No data',
NO_BROWSER = 'You need to initialize browser first',
}
export type RPCState = {
eventName: string
uuid: string
knownError?: string
data?: any
calledFrom: Environment
calledTo: Environment
}
export class Utils {
public static getEnvironment(): Environment {
if ('joaat' in mp) return Environment.SERVER
if ('game' in mp && 'joaat' in (mp.game as { joaat?: unknown }))
return Environment.CLIENT
if ('mp' in window) return Environment.BROWSER
return Environment.UNKNOWN
}
public static prepareExecution(data: string): RPCState {
return JSON.parse(data)
}
public static prepareTransfer(data: RPCState): string {
return JSON.stringify(data)
}
public static generateUUID(): string {
let uuid = '',
random
for (let i = 0; i < 32; i++) {
random = (Math.random() * 16) | 0
if (i === 8 || i === 12 || i === 16 || i === 20) {
uuid += '-'
}
uuid += (
i === 12 ? 4 : i === 16 ? (random & 3) | 8 : random
).toString(16)
}
return uuid
}
public static generateResponseEventName(uuid: string): string {
return `${Events.EVENT_RESPONSE}_${uuid}`
}
public static errorUnknownEnvironment(environment: Environment) {
if (environment === Environment.UNKNOWN)
throw new Error(Errors.UNKNOWN_ENVIRONMENT)
}
}