Documentation
¶
Index ¶
Constants ¶
View Source
const ( TeamQueue = "TeamQueue" NormalQueue = "NormalQueue" )
View Source
const ( CancelMatchByServerStop = "Failed to match. Please try again later" CancelMatchByTimeout = "No team found, please try again later" )
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Args ¶
type Args struct { // Player rating, which is a direct measure of a player's ability. MMR float64 `json:"mmr"` // Rating deviation, which is a measure of the accuracy of the rating. // If you're a new player or haven't played in a while, your RD will be high, indicating that your true skill may be far from your rating. // If you frequently play, your RD will decrease, indicating that your rating is getting closer to your true skill. RD float64 `json:"rd"` // Volatility; this is a measure of the fluctuation in a player's rating. V float64 `json:"v"` }
Args encapsulates the three core parameters of the Glicko-2 algorithm.
type Group ¶
type Group interface { // GetID returns the team ID GetID() string // QueueKey returns the unique match queue ID QueueKey() string // GetPlayers returns the list of players in the team GetPlayers() []Player // PlayerCount returns the number of players in the team PlayerCount() int // GetMMR returns the MMR value of the team GetMMR() float64 // GetStar returns the team's rank value GetStar() int // GetState returns the team's state GetState() GroupState SetState(state GroupState) // GetStartMatchTimeSec returns the start time of the match, which is the earliest start time of the player GetStartMatchTimeSec() int64 SetStartMatchTimeSec(t int64) // GetFinishMatchTimeSec returns the end time of the match GetFinishMatchTimeSec() int64 SetFinishMatchTimeSec(t int64) // Type returns the team type Type() GroupType // CanFillAi returns true if the team will be filled with AI and the second return value is the AI team to be filled CanFillAi() bool // ForceCancelMatch is the logic for handling player cancellation when forced to exit ForceCancelMatch(reason string, waitSec int64) // IsNewer checks if the team is identified as a newcomer IsNewer() bool }
Group represents a team, players can form teams on their own or a single player will be assigned a team when they start matching, the team before and after the match will not be broken up.
type GroupState ¶
type GroupState uint8
const ( GroupStateUnready GroupState = iota // Unready state GroupStateQueuing // Matching state GroupStateMatched // Matched state )
type GroupType ¶
type GroupType uint8
GroupType is the type of team
const ( // GroupTypeNotTeam represents no team GroupTypeNotTeam GroupType = iota // GroupTypeNormalTeam represents a normal team GroupTypeNormalTeam // GroupTypeUnfriendlyTeam represents an unfriendly team GroupTypeUnfriendlyTeam // GroupTypeMaliciousTeam represents a malicious team GroupTypeMaliciousTeam )
type MatchRange ¶
type MatchRange struct { // Maximum match duration in seconds (exclusive) MaxMatchSec int64 `json:"max_match_sec" yaml:"max_match_sec"` // Allowed MMR difference percentage (0-100) (inclusive), 0 means no restriction MMRGapPercent int `json:"mmr_gap_percent" yaml:"mmr_gap_percent"` // Whether to join full teams CanJoinTeam bool `json:"can_join_team" yaml:"can_join_team"` // Allowed rank difference (inclusive), 0 means no restriction StarGap int `json:"star_gap" yaml:"star_gap"` }
type Matcher ¶
type Matcher struct { NormalQueue *Queue TeamQueue *Queue // contains filtered or unexported fields }
func NewMatcher ¶
func NewMatcher( errChan chan error, roomChan chan Room, getQueueArgs func() *QueueArgs, newTeamFunc func(group Group) Team, newRoomFunc func(team Team) Room, newRoomWithAiFunc func(team Team) Room, ) (*Matcher, error)
NewMatcher is a matcher, which contains both normal queue and team queue.
type Player ¶
type Player interface { // Player ID GetID() string // Is the player an AI? IsAi() bool // Get the player's MMR value GetMMR() float64 // Get the player's rank value GetStar() int // Get the time the player started matching GetStartMatchTimeSec() int64 SetStartMatchTimeSec(t int64) // Get the time the player finished matching GetFinishMatchTimeSec() int64 SetFinishMatchTimeSec(t int64) // Get the player's rank within their team after the match GetRank() int }
Player is an abstract representation of a player
type Queue ¶
type Queue struct { Name string // Queue name Groups map[string]Group // Groups in the queue, all operations on Groups need to be locked FullTeam []Team // Fully formed temporary teams during matching, called only in Match, not thread-safe TmpTeam []Team // Temporary teams during matching, called only in Match, not thread-safe TmpRoom []Room // Temporary rooms during matching, called only in Match, not thread-safe *QueueArgs // Queue parameters // contains filtered or unexported fields }
Queue is a match queue
func (*Queue) GetAndClearGroups ¶
GetAndClearGroups retrieves and clears the current groups list
func (*Queue) SortedGroups ¶
type QueueArgs ¶
type QueueArgs struct { MatchTimeoutSec int64 `json:"match_timeout_sec" yaml:"match_timeout_sec"` // Match timeout duration TeamPlayerLimit int `json:"team_player_limit" yaml:"team_player_limit"` // Team player limit RoomTeamLimit int `json:"room_team_limit" yaml:"room_team_limit"` // Room team limit // Whether beginners can only match with beginners NewerWithNewer bool `json:"newer_with_newer" yaml:"newer_with_newer"` // Minimum MMR variance for unfriendly teams UnfriendlyTeamMMRVarianceMin int `json:"unfriendly_team_mmr_variance_min" yaml:"unfriendly_team_mmr_variance_min"` // Minimum MMR variance for malicious teams MaliciousTeamMMRVarianceMin int `json:"malicious_team_mmr_variance_min" yaml:"malicious_team_mmr_variance_min"` // Matching duration for normal teams in exclusive queue NormalTeamWaitTimeSec int64 `json:"normal_team_wait_time_sec" yaml:"normal_team_wait_time_sec"` // Matching duration for unfriendly teams in exclusive queue UnfriendlyTeamWaitTimeSec int64 `json:"unfriendly_team_wait_time_sec" yaml:"unfriendly_team_wait_time_sec"` // Matching duration for malicious teams in exclusive queue MaliciousTeamWaitTimeSec int64 `json:"malicious_team_wait_time_sec" yaml:"malicious_team_wait_time_sec"` // Match range strategies MatchRanges []MatchRange `json:"match_ranges" yaml:"match_ranges"` }
type Room ¶
type Room interface { // Get the teams in the room GetTeams() []Team // Add a team to the room AddTeam(t Team) // Get the MMR (Match Market Rating) value of the room GetMMR() float64 // Get the start time of the match, which is the earliest start time of the player GetStartMatchTimeSec() int64 // Check if the room contains an AI HasAi() bool }
Room is an abstract representation of a room, composed of multiple teams
type Team ¶
type Team interface { // Get the list of groups GetGroups() []Group // Add a group to the team AddGroup(group Group) // Get the number of players in the team PlayerCount() int // Get the MMR (Match Market Rating) value of the team GetMMR() float64 // Get the rank value of the team GetStar() int // Get the start time of the match, which is the earliest start time of the player GetStartMatchTimeSec() int64 // Get the end time of the match GetFinishMatchTimeSec() int64 SetFinishMatchTimeSec(t int64) // Check if the team is an AI team IsAi() bool // Check if the team can be filled with AI CanFillAi() bool // Check if the team is full IsFull(teamPlayerLimit int) bool // Check if the team is considered a newcomer IsNewer() bool }
Team is an abstract representation of a team, composed of 1-n Groups
Click to show internal directories.
Click to hide internal directories.