package config import ( "fmt" "git.noahlan.cn/northlan/ntools-go/logger" "github.com/knadh/koanf" "github.com/knadh/koanf/parsers/yaml" "github.com/knadh/koanf/providers/file" "github.com/zeromicro/go-zero/zrpc" ) var Config config type ( Kafka struct { Addr []string Topic string ConsumerGroup string } config struct { // Log 日志配置 Log struct { File logger.FileConfig Console logger.ConsoleConfig } Server struct { Debug bool Listen string } // Kafka 队列配置 Kafka struct { Danmaku Kafka // 发送弹幕 Gift Kafka // 赠送礼物 GuardBuy Kafka // TODO 购买贵族 改名 RewardPool Kafka // 奖池消息 UserCoin Kafka // 用户金币变动消息 } Game struct { // Zhg 指挥官PvP模式 Zhg struct { CoinFoodRatio float32 // 硬币到粮草的转换系数(乘) OutbreakCount int64 // 每次暴兵数量 OutbreakBaseCost int64 // 默认每次暴兵消耗(不限兵种) OutbreakCostDict map[int]int64 // 暴兵消耗表 } // Zhghz 指挥官海战模式 Zhghz struct { } // Zhgfb 指挥官副本模式 Zhgfb struct { } // Zhgzd 指挥官阵地模式 Zhgzd struct { MaxStrategicPoints int32 // 最大战略点数 StrategicRecoverSpeed int32 // 每秒回复战略点数 // CommandUnitDict 命令单位ID字典 CommandUnitDict map[string]string // CommandCostDict 命令战略点消耗 CommandCostDict map[string]struct { Common int32 // 通用消耗 Units map[string]int32 // 单位消耗 } // 战略暴兵数量(兵种相关) DispatchCountDict map[string]int32 // 礼物效果配置 GiftEffect struct { // StrategicMaximal 战略点上限配置 StrategicMaximal struct { GiftIds []int64 // 对应礼物ID列表 Addon int32 // 增加上限值 Limit int32 // 次数限制 } // StrategicRecover 战略点回复速度 StrategicRecover struct { GiftIds []int64 // 对应礼物ID Addon int32 // 增加速度值 x每秒 Duration int32 // 持续时间 秒 Limit int32 // 次数限制 } // SupportSkill SupportSkill []struct { GiftIds []int64 // 对应礼物ID列表 (每次匹配一个) SkillIds []string // 技能ID列表 } // SuperSkill SuperSkill struct { GiftIds []int64 // 对应礼物ID列表 } } } } // RPC UserCenterRpc zrpc.RpcClientConf } ) var k = koanf.New(".") func Init(filepath string) { f := file.Provider(filepath) err := f.Watch(func(event interface{}, err error) { if err != nil { fmt.Printf("配置文件热重载失败: %v\n", err) return } k = koanf.New(".") err = loadAndUnmarshal(f) if err != nil { fmt.Printf("配置文件热重载失败: %v\n", err) return } fmt.Printf("重载配置文件: %+v\n", Config) }) if err != nil { panic(err) } mustLoadAndUnmarshal(f) fmt.Printf("%+v\n", Config) } func loadAndUnmarshal(f *file.File) (err error) { err = k.Load(f, yaml.Parser()) if err != nil { return } err = k.UnmarshalWithConf("", &Config, koanf.UnmarshalConf{Tag: "c"}) if err != nil { return } return } func mustLoadAndUnmarshal(f *file.File) { if err := loadAndUnmarshal(f); err != nil { panic(err) } }