From ffa660e15e950426a2cb23227ec0bbb3ee0b7f6c Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Mon, 7 Sep 2020 14:46:18 +0800 Subject: [PATCH] 提交新的内容 --- src/HttpServer/logic/datadef.go | 38 ++++++++++++++++++++++++++++++++++++++ src/HttpServer/logic/function.go | 9 +++++++++ src/HttpServer/logic/httpserver.go | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------- src/HttpServer/logic/logic.go | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/common/redis/def.go | 11 ++++++----- 5 files changed, 250 insertions(+), 31 deletions(-) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 56871a8..071add2 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -285,6 +285,41 @@ type SavadataResp struct { Message string `json:"message"` } +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 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 GetdataReq struct { Gameid string `json:"gameid"` Channel string `json:"channel"` @@ -428,6 +463,9 @@ type UserData struct { FetchRedCnt int //领取红包次数计数 IsNew int //新手状态 FetchRdBagNum int //当天已领的红包 + Hfen int64 //当日最高积分 用于计算排行榜 + Nickname string //逆臣 + HeadUrl string //头像 WithDraw WithDrawInfo //提现记录信息 //SpecialWithDraw WithDrawInfo //活跃提现记录信息 Task TaskInfo //玩家任务完成相关信息 diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 98a0b2f..7d1d6e8 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -856,6 +856,14 @@ func (u *UserData) CalcTotalCnt() int { return usertime } +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 (u *UserData) HandlePassDay(uuid int, channel string) { isdiffday := false nowtime := time.Now() @@ -904,6 +912,7 @@ func (u *UserData) HandlePassDay(uuid int, channel string) { u.Task.PlaySmall = 0 u.ShakeTime = SHAKELIMIT u.FetchRdBagNum = 0 + u.Hfen = 0 //任务也需要处理 /*tasklist, err := GetTaskInfo(u.Userid, 1) diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index bae056f..02438cc 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,6 +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!") + } } @@ -41,33 +51,31 @@ func startServerHttpServe() { //http.HandleFunc("/catcafe/QueryAllAccount", QueryAllAccount) //查询所有账号的等级信息等数据 //------------------------------------------------------------- - http.HandleFunc("/ballbattle/test", Testapi) //测试接口 - http.HandleFunc("/ballbattle/addcoin", Addcoin) //测试接口 - http.HandleFunc("/ballbattle/clear", ClearData) //清除账号 + http.HandleFunc("/sixstar/test", Testapi) //测试接口 + http.HandleFunc("/sixstar/addcoin", Addcoin) //测试接口 + http.HandleFunc("/sixstar/clear", ClearData) //清除账号 //---------------------------------------------------------------------------------------- - http.HandleFunc("/ballbattle/login", UserLogin) //登录 - http.HandleFunc("/ballbattle/getuserdata", Getuserdata) //获取玩家数据 - http.HandleFunc("/ballbattle/watchads", Watchads) //观看激励视频 - http.HandleFunc("/ballbattle/queryguaninfo", Queryguaninfo) //获取存钱罐数据 - http.HandleFunc("/ballbattle/getguangold", Getguangold) //获取金币到存钱罐 - http.HandleFunc("/ballbattle/drawguangold", Drawguangold) //提取存钱罐的金币到个人钱包 - http.HandleFunc("/ballbattle/querdrawinfo", Querdrawinfo) //获取提现档位信息接口 - http.HandleFunc("/ballbattle/getcash", Getcash) //提现 - http.HandleFunc("/ballbattle/getcashrecord", Getcashrecord) //提现记录列表 - http.HandleFunc("/ballbattle/onlinentf", Onlinentf) //在线通知 - http.HandleFunc("/ballbattle/updatetaskandachieve", Updatetaskandachieve) //上报任务事件进度 - http.HandleFunc("/ballbattle/querytaskinfo", Querytaskinfo) //拉取任务或者成就列表 - http.HandleFunc("/ballbattle/gettaskreward", Gettaskreward) //领取任务或者成就奖励 - http.HandleFunc("/ballbattle/getnewlevelreward", Getnewlevelreward) //领取任务或者成就奖励 - http.HandleFunc("/ballbattle/querysigndata", Querysigndata) //获取签到数据 - http.HandleFunc("/ballbattle/usersign", Usersign) //玩家签到 - http.HandleFunc("/ballbattle/fetchredbag", Fetchredbag) //领取红包 - http.HandleFunc("/ballbattle/savadata", Savadata) //保存数据 - http.HandleFunc("/ballbattle/getdata", Getdata) //获取数据 - // - http.HandleFunc("/ballbattle/readNumUpload", ReadNumUpload) //阅读量上报 - http.HandleFunc("/ballbattle/queryreadgold", QueryReadGold) //获取微转发金币数 - http.HandleFunc("/ballbattle/fetchreadgold", Fetchreadgold) //领取微转发金币数 + http.HandleFunc("/sixstar/login", UserLogin) //登录 + http.HandleFunc("/sixstar/getuserdata", Getuserdata) //获取玩家数据 + http.HandleFunc("/sixstar/watchads", Watchads) //观看激励视频 + http.HandleFunc("/sixstar/queryguaninfo", Queryguaninfo) //获取存钱罐数据 + http.HandleFunc("/sixstar/getguangold", Getguangold) //获取金币到存钱罐 + http.HandleFunc("/sixstar/drawguangold", Drawguangold) //提取存钱罐的金币到个人钱包 + http.HandleFunc("/sixstar/querdrawinfo", Querdrawinfo) //获取提现档位信息接口 + http.HandleFunc("/sixstar/getcash", Getcash) //提现 + http.HandleFunc("/sixstar/getcashrecord", Getcashrecord) //提现记录列表 + http.HandleFunc("/sixstar/onlinentf", Onlinentf) //在线通知 + http.HandleFunc("/sixstar/updatetaskandachieve", Updatetaskandachieve) //上报任务事件进度 + http.HandleFunc("/sixstar/querytaskinfo", Querytaskinfo) //拉取任务或者成就列表 + http.HandleFunc("/sixstar/gettaskreward", Gettaskreward) //领取任务或者成就奖励 + http.HandleFunc("/sixstar/getnewlevelreward", Getnewlevelreward) //领取任务或者成就奖励 + http.HandleFunc("/sixstar/querysigndata", Querysigndata) //获取签到数据 + http.HandleFunc("/sixstar/usersign", Usersign) //玩家签到 + http.HandleFunc("/sixstar/fetchredbag", Fetchredbag) //领取红包 + http.HandleFunc("/sixstar/savadata", Savadata) //保存数据 + http.HandleFunc("/sixstar/getdata", Getdata) //获取数据 + http.HandleFunc("/sixstar/uploadscore", Uploadscore) //上报当天积分 + http.HandleFunc("/sixstar/queryrankinfo", Queryrankinfo) //获取排行榜信息 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) @@ -144,6 +152,48 @@ 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..2a1361d 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -525,6 +525,127 @@ func HandlerReadNumUpload(w http.ResponseWriter, data string) { 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 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 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..d4398ee 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -1,9 +1,10 @@ package redis const ( - USER_DATA_KEY = "BALLBATTLE_USER_DATA_KEY" //玩家数据 - USER_WITHDRAW_RECORDLIST = "BALLBATTLE_USER_WITHDRAW_RECORDLIST" //玩家提现记录 - 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_DATA_KEY = "SIXSTAR_USER_DATA_KEY" //玩家数据 + USER_WITHDRAW_RECORDLIST = "SIXSTAR_USER_WITHDRAW_RECORDLIST" //玩家提现记录 + USER_TASKINFO_LIST = "SIXSTARE_USER_TASKINFO_LIST" //任务列表数据缓存 + USER_ACHIEVEMENTINFO_LIST = "SIXSTAR_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存 + USER_SELFDATA_KEY = "SIXSTAR_USER_SELFDATA_KEY" //玩家自定义数据 需要加上uuid与channel hset field为自定义的key value为保存的数据 + USER_SCORE_RANK = "SIXSTAR_USER_SCORE_RANK" //玩家排行榜 ) -- libgit2 0.21.0