Library¶
For detailed information, check our reference. All examples below have imported the leaderboard module using:
import "github.com/topfreegames/podium/leaderboard"
Creating the client¶
const host = "localhost"
const port = 1234
const password = ""
const db = 0
const connectionTimeout = 200
leaderboards, err := leaderboard.NewClient(host, port, password, db, connectionTimeout)
Creating, updating or retrieving member scores¶
const leaderboardID = "lbID"
const playerID = "playerID"
const score = 100
const wantToKnowPreviousRank = false //do I want to receive also the previous rank on the user?
const scoreTTL = "100" //how many seconds my score will be kept on the leaderboard
member, err := leaderboards.SetMemberScore(context.Background(), leaderboardID, playerID, score, wantToKnowPreviousRank, scoreTTL)
if err != nil {
return err
}
playerPrinter := func(publicID string, score int64, rank int) {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", publicID, score, rank)
}
playerPrinter(member.PublicID, member.Score, member.Rank)
const order = "desc" //if set to asc, will treat the ranking with ascending scores (less is best)
const includeTTL = false //if set to true, will return the member's score expiration unix timestamp
member, err = leaderboards.GetMember(context.Background(), leaderboardID, playerID, order, includeTTL)
if err != nil {
return err
}
playerPrinter(member.PublicID, member.Score, member.Rank)
Setting and getting member scores in bulk¶
const leaderboardID = "lbID"
players := leaderboard.Members{
&leaderboard.Member{Score: 1000, PublicID: "playerA"},
&leaderboard.Member{Score: 2000, PublicID: "playerB"},
}
err := leaderboards.SetMembersScore(context.Background(), leaderboardID, players, false, "")
if err != nil {
return err
}
const order = "desc" //if set to asc, will treat the ranking with ascending scores (less is best)
const includeTTL = false //if set to true, will return the member's score expiration unix timestamp
members, err := leaderboards.GetMembers(context.Background(), leaderboardID, []string{"playerA", "playerB"}, order, includeTTL)
for _, member := range members {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", member.PublicID, member.Score, member.Rank)
}
Retrieving leaderboard leaders¶
const leaderboardID = "myleaderboardID"
players := leaderboard.Members{
&leaderboard.Member{Score: 10, PublicID: "player1"},
&leaderboard.Member{Score: 20, PublicID: "player2"},
}
err = leaderboards.SetMembersScore(context.Background(), leaderboardID, players, false, "")
if err != nil {
log.Fatalf("leaderboards.SetMembersScore failed: %v", err)
}
const pageSize = 10
const pageIdx = 1 //starts at 1
leaders, err := leaderboards.GetLeaders(context.Background(), leaderboardID, pageSize, pageIdx, "desc")
if err != nil {
log.Fatalf("leaderboards.GetLeaders failed: %v", err)
}
for _, player := range leaders {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", player.PublicID, player.Score, player.Rank)
}
Incrementing player scores¶
const leaderboardID = "lbID"
const playerID = "playerA"
const scoreIncrement = 500
const scoreTTL = ""
member, err := leaderboards.IncrementMemberScore(context.Background(), leaderboardID, playerID, scoreIncrement,
scoreTTL)
if err != nil {
return err
}
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", member.PublicID, member.Score, member.Rank)
Number of players on a leaderboard¶
const leaderboardID = "lbID"
count, err := leaderboards.TotalMembers(context.Background(), leaderboardID)
if err != nil {
return err
}
fmt.Printf("Total number of players on leaderboard %s: %d\n", leaderboardID, count)
Removing players from a leaderboard¶
const leaderboardID = "lbID"
const playerIdToRemove = "playerID"
err := leaderboards.RemoveMember(context.Background(), leaderboardID, playerIdToRemove) //removing a single player
if err != nil {
return err
}
playerIDsToRemove := make([]interface{}, 2)
playerIDsToRemove[0] = "playerA"
playerIDsToRemove[1] = "playerB"
err = leaderboards.RemoveMembers(context.Background(), leaderboardID, playerIDsToRemove) //removing multiple players
if err != nil {
return err
}
Total pages of a leaderboard¶
const leaderboardID = "lbID"
const pageSize = 10
pageCount, err := leaderboards.TotalPages(context.Background(), leaderboardID, pageSize)
if err != nil {
return err
}
fmt.Printf("total pages: %d\n", pageCount)
Getting players around a player¶
const leaderboardID = "lbID"
const pageSize = 10
const getLastIfNotFound = false //if set to true, will treat members not in ranking as being in last position
//if set to false, will return 404 when the member is not in the ranking
const order = "asc"
members, err := leaderboards.GetAroundMe(context.Background(), leaderboardID, pageSize, "playerID",
order, getLastIfNotFound)
if err != nil {
return err
}
for _, member := range members {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", member.PublicID, member.Score, member.Rank)
}
Getting players around a score¶
const leaderboardID = "lbID"
const pageSize = 10
const score = 1500
const order = "desc"
members, err := leaderboards.GetAroundScore(context.Background(), leaderboardID, pageSize, score, order)
if err != nil {
return err
}
for _, member := range members {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", member.PublicID, member.Score, member.Rank)
}
Top percentage of a leaderboard¶
const leaderboardID = "lbID"
const pageSize = 10
const percent = 10
const maxMembersToReturn = 100
const order = "asc"
top10, err := leaderboards.GetTopPercentage(context.Background(), leaderboardID, pageSize, percent,
maxMembersToReturn, order)
if err != nil {
return err
}
for _, member := range top10 {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", member.PublicID, member.Score, member.Rank)
}
Getting members in a range¶
const leaderboardID = "lbID"
const startOffset = 0
const endOffset = 10
const order = "asc"
members, err := leaderboards.GetMembersByRange(context.Background(), leaderboardID, startOffset, endOffset, order)
if err != nil {
return err
}
for _, member := range members {
fmt.Printf("Player(id: %s, score: %d rank: %d)\n", member.PublicID, member.Score, member.Rank)
}
Removing a leaderboard¶
const leaderboardID = "lbID"
err := leaderboards.RemoveLeaderboard(context.Background(), leaderboardID)