1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-07 12:43:32 +08:00

feature server quality test.

This commit is contained in:
Mrs4s 2020-11-17 18:50:28 +08:00
parent c0ec373de5
commit d1ae3f5ba5
2 changed files with 35 additions and 1 deletions

View File

@ -12,6 +12,7 @@ import (
"math"
"math/rand"
"net"
"sort"
"strconv"
"strings"
"sync"
@ -190,7 +191,6 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient {
IP: addr,
Port: 8080,
})
break // 第一个就好23333
}
cli.servers = append(hostAddrs, cli.servers...)
}
@ -204,6 +204,27 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient {
{IP: net.IP{42, 81, 172, 22}, Port: 80},
}
}
pings := make([]int64, len(cli.servers))
wg := sync.WaitGroup{}
wg.Add(len(cli.servers))
for i := range cli.servers {
go func(index int, w sync.WaitGroup) {
p, err := qualityTest(cli.servers[index])
if err != nil {
pings[index] = 9999
return
}
pings[index] = p
wg.Done()
}(i, wg)
}
wg.Wait()
sort.Slice(cli.servers, func(i, j int) bool {
return pings[i] < pings[j]
})
if len(cli.servers) > 3 {
cli.servers = cli.servers[0 : len(cli.servers)/2] // 保留ping值中位数以上的server
}
rand.Read(cli.RandomKey)
return cli
}

View File

@ -17,6 +17,7 @@ import (
"net"
"sort"
"strings"
"time"
)
type DeviceInfo struct {
@ -338,6 +339,18 @@ func getSSOAddress() ([]*net.TCPAddr, error) {
return adds, nil
}
func qualityTest(addr *net.TCPAddr) (int64, error) {
// see QualityTestManager
start := time.Now()
conn, err := net.DialTCP("tcp", nil, addr)
if err != nil {
return 0, err
}
_ = conn.Close()
end := time.Now()
return end.Sub(start).Milliseconds(), nil
}
func (c *QQClient) parsePrivateMessage(msg *msg.Message) *message.PrivateMessage {
friend := c.FindFriend(msg.Head.FromUin)
var sender *message.Sender