diff --git a/client/client.go b/client/client.go index de7ebeae..711866fc 100644 --- a/client/client.go +++ b/client/client.go @@ -50,7 +50,7 @@ type QQClient struct { // protocol public field SequenceId atomic.Int32 SessionId []byte - TCP *network.TCPListener // todo: combine other protocol state into one struct + TCP *network.TCPClient // todo: combine other protocol state into one struct ConnectTime time.Time transport *network.Transport @@ -190,7 +190,7 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient { Uin: uin, PasswordMd5: passwordMd5, AllowSlider: true, - TCP: &network.TCPListener{}, + TCP: &network.TCPClient{}, sig: &auth.SigInfo{ OutPacketSessionID: []byte{0x02, 0xB0, 0x5B, 0x8B}, }, diff --git a/client/internal/network/conn.go b/client/internal/network/conn.go index 682b3034..4ae7740d 100644 --- a/client/internal/network/conn.go +++ b/client/internal/network/conn.go @@ -9,32 +9,32 @@ import ( "github.com/pkg/errors" ) -type TCPListener struct { +type TCPClient struct { lock sync.RWMutex conn net.Conn connected bool - plannedDisconnect func(*TCPListener) - unexpectedDisconnect func(*TCPListener, error) + plannedDisconnect func(*TCPClient) + unexpectedDisconnect func(*TCPClient, error) } var ErrConnectionClosed = errors.New("connection closed") // PlannedDisconnect 预料中的断开连接 // 如调用 Close() Connect() -func (t *TCPListener) PlannedDisconnect(f func(*TCPListener)) { +func (t *TCPClient) PlannedDisconnect(f func(*TCPClient)) { t.lock.Lock() defer t.lock.Unlock() t.plannedDisconnect = f } // UnexpectedDisconnect 未预料的断开连接 -func (t *TCPListener) UnexpectedDisconnect(f func(*TCPListener, error)) { +func (t *TCPClient) UnexpectedDisconnect(f func(*TCPClient, error)) { t.lock.Lock() defer t.lock.Unlock() t.unexpectedDisconnect = f } -func (t *TCPListener) Connect(addr string) error { +func (t *TCPClient) Connect(addr string) error { t.Close() conn, err := net.Dial("tcp", addr) if err != nil { @@ -47,7 +47,7 @@ func (t *TCPListener) Connect(addr string) error { return nil } -func (t *TCPListener) Write(buf []byte) error { +func (t *TCPClient) Write(buf []byte) error { if conn := t.getConn(); conn != nil { _, err := conn.Write(buf) if err != nil { @@ -60,7 +60,7 @@ func (t *TCPListener) Write(buf []byte) error { return ErrConnectionClosed } -func (t *TCPListener) ReadBytes(len int) ([]byte, error) { +func (t *TCPClient) ReadBytes(len int) ([]byte, error) { buf := make([]byte, len) if conn := t.getConn(); conn != nil { _, err := io.ReadFull(conn, buf) @@ -75,7 +75,7 @@ func (t *TCPListener) ReadBytes(len int) ([]byte, error) { return nil, ErrConnectionClosed } -func (t *TCPListener) ReadInt32() (int32, error) { +func (t *TCPClient) ReadInt32() (int32, error) { b, err := t.ReadBytes(4) if err != nil { return 0, err @@ -83,17 +83,17 @@ func (t *TCPListener) ReadInt32() (int32, error) { return int32(binary.BigEndian.Uint32(b)), nil } -func (t *TCPListener) Close() { +func (t *TCPClient) Close() { t.close() t.invokePlannedDisconnect() } -func (t *TCPListener) unexpectedClose(err error) { +func (t *TCPClient) unexpectedClose(err error) { t.close() t.invokeUnexpectedDisconnect(err) } -func (t *TCPListener) close() { +func (t *TCPClient) close() { t.lock.Lock() defer t.lock.Unlock() if t.conn != nil { @@ -102,7 +102,7 @@ func (t *TCPListener) close() { } } -func (t *TCPListener) invokePlannedDisconnect() { +func (t *TCPClient) invokePlannedDisconnect() { t.lock.RLock() defer t.lock.RUnlock() if t.plannedDisconnect != nil && t.connected { @@ -111,7 +111,7 @@ func (t *TCPListener) invokePlannedDisconnect() { } } -func (t *TCPListener) invokeUnexpectedDisconnect(err error) { +func (t *TCPClient) invokeUnexpectedDisconnect(err error) { t.lock.RLock() defer t.lock.RUnlock() if t.unexpectedDisconnect != nil && t.connected { @@ -120,7 +120,7 @@ func (t *TCPListener) invokeUnexpectedDisconnect(err error) { } } -func (t *TCPListener) getConn() net.Conn { +func (t *TCPClient) getConn() net.Conn { t.lock.RLock() defer t.lock.RUnlock() return t.conn diff --git a/client/internal/network/transport.go b/client/internal/network/transport.go index e2286e33..50bf4c0b 100644 --- a/client/internal/network/transport.go +++ b/client/internal/network/transport.go @@ -16,7 +16,7 @@ type Transport struct { Device *auth.Device // connection - // conn *TCPListener + // conn *TCPClient } func (t *Transport) packBody(req *Request, w *binary.Writer) { diff --git a/client/network.go b/client/network.go index 868ebd03..26e395c4 100644 --- a/client/network.go +++ b/client/network.go @@ -253,14 +253,14 @@ func (c *QQClient) sendAndWaitDynamic(seq uint16, pkt []byte) ([]byte, error) { } // plannedDisconnect 计划中断线事件 -func (c *QQClient) plannedDisconnect(_ *network.TCPListener) { +func (c *QQClient) plannedDisconnect(_ *network.TCPClient) { c.debug("planned disconnect.") c.stat.DisconnectTimes.Add(1) c.Online.Store(false) } // unexpectedDisconnect 非预期断线事件 -func (c *QQClient) unexpectedDisconnect(_ *network.TCPListener, e error) { +func (c *QQClient) unexpectedDisconnect(_ *network.TCPClient, e error) { c.error("unexpected disconnect: %v", e) c.stat.DisconnectTimes.Add(1) c.Online.Store(false)