Fivem-rpc:Fivem的类型化rpc

Fivem-rpc:Fivem的类型化rpc-FiveM插件网
Fivem-rpc:Fivem的类型化rpc
此内容为免费资源,请登录后查看
火种0
免费资源
图片[1]-Fivem-rpc:Fivem的类型化rpc - FiveM插件网-FiveM插件网

Fivem-rpc: typed RPC for FiveM

FiveM的RPC类型。替换原始emitNet/onNet在服务器&#1…

  • 来源:Cfx.re Forum
  • 主题 ID:5407731
  • 访问方式:请前往原帖获取资源

查看 Cfx 原帖

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

原帖链接

本站仅同步展示帖子内容,资源获取请以前往原帖为准。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容