From b5dab26d96522dae2e15779d9a3f735d20cc05e3 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Thu, 18 Apr 2024 18:10:14 +0800 Subject: [PATCH] feat✨:游戏功能配置 --- conf/local.conf | 2 +- configs/confapi/config.go | 27 ++++++++++++++++++++++----- configs/confbase/index.go | 24 ++++++++++++++++++++++-- configs/confdemo/1.go | 4 ++-- configs/confdemo/decode.go | 3 +++ controllers/demo.go | 18 ++++++++++++++---- 6 files changed, 64 insertions(+), 14 deletions(-) diff --git a/conf/local.conf b/conf/local.conf index 33f70fa..ed00f5f 100644 --- a/conf/local.conf +++ b/conf/local.conf @@ -12,7 +12,7 @@ env = local host = 127.0.0.1 port = 6379 pwd = 123456 -db = 12 +db = 0 prefix = merge:: tokendb = 13 cachedb = 14 diff --git a/configs/confapi/config.go b/configs/confapi/config.go index 406f0d4..0e612f8 100644 --- a/configs/confapi/config.go +++ b/configs/confapi/config.go @@ -1,6 +1,7 @@ package confapi import ( + "apigame/configs/confbase" "apigame/service-common/svconst" "apigame/service-common/svmysql" "apigame/service-common/svredis" @@ -9,11 +10,18 @@ import ( // ApiGameConfig api游戏配置 type ApiGameConfig struct { - AppId string `gorm:"column:appid"` - GameId string `gorm:"column:gameid"` - Secret string `gorm:"column:secret"` - AppKey string `gorm:"column:appkey"` - Name string `gorm:"column:name"` + Raw *Raw +} + +func (c *ApiGameConfig) ConfInfo(suffix string) *confbase.ConfInfo { + tableName := "s_game_config" + return &confbase.ConfInfo{ + DbMysql: svconst.DbApi, + TableName: tableName, + KeyName: "gameid", + CacheKey: fmt.Sprintf("%s:%s:%s", svconst.REDIS_CACHEP_REFIX, tableName, suffix), + CacheTime: 300, + } } func (c *ApiGameConfig) RedisInfo(suffix string) *svredis.RedisInfo { @@ -31,3 +39,12 @@ func (c *ApiGameConfig) MysqlInfo(suffix string) *svmysql.MysqlInfo { TableName: tableName, } } + +// Raw 配置原始数据 +type Raw struct { + AppId string `gorm:"column:appid"` + GameId string `gorm:"column:gameid"` + Secret string `gorm:"column:secret"` + AppKey string `gorm:"column:appkey"` + Name string `gorm:"column:name"` +} diff --git a/configs/confbase/index.go b/configs/confbase/index.go index d2f8f01..f1906d2 100644 --- a/configs/confbase/index.go +++ b/configs/confbase/index.go @@ -31,6 +31,26 @@ func LoadCache[T IConfData](gameId string, obj T) (has bool) { return } +func LoadData[T1 IConfData, T2 IConfRawData](gameId string, id any, obj T1) (has bool) { + confRaw := new(T2) + info := obj.ConfInfo(gameId) + db := info.DbMysql + result := db.Table(info.TableName).Where(fmt.Sprintf("%s = ?", info.KeyName), id).First(confRaw) + + has = result.RowsAffected != 0 + err := result.Error + if err != nil { + lxalilog.Errors(err, "confbase.LoadData error", gameId) + return + } + if !has { + return + } + + obj.Decode(gameId, confRaw) + return +} + func FindDuringTime(obj svmysql.IMysqlData, gameId string) (has bool) { info := obj.MysqlInfo(gameId) db := info.DbMysql @@ -40,11 +60,11 @@ func FindDuringTime(obj svmysql.IMysqlData, gameId string) (has bool) { return } -func LoadData[T1 IConfData, T2 IConfRawData](gameId string, id any, obj T1) (has bool) { +func GetConfig[T1 IConfData, T2 IConfRawData](gameId string, id any, obj T1) (has bool) { confRaw := new(T2) info := obj.ConfInfo(gameId) db := info.DbMysql - result := db.Table(info.TableName).Where(fmt.Sprintf("%s = ?", info.KeyName), id).First(obj) + result := db.Table(info.TableName).Where(fmt.Sprintf("%s = ?", info.KeyName), id).First(confRaw) has = result.RowsAffected != 0 err := result.Error diff --git a/configs/confdemo/1.go b/configs/confdemo/1.go index 73de153..c1a0bc1 100644 --- a/configs/confdemo/1.go +++ b/configs/confdemo/1.go @@ -18,9 +18,9 @@ func (c *DemoConfig) ConfInfo(suffix string) *confbase.ConfInfo { tableName := "s_demo" return &confbase.ConfInfo{ DbMysql: svconst.DbConfig, - TableName: tableName + suffix, + TableName: fmt.Sprintf("%s_%s", tableName, suffix), KeyName: "id", - CacheKey: fmt.Sprintf("%s:%s:%s", svconst.REDIS_CACHEP_REFIX, tableName, suffix), + CacheKey: fmt.Sprintf("%s:%s:%s:%d", svconst.REDIS_CACHEP_REFIX, tableName, suffix, c.Id), CacheTime: 300, } } diff --git a/configs/confdemo/decode.go b/configs/confdemo/decode.go index 9f171d0..8c7cbbf 100644 --- a/configs/confdemo/decode.go +++ b/configs/confdemo/decode.go @@ -4,4 +4,7 @@ package confdemo func (c *DemoConfig) Decode(gameId string, rawData any) { raw := rawData.(*DemoConfigRaw) c.Raw = raw + + c.Id = raw.Id + c.OpenLevel = raw.OpenLevel } diff --git a/controllers/demo.go b/controllers/demo.go index 3a25961..7c6da39 100644 --- a/controllers/demo.go +++ b/controllers/demo.go @@ -71,10 +71,20 @@ func (c *DemoController) Demo() { { gameId := "10149" - conf := new(confdemo.DemoConfig) - has := confbase.LoadData[*confdemo.DemoConfig, confdemo.DemoConfigRaw](gameId, 1, conf) - fmt.Println(has) - fmt.Println(conf) + { + conf := new(confdemo.DemoConfig) + has := confbase.LoadData[*confdemo.DemoConfig, confdemo.DemoConfigRaw](gameId, 1, conf) + fmt.Println(has) + fmt.Println(conf) + + confbase.SaveCache(gameId, conf) + } + { + conf := &confdemo.DemoConfig{Id: 1} + has := confbase.LoadCache(gameId, conf) + fmt.Println(has) + fmt.Println(conf) + } } c.RetRspCodeData(code_msg.RECODE_OK, rsp) -- libgit2 0.21.0