Merge branch 'var-redis' into develop
This commit is contained in:
commit
3cd086b648
@ -33,7 +33,6 @@ func GetTaskRewardById(Id int) []*item.Item {
|
||||
func GetTaskById(Id int) string {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskById err:%v, Id=%d", err, Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "Task")
|
||||
|
||||
@ -42,7 +42,7 @@ func GetDailyVarData(key string) interface{} {
|
||||
|
||||
func GetUserVarData(key string, PlayerId int) interface{} {
|
||||
cache := map[string]*VarExpireData{}
|
||||
err := LoadCacheVarData(GoUtil.GetVarKey(int(PlayerId)), &cache)
|
||||
err := LoadUserVarData(GoUtil.GetVarKey(int(PlayerId)), &cache)
|
||||
if err != nil {
|
||||
// log.Error("GetUserVarData err : %s, key: %s", err, key)
|
||||
return nil
|
||||
@ -194,23 +194,43 @@ func (p *Player) GetCatnipPartner(Uid int) []int {
|
||||
}
|
||||
|
||||
func SaveCacheVarData(key string, value interface{}) {
|
||||
data, err := GoUtil.GobMarshal(value)
|
||||
buf, err := json.Marshal(value)
|
||||
if err != nil {
|
||||
log.Error("SaveCacheVarData GobMarshal err : %s", err)
|
||||
log.Error("failed to marshal user var data for key %s: %v", key, err)
|
||||
return
|
||||
}
|
||||
db.RedisSetKeyBytes(key, data, 0)
|
||||
db.RedisSetKey(key, string(buf), 0)
|
||||
}
|
||||
|
||||
func LoadCacheVarData(key string, value interface{}) error {
|
||||
data, err := db.RedisGetKeyBytes(key)
|
||||
data, err := db.RedisGetKey(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if data == nil {
|
||||
if data == "" {
|
||||
return fmt.Errorf("no data")
|
||||
}
|
||||
return GoUtil.GobUnmarshal(data, value)
|
||||
return json.Unmarshal([]byte(data), value)
|
||||
}
|
||||
|
||||
func SaveUserVarData(key string, value interface{}) {
|
||||
buf, err := json.Marshal(value)
|
||||
if err != nil {
|
||||
log.Error("failed to marshal user var data for key %s: %v", key, err)
|
||||
return
|
||||
}
|
||||
db.RedisSetKey(key, string(buf), 0)
|
||||
}
|
||||
|
||||
func LoadUserVarData(key string, value interface{}) error {
|
||||
data, err := db.RedisGetKey(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if data == "" {
|
||||
return fmt.Errorf("no data")
|
||||
}
|
||||
return json.Unmarshal([]byte(data), value)
|
||||
}
|
||||
|
||||
const (
|
||||
|
||||
@ -110,9 +110,42 @@ func (f *VarMgr) version() {
|
||||
// future version update
|
||||
f.fixbug() // 修复用户变量冗余数据
|
||||
f.getData().Version = 2
|
||||
case 2:
|
||||
f.translateToRedis() // 将用户变量迁移到Redis
|
||||
f.getData().Version = 3
|
||||
}
|
||||
}
|
||||
|
||||
func (f *VarMgr) translateToRedis() {
|
||||
data := f.getData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
for k, v := range data.NewUseVar {
|
||||
if v == nil {
|
||||
continue
|
||||
}
|
||||
key := GoUtil.GetVarKey(k)
|
||||
SaveUserVarData(key, v)
|
||||
log.Debug("translateToRedis: uid %d, varData %v", k, v)
|
||||
}
|
||||
for k, v := range data.NewVar {
|
||||
if v == nil {
|
||||
continue
|
||||
}
|
||||
SaveCacheVarData(k, v)
|
||||
log.Debug("translateToRedis: varKey %s, varData %v", k, v)
|
||||
}
|
||||
for k, v := range data.DailyVar {
|
||||
if v == nil {
|
||||
continue
|
||||
}
|
||||
SaveCacheVarData(k, v)
|
||||
log.Debug("translateToRedis: dailyVarKey %s, varData %v", k, v)
|
||||
}
|
||||
data.NewVar = make(map[string]*VarExpireData)
|
||||
data.NewUseVar = make(map[int]map[string]*VarExpireData)
|
||||
}
|
||||
|
||||
func (f *VarMgr) ZeroUpdate() {
|
||||
data := f.getData()
|
||||
data.mu.Lock()
|
||||
@ -124,13 +157,6 @@ func (f *VarMgr) ZeroUpdate() {
|
||||
Four: Card1,
|
||||
Five: Card2,
|
||||
})
|
||||
for k, v := range data.NewVar {
|
||||
if v.T < GoUtil.ZeroTimestamp() {
|
||||
delete(data.NewVar, k)
|
||||
}
|
||||
}
|
||||
// 清空每日变量
|
||||
data.DailyVar = make(map[string]*VarExpireData)
|
||||
f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
|
||||
f.ZeroUpdate()
|
||||
})
|
||||
@ -160,25 +186,20 @@ func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (i
|
||||
}
|
||||
|
||||
func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) {
|
||||
varData := f.getData().NewUseVar[uid]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
f.getData().NewUseVar[uid] = varData
|
||||
}
|
||||
varData := make(map[string]*VarExpireData)
|
||||
LoadUserVarData(GoUtil.GetVarKey(uid), &varData)
|
||||
ved, ok := varData[key]
|
||||
if !ok {
|
||||
ved = &VarExpireData{}
|
||||
}
|
||||
ved.D = value
|
||||
varData[key] = ved
|
||||
SaveCacheVarData(GoUtil.GetVarKey(uid), varData)
|
||||
SaveUserVarData(GoUtil.GetVarKey(uid), varData)
|
||||
}
|
||||
|
||||
func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData {
|
||||
varData := f.getData().NewUseVar[uid]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
}
|
||||
varData := make(map[string]*VarExpireData)
|
||||
LoadUserVarData(GoUtil.GetVarKey(uid), &varData)
|
||||
ved, ok := varData[key]
|
||||
if !ok {
|
||||
ved = &VarExpireData{}
|
||||
@ -188,10 +209,10 @@ func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData {
|
||||
}
|
||||
|
||||
func (f *VarMgr) SetVar(key string, value interface{}) {
|
||||
f.getData().NewVar[key] = &VarExpireData{
|
||||
D: value,
|
||||
}
|
||||
SaveCacheVarData(key, f.getData().NewVar[key])
|
||||
data := &VarExpireData{}
|
||||
LoadCacheVarData(key, data)
|
||||
data.D = value
|
||||
SaveCacheVarData(key, data)
|
||||
}
|
||||
|
||||
func (f *VarMgr) getData() *VarData {
|
||||
@ -227,18 +248,23 @@ func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
userVar := &VarExpireData{}
|
||||
if v, ok := m.Extra.(msg.VarData); ok {
|
||||
if varData, ok := data.NewUseVar[m.From]; ok {
|
||||
userVar, _ = varData[v.Key]
|
||||
}
|
||||
if userVar == nil {
|
||||
userVar = &VarExpireData{}
|
||||
}
|
||||
ReplyPlayerMsgASync(m, userVar.D)
|
||||
return userVar, nil
|
||||
v, ok := m.Extra.(msg.VarData)
|
||||
if !ok {
|
||||
log.Error("GetUserVarDataHandler err : invalid parameters, key: %s", v.Key)
|
||||
return nil, fmt.Errorf("invalid parameters for getting var data")
|
||||
}
|
||||
return nil, fmt.Errorf("invalid parameters for getting var data")
|
||||
varData := make(map[string]*VarExpireData)
|
||||
err := LoadUserVarData(GoUtil.GetVarKey(m.From), &varData)
|
||||
if err != nil {
|
||||
log.Error("GetUserVarDataHandler err : %s, key: %s", err, v.Key)
|
||||
return nil, fmt.Errorf("failed to load user var data: %v", err)
|
||||
}
|
||||
userVar, _ := varData[v.Key]
|
||||
if userVar == nil {
|
||||
userVar = &VarExpireData{}
|
||||
}
|
||||
ReplyPlayerMsgASync(m, userVar.D)
|
||||
return userVar, nil
|
||||
}
|
||||
|
||||
func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
@ -249,10 +275,10 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid parameters for setting var data")
|
||||
}
|
||||
varData := data.NewUseVar[m.To]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
data.NewUseVar[m.To] = varData
|
||||
varData := make(map[string]*VarExpireData)
|
||||
err := LoadUserVarData(GoUtil.GetVarKey(m.To), &varData)
|
||||
if err != nil {
|
||||
log.Debug("SetUserVarDataHandler err : %s, key: %s", err, v.Key)
|
||||
}
|
||||
ved := varData[v.Key]
|
||||
if ved == nil {
|
||||
@ -264,7 +290,7 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
varData[v.Key] = ved
|
||||
log.Debug("SetUserVarDataHandler: uid %d, key %s, value %v, setType %d, end %d", m.To, v.Key, v.Value, v.SetType, m.End)
|
||||
SaveCacheVarData(GoUtil.GetVarKey(m.To), varData)
|
||||
SaveUserVarData(GoUtil.GetVarKey(m.To), varData)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
||||
@ -841,7 +841,7 @@ func GetISOCodeByIP(ip string) (string, error) {
|
||||
}
|
||||
|
||||
func GetVarKey(Uid int) string {
|
||||
return fmt.Sprintf("var_%d", Uid)
|
||||
return fmt.Sprintf("new_var_%d", Uid)
|
||||
}
|
||||
|
||||
const (
|
||||
|
||||
Loading…
Reference in New Issue
Block a user