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:
parent
88de17435a
commit
71bc19cd42
@ -30,8 +30,9 @@ 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,21 +864,27 @@ var servers = []*net.TCPAddr{
|
|||||||
|
|
||||||
func (c *QQClient) connect() error {
|
func (c *QQClient) connect() error {
|
||||||
if c.server == nil {
|
if c.server == nil {
|
||||||
addrs, err := net.LookupIP("msfwifi.3g.qq.com")
|
if c.CustomServer != nil {
|
||||||
if err == nil && len(addrs) > 0 {
|
c.server = c.CustomServer
|
||||||
c.server = &net.TCPAddr{
|
|
||||||
IP: addrs[rand.Intn(len(addrs))],
|
|
||||||
Port: 8080,
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
c.server = servers[rand.Intn(len(servers))]
|
addrs, err := net.LookupIP("msfwifi.3g.qq.com")
|
||||||
|
if err == nil && len(addrs) > 0 {
|
||||||
|
c.server = &net.TCPAddr{
|
||||||
|
IP: addrs[rand.Intn(len(addrs))],
|
||||||
|
Port: 8080,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user