tgf v1.0.9 Help

生成协议接口

框架提供了协议结构自动生成工具,我们在日常开发中, 可以使用该工具,根据自定义的接口生成对应的.go结构文件和.cs的类文件(unity)

参考以下文档

客户端协议

服务器协议

客户端协议

客户端发送协议到服务器所需api

!!!!!注意!!!!!

对于服务器来说,我们并不一定需要定义api接口

这里的协议结构代码生成主要用于两个方面

1.结合robot包下的客户端,实现robot自动化测试.

2.生成CS文件,方便客户端使用

如果没有以上两项需求,可以不需要生成api结构化文件

但是还是建议大家定义相关的逻辑节点协议接口.

代码示例

逻辑节点协议接口

type IUserService interface { LoadUserDataInfo(ctx context.Context, args *rpc.Args[*pb.LoadUserInfoReq], reply *rpc.Reply[*pb.LoadUserDataInfo]) (err error) } type ILoginService interface { Login(ctx context.Context, args *rpc.Args[*pb.LoginReq], reply *rpc.Reply[*pb.LoginRes]) (err error) }

在kit/cmd目录下,创建我们的api协议启动类. 使用以下代码自动生成对应的api接口

生成代码

func main() { //设置导出的golang目录 util.SetAutoGenerateAPICodePath("../common/api") //设置导出的C#目录(用于Unity项目) util.SetAutoGenerateAPICSCode("E:\\unity\\project\\t2\\Assets\\HotFix\\Code", "HotFix.Code") //根据接口生成对应的api结构 util.GeneratorAPI[service.ILoginService](login.ModuleName, login.Version, "api") util.GeneratorAPI[service.IUserService](user.ModuleName, user.Version, "api", "UserLevelPush") //生成Cs代码(用于Unity) util.GenerateCSApiService() }

结果代码

生成的IUserService代码范例

//Auto generated by tgf util //created at 2023-12-05 17:19:56.1347906 +0800 CST m=+0.080327701 package api import ( "github.com/thkhxm/tgf/rpc" "github.com/thkhxm/tgf/xgame/common/pb" ) var userService = &rpc.Module{Name: "user", Version: "1.0"} var ( LoadUserDataInfo = rpc.ServiceAPI[*pb.LoadUserInfoReq, *pb.LoadUserDataInfo]{ ModuleName: userService.Name, Name: "LoadUserDataInfo", MessageType: userService.Name + "." + "LoadUserDataInfo", } ) const ( UserLevelPush = "UserLevelPush" )

代码讲解

这里主要关注这段代码util.GeneratorAPI[service.ILoginService](login.ModuleName, login.Version, "api")

[service.ILoginService] 这里指定了我们需要生成的协议接口

login.ModuleName, login.Version 这里指的是我们提供服务的节点名称,详情可以查看逻辑节点

api 生成的结构包名

在我们生成的结构中

LoadUserDataInfo 请求协议

UserLevelPush = "UserLevelPush" 主动推送协议

目录结构

generaterpcdir.png

服务器协议

服务器之间的rpc请求

代码示例

rpc协议接口

type IUserRPCService interface { GetUserData(ctx context.Context, args *usermodels.LoadLoginUserRequest, reply *usermodels.LoadLoginUserResponse) (err error) RegisterUser(ctx context.Context, args *usermodels.RegisterUserRequest, reply *rpc.EmptyReply) (err error) }

在kit/cmd目录下,创建我们的rpc协议启动类. 使用以下代码自动生成对应的rpc接口

生成代码

func main() { //设置导出的golang目录 util.SetAutoGenerateAPICodePath("../common/api") //设置生成的文件后缀 util.SetGenerateFileNameSuffix("rpc") //根据接口生成对应的rpc结构 util.GeneratorRPC[service.IUserRPCService](user.ModuleName, user.Version, "userservice", "user") }

结果代码

生成的IUserRPCService代码范例

//Auto generated by tgf util //created at 2023-12-05 18:27:36.4589565 +0800 CST m=+0.038280801 package userservice import ( "github.com/thkhxm/tgf/rpc" "github.com/thkhxm/tgf/xgame/common/rpc/model/user" ) var userService = &rpc.Module{Name: "user", Version: "1.0"} var ( GetUserData = rpc.ServiceAPI[*usermodels.LoadLoginUserRequest, *usermodels.LoadLoginUserResponse]{ ModuleName: userService.Name, Name: "GetUserData", MessageType: userService.Name + "." + "GetUserData", } RegisterUser = rpc.ServiceAPI[*usermodels.RegisterUserRequest, *rpc.EmptyReply]{ ModuleName: userService.Name, Name: "RegisterUser", MessageType: userService.Name + "." + "RegisterUser", } )

代码讲解

核心代码

util.GeneratorRPC[service.IUserRPCService](user.ModuleName, user.Version, "userservice", "user")

[service.IUserRPCService] 这里指定了我们需要生成的RPC协议接口 user.ModuleName, user.Version 这里指的是我们提供服务的节点名称,详情可以查看逻辑节点 "userservice" 生成的结构包名 "user" 代码生成的目录,最终目录为"../common/api/user" ,处理不同rpc服务使用不同的目录存放

目录结构

generaterpc.png
Last modified: 02 March 2024