upd | callServer
This commit is contained in:
parent
ce5824db81
commit
faf4ca3c47
@ -13,7 +13,9 @@ export class Client {
|
|||||||
case utils.environment.CLIENT:
|
case utils.environment.CLIENT:
|
||||||
return this.executeLocal(data)
|
return this.executeLocal(data)
|
||||||
case utils.environment.CEF:
|
case utils.environment.CEF:
|
||||||
// transfer to cef
|
// todo transfer to cef
|
||||||
|
case utils.environment.SERVER:
|
||||||
|
// todo transfer to server
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
46
src/index.ts
46
src/index.ts
@ -2,6 +2,7 @@ import { RPC_LISTENER } from './events.ts'
|
|||||||
import { utils } from './utils.ts'
|
import { utils } from './utils.ts'
|
||||||
|
|
||||||
import { client } from './client.ts'
|
import { client } from './client.ts'
|
||||||
|
import { server } from './server.ts'
|
||||||
import type { RPCData } from './types.ts'
|
import type { RPCData } from './types.ts'
|
||||||
|
|
||||||
const environment = utils.getEnvironment()
|
const environment = utils.getEnvironment()
|
||||||
@ -9,7 +10,7 @@ const environment = utils.getEnvironment()
|
|||||||
export const state =
|
export const state =
|
||||||
environment === utils.environment.CEF ? window.rpcEvents : global.rpcEvents
|
environment === utils.environment.CEF ? window.rpcEvents : global.rpcEvents
|
||||||
|
|
||||||
class frameworkRpc {
|
class FrameworkRpc {
|
||||||
constructor() {
|
constructor() {
|
||||||
mp.events.add(RPC_LISTENER, async (player: any, data: string) => {
|
mp.events.add(RPC_LISTENER, async (player: any, data: string) => {
|
||||||
switch (environment) {
|
switch (environment) {
|
||||||
@ -21,6 +22,8 @@ class frameworkRpc {
|
|||||||
return client.listen(player)
|
return client.listen(player)
|
||||||
|
|
||||||
case utils.environment.SERVER:
|
case utils.environment.SERVER:
|
||||||
|
return server.listen(player, data)
|
||||||
|
|
||||||
case utils.environment.CEF:
|
case utils.environment.CEF:
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -39,7 +42,7 @@ class frameworkRpc {
|
|||||||
eventName: string,
|
eventName: string,
|
||||||
...args: Args
|
...args: Args
|
||||||
): Promise<Return | unknown> {
|
): Promise<Return | unknown> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, _reject) => {
|
||||||
const uuid = utils.generateUUID()
|
const uuid = utils.generateUUID()
|
||||||
|
|
||||||
const data: RPCData = {
|
const data: RPCData = {
|
||||||
@ -51,8 +54,45 @@ class frameworkRpc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
player.call(RPC_LISTENER, [utils.stringifyData(data)])
|
player.call(RPC_LISTENER, [utils.stringifyData(data)])
|
||||||
|
|
||||||
|
const responseEventName = utils.generateResponseEventName(uuid)
|
||||||
|
|
||||||
|
const handler = (_player: any, data: string) => {
|
||||||
|
resolve(utils.parseData(data).data)
|
||||||
|
mp.events.remove(responseEventName)
|
||||||
|
}
|
||||||
|
|
||||||
|
mp.events.add(responseEventName, handler)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public callServer<Args extends any[] = unknown[], Return = unknown>(
|
||||||
|
eventName: string,
|
||||||
|
...args: Args
|
||||||
|
): Promise<Return | unknown> {
|
||||||
|
return new Promise((resolve, _reject) => {
|
||||||
|
const uuid = utils.generateUUID()
|
||||||
|
|
||||||
|
const data: RPCData = {
|
||||||
|
uuid,
|
||||||
|
eventName,
|
||||||
|
from: environment,
|
||||||
|
to: utils.environment.CLIENT,
|
||||||
|
data: args,
|
||||||
|
}
|
||||||
|
|
||||||
|
mp.events.callRemote(RPC_LISTENER, utils.stringifyData(data))
|
||||||
|
|
||||||
|
const responseEventName = utils.generateResponseEventName(uuid)
|
||||||
|
|
||||||
|
const handler = (_player: any, data: string) => {
|
||||||
|
resolve(utils.parseData(data).data)
|
||||||
|
mp.events.remove(responseEventName)
|
||||||
|
}
|
||||||
|
|
||||||
|
mp.events.add(responseEventName, handler)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const test = new frameworkRpc()
|
const test = new FrameworkRpc()
|
||||||
|
30
src/server.ts
Normal file
30
src/server.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { utils } from './utils.ts'
|
||||||
|
import { state } from './index.ts'
|
||||||
|
import type { RPCData } from './types.ts'
|
||||||
|
|
||||||
|
export class Server {
|
||||||
|
public async listen(player: any, data: string) {
|
||||||
|
const parsedData = utils.parseData(data)
|
||||||
|
await this.executeLocal(player, parsedData)
|
||||||
|
}
|
||||||
|
|
||||||
|
private async executeLocal(player: any, data: RPCData) {
|
||||||
|
const fnResponse = await state[data.eventName](...data.data)
|
||||||
|
|
||||||
|
const response = {
|
||||||
|
data: fnResponse,
|
||||||
|
...data,
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sendResponseToClient(player, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
private sendResponseToClient(player: any, data: RPCData) {
|
||||||
|
const eventName = utils.generateResponseEventName(data.uuid)
|
||||||
|
const prepareForTransfer = utils.stringifyData(data)
|
||||||
|
|
||||||
|
player.call(eventName, prepareForTransfer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const server = new Server()
|
Reference in New Issue
Block a user