diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 10db4d3..4d827dd 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -76,7 +76,9 @@ type QueryguaninfoResp struct { } type GetguangoldReq struct { - Goldnum int `json:"goldnum"` + Goldnum int `json:"goldnum"` + Gameid string `json:"gameid"` + Channel string `json:"channel"` } type GetguangoldData struct { @@ -123,6 +125,11 @@ type GetcashReq struct { Ver string `json:"ver"` } +type CommReq struct { + Gameid string `json:"gameid"` + Channel string `json:"channel"` +} + type GetcashData struct { Walletgold int `json:"walletgold"` } @@ -149,8 +156,10 @@ type OnlinentfResp struct { } type UpdatetaskReq struct { - Tasktype int `json:"tasktype"` - Value int `json:"value"` + Tasktype int `json:"tasktype"` + Value int `json:"value"` + Gameid string `json:"gameid"` + Channel string `json:"channel"` } type UpdatetaskResp struct { @@ -159,7 +168,9 @@ type UpdatetaskResp struct { } type QuerytaskinfoReq struct { - Tasktype int `json:"tasktype"` + Tasktype int `json:"tasktype"` + Gameid string `json:"gameid"` + Channel string `json:"channel"` } type QuerytaskinfoResp struct { @@ -290,7 +301,7 @@ type WithDrawDesc struct { //玩家数据 type UserData struct { - Userid int //玩家id + Userid string //玩家id Lv int //玩家当前等级 LvRewardGet int //当前等级奖励是否已经领取 1未领取 2普通领取 3双倍领取 Exp int //玩家当前经验值 diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index e33f415..18bbadc 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -45,14 +45,14 @@ func SaveUserInfo(data *UserData) error { return err } - err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, strconv.Itoa(data.Userid), string(savestr)) + err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, data.Userid, string(savestr)) return err } -func GetUserInfo(uuid int) (*UserData, error) { +func GetUserInfo(uniqueid string) (*UserData, error) { - data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, strconv.Itoa(uuid)) + data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, uniqueid) if err != nil { return nil, err } @@ -276,7 +276,7 @@ func (uinfo *UserData) CalcAchieveList(list *TaskList) *TaskList { return newlist } -func SaveTaskInfo(uuid, tasktype int, list *TaskList) error { +func SaveTaskInfo(uuid string, tasktype int, list *TaskList) error { savestr, err := json.Marshal(list) if err != nil { logger.Error("SaveTaskInfo err =%v", err) @@ -284,9 +284,9 @@ func SaveTaskInfo(uuid, tasktype int, list *TaskList) error { } if tasktype == 1 { - err = redishandler.GetRedisClient().HSet(redis.USER_TASKINFO_LIST, strconv.Itoa(uuid), string(savestr)) + err = redishandler.GetRedisClient().HSet(redis.USER_TASKINFO_LIST, uuid, string(savestr)) } else if tasktype == 2 { - err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST, strconv.Itoa(uuid), string(savestr)) + err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST, uuid, string(savestr)) //logger.Info("SaveTaskInfo savestr=%v", string(savestr)) } else { logger.Error("tasktype invalid") @@ -295,13 +295,28 @@ func SaveTaskInfo(uuid, tasktype int, list *TaskList) error { return err } -func GetTaskInfo(uuid, tasktype int) (*TaskList, error) { +func GetTaskInfo(uuid int, tasktype int, channel string) (*TaskList, error) { + unqiueuuid := strconv.Itoa(uuid) + channel var data string var err error if tasktype == 1 { - data, err = redishandler.GetRedisClient().HGet(redis.USER_TASKINFO_LIST, strconv.Itoa(uuid)) + data, err = redishandler.GetRedisClient().HGet(redis.USER_TASKINFO_LIST, unqiueuuid) } else if tasktype == 2 { - data, err = redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, strconv.Itoa(uuid)) + data, err = redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, unqiueuuid) + //成就这一块需要兼容老的数据 + if err != nil { + //没有读到数据 则去读取一下老的id + olddata, err := redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, strconv.Itoa(uuid)) + if err == nil { + err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST, unqiueuuid, olddata) + if err == nil { + //删除老的数据 以后都走新的数据 + err = redishandler.GetRedisClient().HDel(redis.USER_ACHIEVEMENTINFO_LIST, strconv.Itoa(uuid)) + + } + data, err = redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, unqiueuuid) + } + } } else { logger.Error("tasktype invalid") return nil, errors.New("tasktype invalid") @@ -322,7 +337,7 @@ func GetTaskInfo(uuid, tasktype int) (*TaskList, error) { } //处理领取任务 -func (uinfo *UserData) HandleGetTaskReward(req *GettaskrewardReq, resp *GettaskrewardResp, list *TaskList) error { +func (uinfo *UserData) HandleGetTaskReward(req *GettaskrewardReq, resp *GettaskrewardResp, list *TaskList, uuid int) error { isfind := false index := -1 var taskdesc *TaskListDesc @@ -385,7 +400,7 @@ func (uinfo *UserData) HandleGetTaskReward(req *GettaskrewardReq, resp *Gettaskr for i := 0; i < sub; i++ { rtype := cfg.Reward[i*2] rnum := cfg.Reward[i*2+1] - r1, r2, r3, r4, r5, r6, r7 := uinfo.RewardUser(rtype, rnum, req.Gameid, req.Channel) + r1, r2, r3, r4, r5, r6, r7 := uinfo.RewardUser(rtype, rnum, req.Gameid, req.Channel, uuid) if resp.Data.Lv != r1 { resp.Data.Lv = r1 resp.Data.Costtime = uinfo.UpLvCostTime / 3600 @@ -401,7 +416,7 @@ func (uinfo *UserData) HandleGetTaskReward(req *GettaskrewardReq, resp *Gettaskr return nil } -func (uinfo *UserData) RewardUser(rtype int, num int, gameid string, channel string) (int, int, int, int, int, int, int) { +func (uinfo *UserData) RewardUser(rtype int, num int, gameid string, channel string, uuid int) (int, int, int, int, int, int, int) { logger.Info("RewardUser rtype=%v,num=%v", rtype, num) switch rtype { case REWARDTYPE_STAR: @@ -422,7 +437,7 @@ func (uinfo *UserData) RewardUser(rtype int, num int, gameid string, channel str return 0, 0, 0, 0, 0, 0, 0 } case REWARDTYPE_GOLD: - goldnum, err := AddCoinToSdk(uinfo.Userid, num, gameid, channel, 102) + goldnum, err := AddCoinToSdk(uuid, num, gameid, channel, 102) if err != nil { logger.Error("RewardUser failer err=%v", err) } @@ -435,13 +450,13 @@ func (uinfo *UserData) RewardUser(rtype int, num int, gameid string, channel str return 0, 0, 0, 0, 0, 0, 0 } -func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) error { +func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int, uniqueuid string) error { var initdata UserData initdata.Lv = 1 initdata.LvRewardGet = 1 initdata.Exp = 0 - initdata.Userid = uuid + initdata.Userid = uniqueuid //加上渠道的唯一id initdata.ContinueLoginDay = 1 initdata.GetFromGuanCnt = 0 initdata.GuanGold = 0 @@ -483,7 +498,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) error { } //初始化一下玩家的任务与成就数据数据 - err = InitTaskAndAchievement(uuid) + err = InitTaskAndAchievement(uuid, data.Channel) return err } @@ -497,9 +512,10 @@ func (t *TaskList) IsInTaskList(id int) bool { return false } -func InitTaskAndAchievement(uuid int) error { +func InitTaskAndAchievement(uuid int, channel string) error { + unqiueid := strconv.Itoa(uuid) + channel //先初始化任务 - tlist, err := GetTaskInfo(uuid, 1) + tlist, err := GetTaskInfo(uuid, 1, channel) if tlist == nil { tasklist := new(TaskList) for _, val := range jsonconf.GetJsonConf().TaskConfig { @@ -510,7 +526,7 @@ func InitTaskAndAchievement(uuid int) error { tasklist.Taskdata = append(tasklist.Taskdata, tmp) } - err := SaveTaskInfo(uuid, 1, tasklist) + err := SaveTaskInfo(unqiueid, 1, tasklist) if err != nil { logger.Error("InitTaskAndAchievement err=%v", err) //return err @@ -532,7 +548,7 @@ func InitTaskAndAchievement(uuid int) error { } - err := SaveTaskInfo(uuid, 1, tlist) + err := SaveTaskInfo(unqiueid, 1, tlist) if err != nil { logger.Error("InitTaskAndAchievement err=%v", err) //return err @@ -540,7 +556,7 @@ func InitTaskAndAchievement(uuid int) error { } //成就 - alist, err := GetTaskInfo(uuid, 2) + alist, err := GetTaskInfo(uuid, 2, channel) if alist == nil { achievelist := new(TaskList) for _, val := range jsonconf.GetJsonConf().AchieventConfig { @@ -551,7 +567,7 @@ func InitTaskAndAchievement(uuid int) error { achievelist.Taskdata = append(achievelist.Taskdata, tmp) } - err = SaveTaskInfo(uuid, 2, achievelist) + err = SaveTaskInfo(unqiueid, 2, achievelist) if err != nil { logger.Error("InitTaskAndAchievement err=%v", err) return err @@ -567,7 +583,7 @@ func InitTaskAndAchievement(uuid int) error { } } - err = SaveTaskInfo(uuid, 2, alist) + err = SaveTaskInfo(unqiueid, 2, alist) if err != nil { logger.Error("InitTaskAndAchievement err=%v", err) return err @@ -596,7 +612,7 @@ func (u *UserData) CalcTotalCnt() int { return usertime } -func (u *UserData) HandlePassDay() { +func (u *UserData) HandlePassDay(uuid int, channel string) { isdiffday := false nowtime := time.Now() lasttime := time.Unix(int64(u.LastLoginTime), 0) @@ -663,7 +679,7 @@ func (u *UserData) HandlePassDay() { if err != nil { logger.Error("InitTaskAndAchievement err=%v", err) }*/ - err := InitTaskAndAchievement(u.Userid) + err := InitTaskAndAchievement(uuid, channel) if err != nil { logger.Error("InitTaskAndAchievement err=%v", err) } @@ -682,8 +698,8 @@ func (u *UserData) HandlePassDay() { SaveUserInfo(u) } -func GetUserData(uuid int, req *UserLoginReq, resp *UserLoginResp) error { - data, err := GetUserInfo(uuid) +func GetUserData(uuid int, uniqueuid string, req *UserLoginReq, resp *UserLoginResp) error { + data, err := GetUserInfo(uniqueuid) if err != nil || data == nil { resp.Code = ERROR_SRV_ERROR resp.Message = "ERROR_SRV_ERROR" @@ -691,7 +707,7 @@ func GetUserData(uuid int, req *UserLoginReq, resp *UserLoginResp) error { } //此处要处理一下跨天逻辑 - data.HandlePassDay() + data.HandlePassDay(uuid, req.Channel) //此处处理一下从sdk拉取钱包金币数量 gold, err := GetCoinFromSdk(uuid, req.Gameid, req.Channel) diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index d3d6ff9..ca96daf 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -137,9 +137,11 @@ func Querysigndata(w http.ResponseWriter, r *http.Request) { func Addcoin(w http.ResponseWriter, r *http.Request) { SetHeader(w) query := r.URL.Query() - uuid := query.Get("uuid") + uuid := query.Get("uuid") //需要加上渠道号 460012 + channel := query.Get("channel") uuidnum, _ := strconv.Atoi(uuid) - uinfo, err := GetUserInfo(uuidnum) + uniqueuuid := uuid + channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) fmt.Fprint(w, "failed") @@ -187,7 +189,9 @@ func Testapi(w http.ResponseWriter, r *http.Request) { return } - uinfo, err := GetUserInfo(Uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(Uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) fmt.Fprint(w, "failed") diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 81265a1..44b1d61 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -9,15 +9,24 @@ import ( "fmt" "net/http" "strconv" - "time" ) func HandlerQueryguaninfo(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp QueryguaninfoResp resp.Code = 0 + var rdata CommReq + err := json.Unmarshal([]byte(data), &rdata) for { - uinfo, err := GetUserInfo(uuid) + if err != nil { + logger.Info("json decode HandlerDrawguangold data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -25,7 +34,7 @@ func HandlerQueryguaninfo(w http.ResponseWriter, data string, uuid int) { break } - uinfo.HandlePassDay() + uinfo.HandlePassDay(uuid, rdata.Channel) //获取存钱罐等级配置 mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv) @@ -59,7 +68,7 @@ func HandlerWatchads(w http.ResponseWriter, data string, uuid int) { var resp WatchadsResp resp.Code = 0 - for { + /*for { uinfo, err := GetUserInfo(uuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) @@ -91,7 +100,7 @@ func HandlerWatchads(w http.ResponseWriter, data string, uuid int) { //回包 respstr, _ := json.Marshal(&resp) - fmt.Fprint(w, string(respstr)) + fmt.Fprint(w, string(respstr))*/ } func HandlerGetcash(w http.ResponseWriter, data string, uuid int) { @@ -112,7 +121,9 @@ func HandlerGetcash(w http.ResponseWriter, data string, uuid int) { rdata.Ver = "2.0.0" }*/ - uinfo, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -186,16 +197,16 @@ func HandlerGetcash(w http.ResponseWriter, data string, uuid int) { } //需要保存一下提现记录 - sdata := new(WithDrawRecord) - sdata.Coin = int(rdata.Money * 100) - sdata.Create_time = int(time.Now().Unix()) - err = AddWithDrawList(uuid, sdata) - if err != nil { - logger.Error("AddWithDrawList failed err=%v", err) - /*resp.Message = "网络错误" - resp.Code = ERROR_SRV_ERROR - break*/ - } + /* sdata := new(WithDrawRecord) + sdata.Coin = int(rdata.Money * 100) + sdata.Create_time = int(time.Now().Unix()) + err = AddWithDrawList(uuid, sdata) + if err != nil { + logger.Error("AddWithDrawList failed err=%v", err) + resp.Message = "网络错误" + resp.Code = ERROR_SRV_ERROR + break + }*/ if info.Isnew == 1 { uinfo.WithDraw.Cashdata[index].Isnew = 0 @@ -221,10 +232,19 @@ func HandlerQuerysigndata(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp QuerysigndataResp resp.Code = 0 - + var rdata CommReq + err := json.Unmarshal([]byte(data), &rdata) for { - uinfo, err := GetUserInfo(uuid) + if err != nil { + logger.Info("json decode HandlerDrawguangold data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -233,7 +253,7 @@ func HandlerQuerysigndata(w http.ResponseWriter, data string, uuid int) { } //此处要处理一下跨天逻辑 - uinfo.HandlePassDay() + uinfo.HandlePassDay(uuid, rdata.Channel) resp.Data.Continuessign = uinfo.SignSum resp.Data.IssignToday = uinfo.IsSignToday @@ -263,7 +283,9 @@ func HandlerGetnewlevelreward(w http.ResponseWriter, data string, uuid int) { resp.Code = ERROR_JSONUNMASH_ERROR break } - uinfo, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -339,7 +361,10 @@ func HandlerUsersign(w http.ResponseWriter, data string, uuid int) { resp.Code = ERROR_JSONUNMASH_ERROR break } - uinfo, err := GetUserInfo(uuid) + + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -415,7 +440,10 @@ func HandlerGettaskreward(w http.ResponseWriter, data string, uuid int) { resp.Code = ERROR_JSONUNMASH_ERROR break } - uinfo, err := GetUserInfo(uuid) + + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -426,7 +454,7 @@ func HandlerGettaskreward(w http.ResponseWriter, data string, uuid int) { //需要先计算出任务或者成就 var tasklist *TaskList //先查询一下当前的任务数据 - tasklist, err = GetTaskInfo(uuid, rdata.Tasktype) + tasklist, err = GetTaskInfo(uuid, rdata.Tasktype, rdata.Channel) if err != nil || tasklist == nil { logger.Error("GetTaskInfo failed err=%v", err) resp.Message = "服务器错误" @@ -434,7 +462,7 @@ func HandlerGettaskreward(w http.ResponseWriter, data string, uuid int) { break } - err = uinfo.HandleGetTaskReward(&rdata, &resp, tasklist) + err = uinfo.HandleGetTaskReward(&rdata, &resp, tasklist, uuid) logger.Info("HandlerGettaskreward tasklist=%v", tasklist) logger.Info("HandlerGettaskreward uinfo=%v", uinfo) if err != nil { @@ -471,7 +499,9 @@ func HandlerQuerytaskinfo(w http.ResponseWriter, data string, uuid int) { resp.Code = ERROR_JSONUNMASH_ERROR break } - uinfo, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -479,12 +509,12 @@ func HandlerQuerytaskinfo(w http.ResponseWriter, data string, uuid int) { break } - uinfo.HandlePassDay() + uinfo.HandlePassDay(uuid, rdata.Channel) //需要先计算出任务或者成就 var tasklist *TaskList //先查询一下当前的任务数据 - tasklist, err = GetTaskInfo(uuid, rdata.Tasktype) + tasklist, err = GetTaskInfo(uuid, rdata.Tasktype, rdata.Channel) if err != nil || tasklist == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -534,7 +564,9 @@ func HandlerUpdatetaskandachieve(w http.ResponseWriter, data string, uuid int) { resp.Code = ERROR_JSONUNMASH_ERROR break } - uinfo, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -577,9 +609,19 @@ func HandlerOnlinentf(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp OnlinentfResp resp.Code = 0 + var rdata CommReq + err := json.Unmarshal([]byte(data), &rdata) for { - uinfo, err := GetUserInfo(uuid) + if err != nil { + logger.Info("json decode HandlerOnlinentf data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -646,8 +688,19 @@ func HandlerQuerdrawinfo(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp QuerdrawinfoResp resp.Code = 0 + var rdata CommReq + err := json.Unmarshal([]byte(data), &rdata) for { - uinfo, err := GetUserInfo(uuid) + + if err != nil { + logger.Info("json decode HandlerQuerdrawinfo data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -682,7 +735,9 @@ func HandlerDrawguangold(w http.ResponseWriter, data string, uuid int) { break } - uinfo, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -767,7 +822,9 @@ func HandlerGetguangold(w http.ResponseWriter, data string, uuid int) { break } - uinfo, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + uinfo, err := GetUserInfo(uniqueuuid) if err != nil || uinfo == nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -818,7 +875,9 @@ func HandlerGetuserdata(w http.ResponseWriter, data string, uuid int) { break } - data, err := GetUserInfo(uuid) + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + data, err := GetUserInfo(uniqueuuid) if err != nil || data == nil { resp.Code = ERROR_SRV_ERROR resp.Message = "ERROR_SRV_ERROR" @@ -854,6 +913,7 @@ func HandlerGetuserdata(w http.ResponseWriter, data string, uuid int) { func HandlerLogin(w http.ResponseWriter, data string, uuid int) { SetHeader(w) + var resp UserLoginResp resp.Code = 0 var rdata UserLoginReq @@ -866,8 +926,11 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int) { break } + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + //此处需要做一下数据兼容 先判断uuid+channel的key是否存在 //先判断一下是否是新用户 - isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, strconv.Itoa(uuid)) + isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, uniqueuuid) if err != nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" @@ -878,10 +941,38 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int) { if !isexist { //不存在 //属于新登录的玩家数据 - err = InitUserInfo(&rdata, &resp, uuid) + //需要判断是否存在老的版本的数据 + isexist, err = redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, strconv.Itoa(uuid)) + if err == nil && isexist { + //如果存在老的数据 做数据迁移 + oldstr, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, strconv.Itoa(uuid)) + if err != nil { + logger.Error("HandlerLogin redis failed err=%v,uuid=%v", err, uuid) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueuuid, oldstr) + if err != nil { + logger.Error("HandlerLogin redis failed err=%v,uuid=%v", err, uuid) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + err = GetUserData(uuid, uniqueuuid, &rdata, &resp) + if err == nil { + //删除老的数据 + redishandler.GetRedisClient().HDel(redis.USER_DATA_KEY, strconv.Itoa(uuid)) + } + } else { + //不存在老的数据 之间走新号流程 + err = InitUserInfo(&rdata, &resp, uuid, uniqueuuid) + } + } else { + //已经迁移过的数据之间返回 //已经登陆过了 需要获取玩家数据 - err = GetUserData(uuid, &rdata, &resp) + err = GetUserData(uuid, uniqueuuid, &rdata, &resp) } if err != nil { -- libgit2 0.21.0