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】按钮,工具会自动:
- 解析Excel文件结构
- 生成C# Bean类文件
- 生成Container类文件
- 生成GameDataManager管理类
- 将数据转换为二进制格式
第三步:查看生成结果
生成的文件位于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中,协议类需要遵循特定的规范:
- 使用MessagePackObject注解:所有需要序列化的类都要标记
- 继承Message基类:仅作为消息头的类需要继承自Message
- 自动分配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的外部工具中,实现一键生成:
- 打开Visual Studio
- 进入"工具" → "外部工具"
- 添加新工具,指向Geek.MessagePackTool.exe
- 设置快捷键,方便快速调用
CI/CD流水线集成
在持续集成环境中,你可以将代码生成作为构建过程的一部分:
# 生成协议代码 dotnet run --project Geek.MessagePackTool # 生成配置表代码 ExcelToCode.exe /path/to/config.xlsx🚨 注意事项与限制
协议兼容性
- 字段类型不可修改:不能将bool改为long等类型变更
- 字段顺序保持稳定:避免影响已有数据的反序列化
- 新增字段需谨慎:考虑向前兼容性
配置表规范
- Excel格式统一:保持表头格式一致
- 数据类型明确:避免类型混淆
- ID字段必需:每个配置表必须有唯一ID字段
💡 性能优化技巧
1. 批量数据加载
使用GetBeanMap一次性加载所有数据到内存,减少频繁的IO操作。
2. 缓存策略
对于频繁访问的配置数据,可以在内存中建立缓存。
3. 懒加载机制
GameDataManager支持懒加载,只有在需要时才加载对应的配置表。
🔍 调试与故障排除
常见问题解决
- 生成失败:检查Excel文件格式是否正确
- 协议冲突:检查类名是否重复导致Hash冲突
- 类型不匹配:确保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),仅供参考