mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 14:54:01 +03:00
FILE / ScuroNeko/mtg
mtglib/internal/telegram/address_pool.go
Исходный файл и его история в репозитории.
42 lines
726 B
Go
42 lines
726 B
Go
package telegram
|
|
|
|
import "math/rand"
|
|
|
|
type addressPool struct {
|
|
v4 [][]tgAddr
|
|
v6 [][]tgAddr
|
|
}
|
|
|
|
func (a addressPool) isValidDC(dc int) bool {
|
|
return dc > 0 && dc <= len(a.v4) && dc <= len(a.v6)
|
|
}
|
|
|
|
func (a addressPool) getRandomDC() int {
|
|
return 1 + rand.Intn(len(a.v4))
|
|
}
|
|
|
|
func (a addressPool) getV4(dc int) []tgAddr {
|
|
return a.get(a.v4, dc-1)
|
|
}
|
|
|
|
func (a addressPool) getV6(dc int) []tgAddr {
|
|
return a.get(a.v6, dc-1)
|
|
}
|
|
|
|
func (a addressPool) get(addresses [][]tgAddr, dc int) []tgAddr {
|
|
if dc < 0 || dc >= len(addresses) {
|
|
return nil
|
|
}
|
|
|
|
rv := make([]tgAddr, len(addresses[dc]))
|
|
copy(rv, addresses[dc])
|
|
|
|
if len(rv) > 1 {
|
|
rand.Shuffle(len(rv), func(i, j int) {
|
|
rv[i], rv[j] = rv[j], rv[i]
|
|
})
|
|
}
|
|
|
|
return rv
|
|
}
|