Fivem-rpc:专为 FiveM 设计的类型化 RPC(远程过程调用)

**Fivem-rpc:FiveM 的类型化 RPC**

**简介:**
fivem-rpc 是一个为 FiveM 开发的类型化 RPC(Remote Procedure Call)库,它将原始的 `emitNet`/`onNet` 调用替换为基于 Promise 的、类型化的过程。这有助于提高代码的可读性和可维护性。

**安装:**
“`bash
pnpm add fivem-rpc
“`

**配置:**
你需要通过扩展 `fivem-rpc/types` 中定义的接口来声明你的过程。服务器和客户端需要导入相同的接口声明。例如:
“`javascript
import type { RpcPayload } from “fivem-rpc/types”;

declare module “fivem-rpc/types” {
// … 其他接口定义 …
}
“`

**示例:**
以下是一个简单的使用示例:

**客户端到服务器:**
在服务器端注册一个处理程序:
“`javascript
import { initializeRpc } from “fivem-rpc/server”;
const { onClientRpc } = initializeRpc();

onClientRpc(“foo:getData”, async (source, { id }) => {
return { name: “bar” };
});
“`
在客户端调用该过程:
“`javascript
import { initializeRpc } from “fivem-rpc/client”;
const { callServerRpc } = initializeRpc();

const result = await callServerRpc(“foo:getData”, { id: 1 });
if (result.success) {
console.log(result.data.name);
}
“`

**服务器到客户端:**
在客户端注册一个处理程序:
“`javascript
import { initializeRpc } from “fivem-rpc/client”;
const { onServerRpc } = initializeRpc();

onServerRpc(“bar:notify”, async ({ message }) => {
console.log(message);
return { seen: true };
});
“`
在服务器端调用该过程:
“`javascript
import { callClientRpc } from “fivem-rpc/client”;
const { callClientRpc } = initializeRpc();

const result = await callClientRpc(playerId, “bar:notify”, { message: “hello” });
if (result.success) {
console.log(result.data.seen);
}
“`

**NUI 到客户端:**
在客户端注册一个处理程序:
“`javascript
import { onNuiRpc } from “fivem-rpc/nui”;
const { onNuiRpc } = initializeRpc();

onNuiRpc(“ui:getInfo”, async () => {
return { name: GetPlayerName(“-1”) };
});
“`
在 NUI 中调用该过程:
“`javascript
import { initializeRpc } from “fivem-rpc/nui”;
const { callClientRpc } = initializeRpc();

const result = await callClientRpc(“ui:getInfo”);
if (result.success) {
document.title = result.data.name;
}
“`

**NUI 到服务器:**
在客户端注册一个处理程序:
“`javascript
import { onClientRpc } from “fivem-rpc/nui”;
const { onClientRpc } = initializeRpc();

onClientRpc(“ui:show”, async ({ text }) => {
showNotification(text);
return { ok: true };
});
“`
在 NUI 中调用该过程:
“`javascript
import { callNuiRpc } from “fivem-rpc/nui”;
const { callNuiRpc } = initializeRpc();

const result = await callNuiRpc(“ui:show”, { text: “hello” });
if (result.success) {
console.log(result.data.ok);
}
“`

**删除处理程序:**
所有以 `onXxxRpc` 开头的函数都有一个对应的 `offXxxRpc` 函数。你可以仅使用过程名称来无条件删除处理程序,或者传递原始处理程序引用以仅在它仍然是当前注册的处理程序时才删除它。

Fivem-rpc:专为 FiveM 设计的类型化 RPC(远程过程调用)Fivem-rpc:专为 FiveM 设计的类型化 RPC(远程过程调用)Fivem-rpc:专为 FiveM 设计的类型化 RPC(远程过程调用)Fivem-rpc:专为 FiveM 设计的类型化 RPC(远程过程调用)
© 版权声明
THE END
喜欢就支持一下吧
点赞198 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容