1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

support custom server.

This commit is contained in:
Mrs4s 2020-09-11 18:08:52 +08:00
parent 88de17435a
commit 71bc19cd42

View File

@ -32,6 +32,7 @@ import (
type QQClient struct { type QQClient struct {
Uin int64 Uin int64
PasswordMd5 [16]byte PasswordMd5 [16]byte
CustomServer *net.TCPAddr
Nickname string Nickname string
Age uint16 Age uint16
@ -44,6 +45,7 @@ type QQClient struct {
OutGoingPacketSessionId []byte OutGoingPacketSessionId []byte
RandomKey []byte RandomKey []byte
Conn net.Conn Conn net.Conn
ConnectTime time.Time
decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error) decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error)
handlers sync.Map handlers sync.Map
@ -862,6 +864,9 @@ var servers = []*net.TCPAddr{
func (c *QQClient) connect() error { func (c *QQClient) connect() error {
if c.server == nil { if c.server == nil {
if c.CustomServer != nil {
c.server = c.CustomServer
} else {
addrs, err := net.LookupIP("msfwifi.3g.qq.com") addrs, err := net.LookupIP("msfwifi.3g.qq.com")
if err == nil && len(addrs) > 0 { if err == nil && len(addrs) > 0 {
c.server = &net.TCPAddr{ c.server = &net.TCPAddr{
@ -872,11 +877,14 @@ func (c *QQClient) connect() error {
c.server = servers[rand.Intn(len(servers))] c.server = servers[rand.Intn(len(servers))]
} }
} }
}
c.Info("connect to server: %v", c.server.String()) c.Info("connect to server: %v", c.server.String())
conn, err := net.DialTCP("tcp", nil, c.server) conn, err := net.DialTCP("tcp", nil, c.server)
if err != nil { if err != nil {
c.CustomServer = nil
return err return err
} }
c.ConnectTime = time.Now()
c.Conn = conn c.Conn = conn
c.onlinePushCache = []int16{} c.onlinePushCache = []int16{}
return nil return nil
@ -961,6 +969,11 @@ func (c *QQClient) netLoop() {
l, err := reader.ReadInt32() l, err := reader.ReadInt32()
if err == io.EOF || err == io.ErrClosedPipe { if err == io.EOF || err == io.ErrClosedPipe {
c.Error("connection dropped by server: %v", err) c.Error("connection dropped by server: %v", err)
if c.ConnectTime.Sub(time.Now()) < time.Minute && c.CustomServer != nil {
c.Error("custom server error.")
c.CustomServer = nil
c.server = nil
}
err = c.connect() err = c.connect()
if err != nil { if err != nil {
break break