From 330b90b17263fdcdf74c9d873ba9bfced1d7953c Mon Sep 17 00:00:00 2001 From: Morgan Bazalgette Date: Tue, 18 Apr 2017 21:08:06 +0200 Subject: [PATCH] Add on-the-fly rank calculation; change "subscribed" to "subscribed_to_scores" --- app/v1/score.go | 13 +++++++++++++ app/v1/user_scores.go | 12 ++++++++++++ app/websockets/main_handler.go | 8 ++++---- app/websockets/scores.go | 14 +++++++++++++- vendor/vendor.json | 6 +++--- vendor/zxq.co/x/getrank/getrank.go | 18 +----------------- 6 files changed, 46 insertions(+), 25 deletions(-) diff --git a/app/v1/score.go b/app/v1/score.go index f10ed43..dc24da9 100644 --- a/app/v1/score.go +++ b/app/v1/score.go @@ -4,8 +4,11 @@ import ( "database/sql" "fmt" "strconv" + "strings" + "gopkg.in/thehowl/go-osuapi.v1" "zxq.co/ripple/rippleapi/common" + "zxq.co/x/getrank" ) // Score is a score done on Ripple. @@ -26,6 +29,7 @@ type Score struct { PlayMode int `json:"play_mode"` Accuracy float64 `json:"accuracy"` PP float32 `json:"pp"` + Rank string `json:"rank"` Completed int `json:"completed"` } @@ -112,6 +116,15 @@ WHERE scores.beatmap_md5 = ? AND scores.completed = '3' AND `+md.User.OnlyUserPu continue } s.User = u + s.Rank = strings.ToUpper(getrank.GetRank( + osuapi.Mode(s.PlayMode), + osuapi.Mods(s.Mods), + s.Accuracy, + s.Count300, + s.Count100, + s.Count50, + s.CountMiss, + )) r.Scores = append(r.Scores, s) } r.Code = 200 diff --git a/app/v1/user_scores.go b/app/v1/user_scores.go index e3710d6..a811862 100644 --- a/app/v1/user_scores.go +++ b/app/v1/user_scores.go @@ -2,8 +2,11 @@ package v1 import ( "fmt" + "strings" + "gopkg.in/thehowl/go-osuapi.v1" "zxq.co/ripple/rippleapi/common" + "zxq.co/x/getrank" ) type userScore struct { @@ -106,6 +109,15 @@ func scoresPuts(md common.MethodData, whereClause string, params ...interface{}) } b.Difficulty = b.Diff2.STD us.Beatmap = b + us.Rank = strings.ToUpper(getrank.GetRank( + osuapi.Mode(us.PlayMode), + osuapi.Mods(us.Mods), + us.Accuracy, + us.Count300, + us.Count100, + us.Count50, + us.CountMiss, + )) scores = append(scores, us) } r := userScoresResponse{} diff --git a/app/websockets/main_handler.go b/app/websockets/main_handler.go index 7cda534..74cb995 100644 --- a/app/websockets/main_handler.go +++ b/app/websockets/main_handler.go @@ -69,10 +69,10 @@ var messageHandler = map[string]func(c *conn, message incomingMessage){ // Server Message Types const ( - TypeConnected = "connected" - TypeInvalidMessage = "invalid_message_type" - TypeSubscribed = "subscribed" - TypeNewScore = "new_score" + TypeConnected = "connected" + TypeInvalidMessage = "invalid_message_type" + TypeSubscribedToScores = "subscribed_to_scores" + TypeNewScore = "new_score" ) // Client Message Types diff --git a/app/websockets/scores.go b/app/websockets/scores.go index 5517a63..c6af733 100644 --- a/app/websockets/scores.go +++ b/app/websockets/scores.go @@ -3,9 +3,12 @@ package websockets import ( "encoding/json" "fmt" + "strings" "sync" + "gopkg.in/thehowl/go-osuapi.v1" "zxq.co/ripple/rippleapi/app/v1" + "zxq.co/x/getrank" ) type subscribeScoresUser struct { @@ -40,7 +43,7 @@ func SubscribeScores(c *conn, message incomingMessage) { scoreSubscriptionsMtx.Unlock() - c.WriteJSON(TypeSubscribed, ssu) + c.WriteJSON(TypeSubscribedToScores, ssu) } type scoreSubscription struct { @@ -83,6 +86,15 @@ FROM scores WHERE id = ?`, id) fmt.Println(err) return } + s.Rank = strings.ToUpper(getrank.GetRank( + osuapi.Mode(s.PlayMode), + osuapi.Mods(s.Mods), + s.Accuracy, + s.Count300, + s.Count100, + s.Count50, + s.CountMiss, + )) scoreSubscriptionsMtx.RLock() cp := make([]scoreSubscription, len(scoreSubscriptions)) copy(cp, scoreSubscriptions) diff --git a/vendor/vendor.json b/vendor/vendor.json index 90cbde5..be64b14 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -201,10 +201,10 @@ "revisionTime": "2016-11-23T19:03:31Z" }, { - "checksumSHA1": "ItsAqvnH+Qa+ewmWbnSxT6EzSBk=", + "checksumSHA1": "9wL5kcCkaY+bXT/mEp+67/M+6rU=", "path": "zxq.co/x/getrank", - "revision": "e62f5bd6998d8d75fe3a2ff1becc9df06e88e3a6", - "revisionTime": "2016-05-28T18:25:35Z" + "revision": "97d2823cf77de9e0c95e89485df768518b6262a9", + "revisionTime": "2017-04-18T18:31:09Z" } ], "rootPath": "zxq.co/ripple/rippleapi" diff --git a/vendor/zxq.co/x/getrank/getrank.go b/vendor/zxq.co/x/getrank/getrank.go index 6ca531b..caecc79 100644 --- a/vendor/zxq.co/x/getrank/getrank.go +++ b/vendor/zxq.co/x/getrank/getrank.go @@ -13,7 +13,7 @@ func GetRank(gameMode osuapi.Mode, mods osuapi.Mods, acc float64, c300, c100, c5 total := c300 + c100 + c50 + cmiss switch gameMode { - case osuapi.ModeOsu: + case osuapi.ModeOsu, osuapi.ModeTaiko: var ( c300f = float64(c300) totalf = float64(total) @@ -33,22 +33,6 @@ func GetRank(gameMode osuapi.Mode, mods osuapi.Mods, acc float64, c300, c100, c5 } return "d" - case osuapi.ModeTaiko: - switch { - case acc == 100: - return s(true, mods) - case acc >= 95: - return s(false, mods) - case acc >= 90: - return "a" - case acc >= 80: - return "b" - // untested - case acc >= 70: - return "c" - } - return "d" - case osuapi.ModeCatchTheBeat: if acc == 100 { if mods&silver > 0 {