Commit 10edf9c6 by xuzhenhao

增加了返回个人排行信息的时候可以看到前后玩家信息的功能

1 parent 22da6d98
Showing with 135 additions and 11 deletions
...@@ -50,6 +50,7 @@ func main() { ...@@ -50,6 +50,7 @@ func main() {
sdkhttp.RegisterFunc("RankList", RankList) sdkhttp.RegisterFunc("RankList", RankList)
sdkhttp.RegisterFunc("SubmitScore", SubmitScore) sdkhttp.RegisterFunc("SubmitScore", SubmitScore)
sdkhttp.RegisterFunc("SingleRank", SingleRank) sdkhttp.RegisterFunc("SingleRank", SingleRank)
sdkhttp.RegisterFunc("SingleRangeRank", SingleRangeRank)
// web // web
sdkhttp.RegisterFunc("CreateRank", CreateRank) sdkhttp.RegisterFunc("CreateRank", CreateRank)
...@@ -137,12 +138,45 @@ func SingleRank(c *gin.Context) { ...@@ -137,12 +138,45 @@ func SingleRank(c *gin.Context) {
gtid := c.Query("gtid") gtid := c.Query("gtid")
gid := c.Query("gid") gid := c.Query("gid")
toptype := c.Query("toptype") toptype := c.Query("toptype")
log.Printf("SingleRank uid[%s] gtid[%s] gid[%s] toptype[%s]\n", uid, gtid, gid, toptype)
igt := sdkredis.IceGameTopRedisGetSingleUserRankInfo(uid, gtid, gid, toptype)
fmt.Println(igt)
msg := new(Msg)
if igt == nil {
err := errors.New("gametop name or game name not exist")
msg.ErrMsg = err.Error()
msg.ErrCode = "105101"
} else {
msg.ErrCode = "0"
msg.ErrMsg = "success"
msg.Obj = igt
}
jsonByte, jsonerr := json.Marshal(msg)
if jsonerr != nil {
log.Printf("marshal err[%v]\n", jsonerr)
}
jsonStr := string(jsonByte)
c.String(http.StatusOK, jsonStr)
}
/**
* 获得单个用户以及前后用户的排行信息
*/
func SingleRangeRank(c *gin.Context) {
uid := c.Query("uid")
gtid := c.Query("gtid")
gid := c.Query("gid")
toptype := c.Query("toptype")
prerank := c.Query("prerank") prerank := c.Query("prerank")
nextrank := c.Query("nextrank") nextrank := c.Query("nextrank")
log.Printf("SingleRank uid[%s] gtid[%s] gid[%s] toptype[%s] prerank[%s] nextrank[%s]\n", uid, gtid, gid, toptype, prerank, nextrank) log.Printf("SingleRank uid[%s] gtid[%s] gid[%s] toptype[%s] prerank[%s] nextrank[%s]\n", uid, gtid, gid, toptype, prerank, nextrank)
igt := sdkredis.IceGameTopRedisGetSingleUserRankInfo(uid, gtid, gid, toptype, prerank, nextrank) igt := sdkredis.IceGameTopRedisGetSingleUserRangeRankInfo(uid, gtid, gid, toptype, prerank, nextrank)
fmt.Println(igt) fmt.Println(igt)
infoList := make(map[string]interface{}, 0)
infoList["icesimbaRuoLianWangGameUserGameTopRankInfoList"] = igt
msg := new(Msg) msg := new(Msg)
if igt == nil { if igt == nil {
err := errors.New("gametop name or game name not exist") err := errors.New("gametop name or game name not exist")
...@@ -151,7 +185,7 @@ func SingleRank(c *gin.Context) { ...@@ -151,7 +185,7 @@ func SingleRank(c *gin.Context) {
} else { } else {
msg.ErrCode = "0" msg.ErrCode = "0"
msg.ErrMsg = "success" msg.ErrMsg = "success"
msg.Obj = igt msg.Obj = infoList
} }
jsonByte, jsonerr := json.Marshal(msg) jsonByte, jsonerr := json.Marshal(msg)
if jsonerr != nil { if jsonerr != nil {
......
...@@ -269,7 +269,98 @@ func IceGametopRedisSubmitScore(uid string, gtid string, gid string, score strin ...@@ -269,7 +269,98 @@ func IceGametopRedisSubmitScore(uid string, gtid string, gid string, score strin
/** /**
* 获取单个用户的排名信息 * 获取单个用户的排名信息
*/ */
func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, toptype string, prerank string, nextrank string) (igt *IGT) { func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, toptype string) (igt *IGT) {
// 连接redis
redisConn := RedisClient.GetConn()
defer RedisClose(redisConn)
// 获取当前排行榜是正序还是反序/
var sorceorder string
iceGameTopSet, _, err := sdkdb.IceGameTopSetQueryOne(gtid, gid, toptype)
if err == nil {
if iceGameTopSet != nil {
sorceorder = iceGameTopSet.SORCEORDER
toptype = iceGameTopSet.TOPTYPE //不需要对传入的toptype做判断,根据gid和gtid就可以获得排行
} else {
return
}
} else {
return
}
// 排序
var strList []string
var sorterr error
if sorceorder == "0" {
strList, sorterr = RedisSort(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, prerankIndex, nextrankIndex)
} else if sorceorder == "1" {
strList, sorterr = RedisReverseSort(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, prerankIndex, nextrankIndex)
}
if sorterr != nil {
log.Println("RedisSort err[%v]", sorterr)
return
} else if len(strList) == 0 {
log.Println("rank has no data")
}
igt = new(IGT)
index := 1
var resultstr string
var valuecount = 2
_, err = RedisDBSelect(redisConn, 4)
if err != nil {
log.Printf("select db err:", err)
}
for i := 0; i < len(strList); i += 2 {
startIndex := strings.Index(strList[i], "uid:") + 4
endIndex := strings.Index(strList[i], ":gtid")
currUID := common.Substr2(strList[i], startIndex, endIndex)
if currUID == uid {
igt.UID = uid
igt.RankIndex = index
igt.MyKey = strList[i+1]
//查询储存昵称以及头像url的redis
var err error
resultstr, err = RedisGetKV(redisConn, "GUID:"+igt.UID)
if err != nil {
log.Println("get redis err:", err)
}
r, err := regexp.Compile(`\|([^\|])*\|`)
if err != nil {
log.Println("err:", err)
}
// 使用正则匹配需要的值
result := r.FindAllString(resultstr, valuecount)
//去除用来匹配的特殊字符“|“
if result != nil {
for key, value := range result {
value = value[1 : len(value)-1]
log.Println(value)
result[key] = value
}
//result 为切片,储存了所有匹配到的特定值
igt.NickName = result[0] //第一个为昵称
igt.HeadPortraitURL = result[1] //第二个为头像url
}
}
index++
}
_, err = RedisDBSelect(redisConn, 2)
if err != nil {
log.Printf("select db err:", err)
}
return
}
/**
* 获取单个用户以及前后用户的排名信息
*/
func IceGameTopRedisGetSingleUserRangeRankInfo(uid string, gtid string, gid string, toptype string, prerank string, nextrank string) (igt []*IGT) {
// 连接redis // 连接redis
redisConn := RedisClient.GetConn() redisConn := RedisClient.GetConn()
defer RedisClose(redisConn) defer RedisClose(redisConn)
...@@ -344,7 +435,7 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t ...@@ -344,7 +435,7 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t
log.Println("rank has no data") log.Println("rank has no data")
} }
igt = new(IGT) igt = make([]IGT, len(strList)/2)
index := 1 index := 1
var resultstr string var resultstr string
var valuecount = 2 var valuecount = 2
...@@ -357,12 +448,12 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t ...@@ -357,12 +448,12 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t
// endIndex := strings.Index(strList[i], ":gtid") // endIndex := strings.Index(strList[i], ":gtid")
// currUID := common.Substr2(strList[i], startIndex, endIndex) // currUID := common.Substr2(strList[i], startIndex, endIndex)
igt.UID = uid igt[i/2].UID = uid
igt.RankIndex = index igt[i/2].RankIndex = index
igt.MyKey = strList[i+1] igt[i/2].MyKey = strList[i+1]
//查询储存昵称以及头像url的redis //查询储存昵称以及头像url的redis
var err error var err error
resultstr, err = RedisGetKV(redisConn, "GUID:"+igt.UID) resultstr, err = RedisGetKV(redisConn, "GUID:"+igt[i/2].UID)
if err != nil { if err != nil {
log.Println("get redis err:", err) log.Println("get redis err:", err)
} }
...@@ -381,8 +472,8 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t ...@@ -381,8 +472,8 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t
result[key] = value result[key] = value
} }
//result 为切片,储存了所有匹配到的特定值 //result 为切片,储存了所有匹配到的特定值
igt.NickName = result[0] //第一个为昵称 igt[i/2].NickName = result[0] //第一个为昵称
igt.HeadPortraitURL = result[1] //第二个为头像url igt[i/2].HeadPortraitURL = result[1] //第二个为头像url
} }
index++ index++
...@@ -394,7 +485,6 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t ...@@ -394,7 +485,6 @@ func IceGameTopRedisGetSingleUserRankInfo(uid string, gtid string, gid string, t
return return
} }
func IceGameTopRedisCreateRank(gtid string, gid string, toptype string, gtname string, sorcetype string, sorcesub string, sorceorder string) error { func IceGameTopRedisCreateRank(gtid string, gid string, toptype string, gtname string, sorcetype string, sorcesub string, sorceorder string) error {
// 连接redis // 连接redis
redisConn := RedisClient.GetConn() redisConn := RedisClient.GetConn()
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!