本文整理汇总了Golang中github.com/ginuerzh/sports/models.RedisLogger.UserGameRanks方法的典型用法代码示例。如果您正苦于以下问题:Golang RedisLogger.UserGameRanks方法的具体用法?Golang RedisLogger.UserGameRanks怎么用?Golang RedisLogger.UserGameRanks使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/ginuerzh/sports/models.RedisLogger
的用法示例。
在下文中一共展示了RedisLogger.UserGameRanks方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: gameResultHandler
func gameResultHandler(r *http.Request, w http.ResponseWriter,
redis *models.RedisLogger, user *models.Account, p Parameter) {
form := p.(gameResultForm)
var respData struct {
Total []*leaderboardResp `json:"total_list"`
Friends []*leaderboardResp `json:"friends_list"`
Score int `json:"total_score"`
Percent int `json:"percent"`
PerFriend int `json:"percentFri"`
}
if form.Count == 0 {
form.Count = 3
}
gt := gameType(form.Type)
if scores := redis.UserGameScores(gt, user.Id); len(scores) == 1 {
respData.Score = int(scores[0])
}
redis.SetGameScore(gt, user.Id, form.Score) // current score
kvs := redis.GameScores(gt, 0, form.Count)
var ids []string
for _, kv := range kvs {
ids = append(ids, kv.K)
}
ranks := redis.UserGameRanks(gt, user.Id)
redis.SetGameScore(gt, user.Id, respData.Score) // recover max score
n := redis.GameUserCount(gt) - 1
//log.Println(ranks, n)
if len(ranks) == 1 && n > 0 && form.Score > 0 {
respData.Percent = int(float64(n-ranks[0]) / float64(n) * 100.0)
}
//log.Println(ids)
users, _ := models.FindUsersByIds(1, ids...)
index := 0
for _, kv := range kvs {
for i, _ := range users {
if users[i].Id == kv.K {
respData.Total = append(respData.Total, &leaderboardResp{
Userid: users[i].Id,
Score: kv.V,
Rank: index + 1,
Level: users[i].Level(),
Profile: users[i].Profile,
Nickname: users[i].Nickname,
Gender: users[i].Gender,
LastLog: users[i].LastGameTime(gt).Unix(),
Birth: users[i].Birth,
Location: users[i].Loc,
Phone: users[i].Phone,
Actor: users[i].Actor,
})
index++
break
}
}
}
ids = redis.Friends(models.RelFriend, user.Id)
if len(ids) > 0 {
total := len(ids)
ids = append(ids, user.Id)
scores := redis.UserGameScores(gt, ids...)
if len(scores) != len(ids) {
scores = make([]int64, total)
}
kvs = make([]models.KV, total+1)
for i, _ := range ids {
kvs[i].K = ids[i]
kvs[i].V = scores[i]
if ids[i] == user.Id {
kvs[i].V = int64(form.Score)
}
}
sort.Sort(sort.Reverse(models.KVSlice(kvs)))
lb := kvs
if len(kvs) > 3 {
kvs = kvs[0:3]
}
ids = []string{}
for _, kv := range kvs {
ids = append(ids, kv.K)
}
users, _ = models.FindUsersByIds(1, ids...)
index := 0
rank := 0
for i, _ := range lb {
if lb[i].K == user.Id {
rank = i
break
}
//.........这里部分代码省略.........