1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

more debug.

This commit is contained in:
Mrs4s 2020-08-25 00:03:40 +08:00
parent 2c22d99708
commit a23475a1ed
7 changed files with 1246 additions and 1112 deletions

View File

@ -122,6 +122,7 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient {
"OnlinePush.PbPushTransMsg": decodeOnlinePushTransPacket,
"ConfigPushSvc.PushReq": decodePushReqPacket,
"MessageSvc.PbGetMsg": decodeMessageSvcPacket,
"MessageSvc.PbSendMsg": decodeMsgSendResponse,
"MessageSvc.PushForceOffline": decodeForceOfflinePacket,
"friendlist.getFriendGroupList": decodeFriendGroupListResponse,
"friendlist.GetTroopListReqV2": decodeGroupListResponse,
@ -812,6 +813,7 @@ func (c *QQClient) connect() error {
c.server = servers[rand.Intn(len(servers))]
}
}
c.Info("connect to server: %v", c.server.String())
conn, err := net.DialTCP("tcp", nil, c.server)
if err != nil {
return err
@ -884,7 +886,8 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) {
continue
}
c.handlers.Delete(seq)
println("Packet Timed out")
c.Error("packet timed out, seq: %v", seq)
//println("Packet Timed out")
return nil, errors.New("timeout")
}
}
@ -915,7 +918,8 @@ func (c *QQClient) netLoop() {
data, err := reader.ReadBytes(int(l) - 4)
pkt, err := packets.ParseIncomingPacket(data, c.sigInfo.d2Key)
if err != nil {
log.Println("parse incoming packet error: " + err.Error())
c.Error("parse incoming packer error: %v", err)
//log.Println("parse incoming packet error: " + err.Error())
continue
}
payload := pkt.Payload
@ -926,11 +930,12 @@ func (c *QQClient) netLoop() {
}
}
retry = 0
//fmt.Println(pkt.CommandName, pkt.SequenceId)
c.Debug("rev pkt: %v seq: %v", pkt.CommandName, pkt.SequenceId)
go func() {
defer func() {
if pan := recover(); pan != nil {
fmt.Println("panic on decoder:", pan)
c.Error("panic on decoder: %v", pan)
//fmt.Println("panic on decoder:", pan)
}
}()
decoder, ok := c.decoders[pkt.CommandName]

View File

@ -298,6 +298,17 @@ func decodeGroupMessagePacket(c *QQClient, _ uint16, payload []byte) (interface{
return nil, nil
}
func decodeMsgSendResponse(c *QQClient, _ uint16, payload []byte) (interface{}, error) {
rsp := msg.SendMessageResponse{}
if err := proto.Unmarshal(payload, &rsp); err != nil {
return nil, err
}
if rsp.Result != 0 {
c.Error("send msg error: %v %v", rsp.Result, rsp.ErrMsg)
}
return nil, nil
}
func decodeSvcNotify(c *QQClient, _ uint16, _ []byte) (interface{}, error) {
c.msgSvcLock.Lock()
defer c.msgSvcLock.Unlock()

View File

@ -149,6 +149,11 @@ type (
client *QQClient
}
LogEvent struct {
Type string
Message string
}
NewFriendEvent struct {
Friend *FriendInfo
}

View File

@ -23,6 +23,7 @@ type eventHandlers struct {
friendRequestHandlers []func(*QQClient, *NewFriendRequest)
newFriendHandlers []func(*QQClient, *NewFriendEvent)
disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent)
logHandlers []func(*QQClient, *LogEvent)
groupMessageReceiptHandlers sync.Map
}
@ -98,6 +99,10 @@ func (c *QQClient) OnDisconnected(f func(*QQClient, *ClientDisconnectedEvent)) {
c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f)
}
func (c *QQClient) OnLog(f func(*QQClient, *LogEvent)) {
c.eventHandlers.logHandlers = append(c.eventHandlers.logHandlers, f)
}
func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool {
return func(msg *message.PrivateMessage) bool {
return msg.Sender.Uin == uin
@ -295,6 +300,17 @@ func (c *QQClient) dispatchDisconnectEvent(e *ClientDisconnectedEvent) {
}
}
func (c *QQClient) dispatchLogEvent(e *LogEvent) {
if e == nil {
return
}
for _, f := range c.eventHandlers.logHandlers {
cover(func() {
f(c, e)
})
}
}
func cover(f func()) {
defer func() {
if pan := recover(); pan != nil {

View File

@ -340,3 +340,24 @@ func genLongTemplate(resId, brief string, ts int64) *message.SendingMessage {
},
}}
}
func (c *QQClient) Info(msg string, args ...interface{}) {
c.dispatchLogEvent(&LogEvent{
Type: "INFO",
Message: fmt.Sprintf(msg, args),
})
}
func (c *QQClient) Error(msg string, args ...interface{}) {
c.dispatchLogEvent(&LogEvent{
Type: "ERROR",
Message: fmt.Sprintf(msg, args),
})
}
func (c *QQClient) Debug(msg string, args ...interface{}) {
c.dispatchLogEvent(&LogEvent{
Type: "DEBUG",
Message: fmt.Sprintf(msg, args),
})
}

File diff suppressed because it is too large Load Diff

View File

@ -32,7 +32,11 @@ message SendMessageRequest {
MsgCtrl msgCtrl = 12;
//ImReceipt.ReceiptReq? receiptReq = 13;
int32 multiSendSeq = 14;
}
message SendMessageResponse {
int32 result = 1;
string errMsg = 2;
}
message MsgWithDrawReq {