Add on-the-fly rank calculation; change "subscribed" to "subscribed_to_scores"
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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{} | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							| @@ -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" | ||||
|   | ||||
							
								
								
									
										18
									
								
								vendor/zxq.co/x/getrank/getrank.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/zxq.co/x/getrank/getrank.go
									
									
									
									
										vendored
									
									
								
							| @@ -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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user