diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 56871a8..e919792 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -9,8 +9,8 @@ package logic //"107":"签到罐" type UserLoginReq struct { - Fromid int `json:"fromid"` - Sharetype int `json:"sharetype"` + Nickname string `json:"nickname"` + Headurl string `json:"headurl"` Gameid string `json:"gameid"` Channel string `json:"channel"` } @@ -258,6 +258,26 @@ type QuerysigndataResp struct { Data QuerysigndataData `json:"data"` } +type Queryrankinfolist struct { + Rank int `json:"rank"` + Nickname string `json:"nickname"` + Headurl string `json:"headurl"` + Socre int64 `json:"socre"` + UniqueId string `json:"uniqueId"` +} + +type QueryrankinfoData struct { + Selfrank int `json:"selfrank"` + Selfsocre int64 `json:"selfsocre"` + Ranklist []Queryrankinfolist `json:"ranklist"` +} + +type QueryrankinfoResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data QueryrankinfoData `json:"data"` +} + type FetchredbagReq struct { Gameid string `json:"gameid"` Channel string `json:"channel"` @@ -351,6 +371,21 @@ type TaskInfo struct { PlaySmall int //当日是否试玩小游戏15s 次数 } +type UploadhigestscoreReq struct { + Score int64 `json:"score"` + Gameid string `json:"gameid"` + Channel string `json:"channel"` +} + +type UploadhigestscoreData struct { +} + +type UploadhigestscoreResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data UploadhigestscoreData `json:"data"` +} + // type AchieveMentInfo struct { WatchAdsCnt int //观看广告数 @@ -427,6 +462,9 @@ type UserData struct { ShakeTime int //摇一摇 FetchRedCnt int //领取红包次数计数 IsNew int //新手状态 + Hfen int64 //当天分数 + Nickname string //昵称 + HeadUrl string //头像 FetchRdBagNum int //当天已领的红包 WithDraw WithDrawInfo //提现记录信息 //SpecialWithDraw WithDrawInfo //活跃提现记录信息 diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index b1c2ada..5110981 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -670,6 +670,8 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int, uniqueuid s initdata.ShakeTime = SHAKELIMIT initdata.IsNew = 1 initdata.FetchRdBagNum = 0 + initdata.Nickname = data.Nickname + initdata.HeadUrl = data.Headurl for _, val := range jsonconf.GetJsonConf().WithDrawConfig { var tmp WithDrawDesc @@ -955,6 +957,10 @@ func GetUserData(uuid int, uniqueuid string, req *UserLoginReq, resp *UserLoginR return err } + + //更新头像 + data.HeadUrl = req.Headurl + data.Nickname = req.Nickname //此处要处理一下跨天逻辑 data.HandlePassDay(uuid, req.Channel) @@ -1142,6 +1148,14 @@ func GettotalParam(paramlist []string) string { return sumparam } +func (udata *UserData) AddToRank(unid string) error { + err := redishandler.GetRedisClient().Zadd(redis.USER_SCORE_RANK, float64(udata.Hfen), unid) + if err != nil { + logger.Error("AddToRank failed err=%v", err) + } + return err +} + func GetHashValue(signsum string) string { /*h := sha1.New() h.Write([]byte(signsum)) diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index 888faea..cf47ed6 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -9,6 +9,7 @@ import ( "fmt" "io/ioutil" "strconv" + "time" //"log" "net/http" @@ -16,7 +17,15 @@ import ( //定时处理倒计时 func StartHttpTicker() { - + for { + now := time.Now() //获取当前时间,放到now里面,要给next用 + next := now.Add(time.Hour * 24) //通过now偏移24小时 + next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location()) //获取下一个凌晨的日期 + t := time.NewTimer(next.Sub(now))//计算当前时间到凌晨的时间间隔,设置一个定时器 + <-t.C + redishandler.GetRedisClient().Delete(redis.USER_SCORE_RANK) + logger.Info("Del USER_SCORE_RANK success!") + } } func StartHttpServe() { @@ -64,6 +73,8 @@ func startServerHttpServe() { http.HandleFunc("/ballbattle/fetchredbag", Fetchredbag) //领取红包 http.HandleFunc("/ballbattle/savadata", Savadata) //保存数据 http.HandleFunc("/ballbattle/getdata", Getdata) //获取数据 + http.HandleFunc("/ballbattle/uploadscore", Uploadscore) //上报当天积分 + http.HandleFunc("/ballbattle/queryrankinfo", Queryrankinfo) //获取排行榜信息 // http.HandleFunc("/ballbattle/readNumUpload", ReadNumUpload) //阅读量上报 http.HandleFunc("/ballbattle/queryreadgold", QueryReadGold) //获取微转发金币数 @@ -144,6 +155,49 @@ func Savadata(w http.ResponseWriter, r *http.Request) { HandlerSavadata(w, s, Uuid) } + +func Queryrankinfo(w http.ResponseWriter, r *http.Request) { + + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + } + + if Uuid == 0 { + SetHeader(w) + //logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Queryrankinfo , body:%v,uuid=%v", s, Uuid) + + HandlerQueryrankinfo(w, s, Uuid) +} + +func Uploadscore(w http.ResponseWriter, r *http.Request) { + + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + } + + if Uuid == 0 { + SetHeader(w) + //logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Uploadscore , body:%v,uuid=%v", s, Uuid) + + HandlerUploadscore(w, s, Uuid) +} + func Getdata(w http.ResponseWriter, r *http.Request) { Uuid := 0 diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 68f4609..7ce9af3 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -525,6 +525,130 @@ func HandlerReadNumUpload(w http.ResponseWriter, data string) { fmt.Fprint(w, string(respstr)) } + +func HandlerUploadscore(w http.ResponseWriter, data string, uuid int) { + SetHeader(w) + var resp UploadhigestscoreResp + resp.Code = 0 + resp.Message = "success" + var rdata UploadhigestscoreReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerUploadscore data failed:%v,for:%v", err, data) + resp.Message = "网络错误" + 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 = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + if uinfo.Hfen >= rdata.Score { + //resp.Message = "服务器错误" + resp.Code = 0 + break + } + + uinfo.Hfen = rdata.Score + uinfo.AddToRank(uniqueuuid) + //加入排行榜 + SaveUserInfo(uinfo, uniqueuuid) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + + +func HandlerQueryrankinfo(w http.ResponseWriter, data string, uuid int) { + SetHeader(w) + var resp QueryrankinfoResp + resp.Code = 0 + resp.Message = "success" + var rdata CommReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerQueryrankinfo data failed:%v,for:%v", err, data) + resp.Message = "网络错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel + + selfrank := -1 + selfscore := int64(0) + vv, err := redishandler.GetRedisClient().ZRevRangewithIndex(redis.USER_SCORE_RANK, 0, 99) + if err == nil { + rank := 0 + for _, v := range vv { + rank++ + + rinfobyte, _ := v.([]byte) + logger.Info("HandlerQueryPlayerRank ,v=%v", string(rinfobyte)) + //ruid, _ := strconv.Atoi(string(rinfobyte)) + rindo, err := GetUserInfo(string(rinfobyte)) + if err == nil && rindo != nil { + var tmp Queryrankinfolist + tmp.UniqueId = string(rinfobyte) + tmp.Socre = rindo.Hfen + tmp.Nickname = rindo.Nickname + tmp.Headurl = rindo.HeadUrl + tmp.Rank = rank + + resp.Data.Ranklist = append(resp.Data.Ranklist, tmp) + } + + if string(rinfobyte) == uniqueuuid { + selfrank = rank + selfscore = rindo.Hfen + } + } + } else { + logger.Error("HandlerUpdateUserInfo redisfailed ") + resp.Code = 1 + resp.Message = "redisfailed" + break + } + + if selfrank == -1 { + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerQueryrankinfo data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + resp.Data.Selfsocre = uinfo.Hfen + resp.Data.Selfrank = 101 //表示100+ + } else { + resp.Data.Selfrank = selfrank + resp.Data.Selfsocre = selfscore + } + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + + func HandlerSavadata(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp SavadataResp diff --git a/src/common/redis/def.go b/src/common/redis/def.go index be80866..c7bf700 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -6,4 +6,5 @@ const ( USER_TASKINFO_LIST = "BALLBATTLE_USER_TASKINFO_LIST" //任务列表数据缓存 USER_ACHIEVEMENTINFO_LIST = "BALLBATTLE_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存 USER_SELFDATA_KEY = "BALLBATTLE_USER_SELFDATA_KEY" //玩家自定义数据 需要加上uuid与channel hset field为自定义的key value为保存的数据 + USER_SCORE_RANK = "BALLBATTLE_USER_SCORE_RANK" //玩家排行榜 ) -- libgit2 0.21.0