![图片[1]-Fivem-rpc:Fivem的类型化rpc - FiveM插件网-FiveM插件网](https://forum-cfx-re.akamaized.net/original/5X/a/4/3/4/a4342959dcc9fe935e4ea3d7d6a350716ff57a18.png)
FiveM的RPC类型。替换原始emitNet/onNet在服务器、客户端和NUI之间使用基于Promise的类型化过程进行调用。
安装
pnpm添加fivem-rpc
设置
通过增强注册表接口来声明一次过程五种rpc/类型双方进口相同的报关单。
从“five m rpc/types”导入类型{RpcPayload};声明模块“five m rpc/types”{接口ClientToServerRpc{“foo:getData”:RpcPayload<{id:number},{name:string}>;“foo:ping”:RpcPayload<未定义,未定义>;}接口ServerToClientRpc{“bar:notify”:RpcPayload<{message:string},{seed:boolean}>;}接口NuiToClientRpc{“ui:getInfo”:RpcPayload<未定义,{名称:字符串}>;}接口ClientToNuiRpc{“ui:show”:RpcPayload<{文本:字符串},{确定:布尔值}>; }
}
RpcPayload<请求,响应>描述过程的参数和返回值。使用未定义无参数或无返回值。
客户端到服务器
在服务器上注册一个处理程序:
从“fivem-rpc/server”导入{initializeRpc};const{onClientRpc}=初始化Rpc();onClientRpc(“foo:getData”,异步(源代码,{id})=>{return{name:“bar”};
});
在客户端,调用该过程:
从“fivem-rpc/client”导入{initializeRpc};const{callServerRpc}=初始化Rpc();const result=await callServerRpc(“foo:getData”,{id:1});
if(result.success){console.log(result.data.name);
}
服务器到客户端
在客户端上注册一个处理程序:
const{onServerRpc}=初始化Rpc();onServerRpc(“bar:notify”,异步({message})=>{console.log(message);返回{seed:true};
});
在服务器上,调用以下过程:
const{callClientRpc}=初始化Rpc();const result=await callClientRpc(playerId,“bar:notify”,{消息:“hello”});
if(result.success){console.log(result.data.sen);
}
自然用户界面↔ 客户
NUI致客户
在客户端上注册一个处理程序:
//客户端脚本
const{onNuiRpc}=初始化Rpc();onNuiRpc(“ui:getInfo”,async()=>{返回{名称:GetPlayerName(“-1”)};
});
在NUI中,调用该过程:
//浏览器(5m-rpc/nui)
从“fivem-rpc/nui”导入{initializeRpc};const{callClientRpc}=初始化Rpc();const结果=等待callClientRpc(“ui:getInfo”);
if(result.ssuccess){document.title=result.data.name;
}
NUI客户
在NUI中,注册一个处理程序:
//浏览器(5m-rpc/nui)
const{onClientRpc}=初始化Rpc();onClientRpc(“ui:show”,异步({text})=>{showNotification(text);返回{ok:true};
});
在客户端,调用该过程:
//客户端脚本
const{callNuiRpc}=初始化Rpc();const结果=等待callNuiRpc(“ui:show”,{文本:“hello”});
if(result.ssuccess){console.log(result.data.ok);
}
删除处理程序
全部onXxxRpc函数具有相应的offXxxRpc。仅使用过程名称调用它以无条件删除处理程序,或者传递原始处理程序引用以仅在它仍然是当前注册的处理程序时将其删除。
const处理程序=async()=>({名称:“bar”});onClientRpc(“foo:getData”,处理程序);//无条件删除:
offClientRpc(“foo:getData”);//仅当这仍然是注册的处理程序时才删除:
offClientRpc(“foo:getData”,处理程序);
| 入口点 | 注册 | 注销 |
|---|---|---|
5m-rpc/服务器 |
onClientRpc |
offClientRpc |
5m-rpc/客户端 |
onServerRpc,onNuiRpc |
offServerRpc,offNuiRpc |
5米rpc/nui |
onClientRpc |
offClientRpc |
错误处理
所有呼叫功能始终会解析。检查结果访问访问之前结果数据.
在失败时,结果错误是一个受歧视的工会:
const result=await callServerRpc(“foo:getData”,{id:1});if(!result.search){switch(result.error.code){case“ERR_NO_HANDLER”:console.error(“没有处理程序”,result.eerror.procedure);break;case“ERR_TIMEOUT”:console.error
}
| 代码 | 原因 |
|---|---|
ERR_NO_HANDLER |
没有为该过程注册处理程序 |
ERR_TIMEOUT |
超时内未收到响应 |
ERR_HANDLER |
处理程序在运行时抛出 |
频道
初始化Rpc接受可选频道名称(默认为“默认”).通道作用于所有内部事件名称,以便同一资源中的两个独立系统不会相互干扰。
当您想在同一资源中多次初始化RPC时,请使用多个通道,例如隔离不相关的功能集:
const core=初始化Rpc({通道:“core”});
const播放器=初始化Rpc({频道:“播放器”});
服务器端和客户端的通道名称必须匹配。如果你只打电话初始化Rpc对于每个资源,您可以完全省略它并依赖默认值。
选项
| 选项 | 默认 | 描述 |
|---|---|---|
频道 |
“默认” |
将所有事件名称限定到此通道 |
超时 |
10000 |
在解决之前等待响应的毫秒数ERR_TIMEOUT |
图片922×275
原帖链接
本站仅同步展示帖子内容,资源获取请以前往原帖为准。
© 版权声明
THE END








![[免费]Kubik多岗位|多岗位制|值班制-FiveM插件网](https://forum-cfx-re.akamaized.net/original/5X/b/d/1/7/bd17dd3b0677e6df8a8b80e2556489c005e082fe.webp)
![高级洗钱|[ESX][QBCore]-FiveM插件网](https://forum-cfx-re.akamaized.net/optimized/5X/b/e/c/6/bec6b5b093f4bc0b8fbf3e266b21557f94cec83b_2_1024x576.jpeg)
![[免费][ESX/QBCORE]帝国排气盗窃-FiveM插件网](https://forum-cfx-re.akamaized.net/original/5X/c/0/5/7/c0571356ebb470dcd4a7f3fa747fbde32e5c3763.jpeg)
![🔥 [免费]现代清洁HUD(优化| ESX就绪| 0.01毫秒)-FiveM插件网](https://forum-cfx-re.akamaized.net/optimized/5X/c/a/e/8/cae8fc0736640cd0b9b7e9726a4acea51a12a140_2_1023x575.jpeg)











暂无评论内容