diff --git a/client/decoders.go b/client/decoders.go index 525375c4..e427ef78 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -165,7 +165,7 @@ func decodeLoginResponse(c *QQClient, _ uint16, payload []byte) (interface{}, er } // StatSvc.register -func decodeClientRegisterResponse(_ *QQClient, _ uint16, payload []byte) (interface{}, error) { +func decodeClientRegisterResponse(c *QQClient, _ uint16, payload []byte) (interface{}, error) { request := &jce.RequestPacket{} request.ReadFrom(jce.NewJceReader(payload)) data := &jce.RequestDataVersion2{} @@ -173,6 +173,9 @@ func decodeClientRegisterResponse(_ *QQClient, _ uint16, payload []byte) (interf svcRsp := &jce.SvcRespRegister{} svcRsp.ReadFrom(jce.NewJceReader(data.Map["SvcRespRegister"]["QQService.SvcRespRegister"][1:])) if svcRsp.Result != "" || svcRsp.Status != 11 { + if svcRsp.Result != "" { + c.Error("reg error: %v", svcRsp.Result) + } return nil, errors.New("reg failed") } return nil, nil @@ -221,12 +224,17 @@ func decodePushReqPacket(c *QQClient, _ uint16, payload []byte) (interface{}, er Port: int(s.Port), }) } - c.SetCustomServer(adds) + f := true for _, e := range c.eventHandlers.serverUpdatedHandlers { cover(func() { - e(c, &ServerUpdatedEvent{Servers: servers}) + if !e(c, &ServerUpdatedEvent{Servers: servers}) { + f = false + } }) } + if !f { + c.SetCustomServer(adds) + } return nil, nil } } diff --git a/client/events.go b/client/events.go index 6f286e51..83a23c0d 100644 --- a/client/events.go +++ b/client/events.go @@ -25,7 +25,7 @@ type eventHandlers struct { newFriendHandlers []func(*QQClient, *NewFriendEvent) disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent) logHandlers []func(*QQClient, *LogEvent) - serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent) + serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent) bool notifyHandlers []func(*QQClient, IGroupNotifyEvent) offlineFileHandlers []func(*QQClient, *OfflineFileEvent) groupMessageReceiptHandlers sync.Map @@ -107,7 +107,7 @@ func (c *QQClient) OnDisconnected(f func(*QQClient, *ClientDisconnectedEvent)) { c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f) } -func (c *QQClient) OnServerUpdated(f func(*QQClient, *ServerUpdatedEvent)) { +func (c *QQClient) OnServerUpdated(f func(*QQClient, *ServerUpdatedEvent) bool) { c.eventHandlers.serverUpdatedHandlers = append(c.eventHandlers.serverUpdatedHandlers, f) }