GeekServer代码生成工具使用教程:自动生成协议与配置,告别重复劳动

GeekServer代码生成工具使用教程:自动生成协议与配置,告别重复劳动

【免费下载链接】GeekServer基于.Netcore的开发效率高,性能强,跨平台,持久化层透明,支持不停服热更新的游戏服务器。Best for your unity game server!项目地址: https://gitcode.com/gh_mirrors/ge/GeekServer

GeekServer代码生成工具是游戏服务器开发中的终极神器,它能自动生成协议类和配置表代码,让开发者告别重复劳动!🚀 如果你正在使用GeekServer框架开发游戏服务器,那么这篇文章将为你揭秘如何高效利用代码生成工具,提升开发效率,减少人为错误。

为什么需要代码生成工具?

在游戏服务器开发中,协议定义和配置表处理是两个最繁琐的工作。手动编写这些代码不仅耗时耗力,还容易出错。GeekServer的代码生成工具通过自动化这些过程,让你可以专注于核心业务逻辑的开发。

🔑 核心优势

  • 一键生成:从Excel配置表到C#代码,一键完成
  • 协议自动生成:基于MessagePack的高效序列化协议
  • 多态支持:自动处理复杂的继承关系
  • 热更新友好:生成的代码支持不停服更新
  • 线程安全:自动处理Actor模型的线程安全问题

GeekServer代码生成工具架构

GeekServer的代码生成系统主要由两个核心组件构成:

1. 协议生成工具 (Geek.MessagePackTool)

这个工具负责将协议定义文件转换为C#代码,并自动生成多态注册信息。它基于MessagePack序列化库,提供了极高的序列化效率和极小的数据体积。

2. 配置表生成工具 (GeekConfig)

配置表生成工具从Excel表格读取数据,生成对应的C# Bean类和Container类,并转换为二进制格式供游戏运行时使用。

📋 快速开始:配置表生成实战

第一步:准备Excel配置表

首先,你需要准备Excel格式的配置表。GeekServer支持标准的Excel格式,每个Sheet对应一个配置表。

第二步:运行生成工具

打开Tools/ExcelGen/ExcelToCode.exe,选择你的Excel文件,点击【服务器-ALL】按钮,工具会自动:

  1. 解析Excel文件结构
  2. 生成C# Bean类文件
  3. 生成Container类文件
  4. 生成GameDataManager管理类
  5. 将数据转换为二进制格式

第三步:查看生成结果

生成的文件位于Geek.Server.Generate/Configs/Data/目录:

  • Beans目录:包含每个配置表对应的数据类
  • Containers目录:包含数据容器类
  • Define目录:包含基础数据定义

例如,一个道具表的Bean类会自动生成如下代码:

public class t_itemBean : BaseBin { public int t_id; // 道具ID public string t_name; // 道具名称 public int t_can_sell; // 是否可以出售 // ... 其他字段 }

🚀 协议代码生成指南

协议定义规范

在GeekServer中,协议类需要遵循特定的规范:

  1. 使用MessagePackObject注解:所有需要序列化的类都要标记
  2. 继承Message基类:仅作为消息头的类需要继承自Message
  3. 自动分配ID:工具会为每个可序列化类自动分配唯一ID

示例协议定义

[MessagePackObject(true)] public class ReqLogin : Message { public string UserName { get; set; } public string Platform { get; set; } public int SdkType { get; set; } public string SdkToken { get; set; } public string Device { get; set; } }

生成多态注册信息

MessagePack对多态支持不够友好,但GeekServer的代码生成工具会为你解决这个问题!工具会自动生成多态绑定关系:

public partial class PolymorphicRegister { public static void Register() { settings.RegisterType<Geek.Server.Message, Geek.Server.Proto.ReqBagInfo>(112001); settings.RegisterType<Geek.Server.Message, Geek.Server.Proto.ResBagInfo>(112002); // ... 其他类型注册 } }

🔧 高级功能:Source Generator

GeekServer还内置了基于Roslyn的Source Generator,在编译期间自动生成代码:

Agent代码自动生成

当你在Agent类中添加特定的注解时,Source Generator会自动生成对应的Wrapper类,处理Actor模型的线程安全和入队逻辑。

支持的注解包括:

  • [Service]:标记为服务接口
  • [Discard]:标记为可丢弃的任务
  • [ThreadSafe]:标记为线程安全的方法
  • [TimeOut]:设置超时时间

自动入队处理

Source Generator会自动为标记了注解的方法生成入队代码,开发者无需关心多线程同步问题:

// 你只需要这样写 [Service] public virtual async Task<int> GetPlayerLevel(long playerId) { // 业务逻辑 } // 工具会自动生成线程安全的调用包装

📊 配置表使用最佳实践

数据访问API

生成的配置表提供了简洁的API:

// 根据ID获取单个配置项 var item = ConfigBean.GetBean<t_itemBean, int>(1001); // 获取所有配置列表 var allItems = ConfigBean.GetBeanList<t_itemBean>(); // 获取配置映射表 var itemMap = ConfigBean.GetBeanMap<t_itemBean, int>();

热重载支持

配置表支持运行时热重载,无需重启服务器:

var (success, error) = GameDataManager.ReloadAll(); if (success) { Console.WriteLine("配置表重载成功!"); }

🛠️ 集成到开发流程

Visual Studio外部工具集成

你可以将Geek.MessagePackTool.exe添加到Visual Studio的外部工具中,实现一键生成:

  1. 打开Visual Studio
  2. 进入"工具" → "外部工具"
  3. 添加新工具,指向Geek.MessagePackTool.exe
  4. 设置快捷键,方便快速调用

CI/CD流水线集成

在持续集成环境中,你可以将代码生成作为构建过程的一部分:

# 生成协议代码 dotnet run --project Geek.MessagePackTool # 生成配置表代码 ExcelToCode.exe /path/to/config.xlsx

🚨 注意事项与限制

协议兼容性

  • 字段类型不可修改:不能将bool改为long等类型变更
  • 字段顺序保持稳定:避免影响已有数据的反序列化
  • 新增字段需谨慎:考虑向前兼容性

配置表规范

  • Excel格式统一:保持表头格式一致
  • 数据类型明确:避免类型混淆
  • ID字段必需:每个配置表必须有唯一ID字段

💡 性能优化技巧

1. 批量数据加载

使用GetBeanMap一次性加载所有数据到内存,减少频繁的IO操作。

2. 缓存策略

对于频繁访问的配置数据,可以在内存中建立缓存。

3. 懒加载机制

GameDataManager支持懒加载,只有在需要时才加载对应的配置表。

🔍 调试与故障排除

常见问题解决

  1. 生成失败:检查Excel文件格式是否正确
  2. 协议冲突:检查类名是否重复导致Hash冲突
  3. 类型不匹配:确保Excel中的数据类型与C#类型对应

日志查看

代码生成工具会输出详细的日志信息,帮助定位问题:

[INFO] 开始生成协议代码... [INFO] 发现10个协议类 [INFO] 生成多态注册信息... [SUCCESS] 生成完成!

🎯 总结

GeekServer的代码生成工具是游戏服务器开发的得力助手,它通过自动化协议和配置表的代码生成,大大提升了开发效率,减少了人为错误。无论是协议定义、配置表处理,还是线程安全的Agent代码生成,GeekServer都为你提供了完整的解决方案。

记住这些关键点:

  • 协议生成:基于MessagePack,高效且小巧
  • 配置表生成:从Excel到二进制,一键完成
  • Source Generator:编译期代码生成,零运行时开销
  • 热更新支持:支持不停服更新配置和协议

现在,你已经掌握了GeekServer代码生成工具的核心用法,可以告别重复劳动,专注于更有价值的游戏逻辑开发了!🎉

GeekServer使用Kestrel作为网络服务器,性能优异,支持多种协议

如果你在使用的过程中遇到任何问题,可以参考项目文档或在社区中寻求帮助。Happy coding!👨‍💻👩‍💻

【免费下载链接】GeekServer基于.Netcore的开发效率高,性能强,跨平台,持久化层透明,支持不停服热更新的游戏服务器。Best for your unity game server!项目地址: https://gitcode.com/gh_mirrors/ge/GeekServer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考