mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
fix crash.
This commit is contained in:
parent
fe4df302aa
commit
91aa75e827
@ -1,5 +1,5 @@
|
|||||||
# MiraiGo
|
# MiraiGo
|
||||||
qq-android协议的golang实现 移植于Mirai
|
qq-android协议的golang实现 移植于mirai
|
||||||
|
|
||||||
# 警告
|
# 警告
|
||||||
本项目目前还处于功能填充阶段,将来API和项目结构可能会有调整,目前不推荐使用。
|
本项目目前还处于功能填充阶段,将来API和项目结构可能会有调整,目前不推荐使用。
|
||||||
|
@ -40,7 +40,7 @@ type QQClient struct {
|
|||||||
Conn net.Conn
|
Conn net.Conn
|
||||||
|
|
||||||
decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error)
|
decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error)
|
||||||
handlers map[uint16]func(interface{}, error)
|
handlers sync.Map
|
||||||
|
|
||||||
syncCookie []byte
|
syncCookie []byte
|
||||||
pubAccountCookie []byte
|
pubAccountCookie []byte
|
||||||
@ -121,7 +121,6 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient {
|
|||||||
"MultiMsg.ApplyUp": decodeMultiApplyUpResponse,
|
"MultiMsg.ApplyUp": decodeMultiApplyUpResponse,
|
||||||
"MultiMsg.ApplyDown": decodeMultiApplyDownResponse,
|
"MultiMsg.ApplyDown": decodeMultiApplyDownResponse,
|
||||||
},
|
},
|
||||||
handlers: map[uint16]func(interface{}, error){},
|
|
||||||
sigInfo: &loginSigInfo{},
|
sigInfo: &loginSigInfo{},
|
||||||
requestPacketRequestId: 1921334513,
|
requestPacketRequestId: 1921334513,
|
||||||
groupSeq: 22911,
|
groupSeq: 22911,
|
||||||
@ -629,14 +628,19 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
ch := make(chan T)
|
ch := make(chan T)
|
||||||
defer close(ch)
|
defer close(ch)
|
||||||
c.handlers[seq] = func(i interface{}, err error) {
|
c.handlers.Store(seq, func(i interface{}, err error) {
|
||||||
ch <- T{
|
ch <- T{
|
||||||
Response: i,
|
Response: i,
|
||||||
Error: err,
|
Error: err,
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
rsp := <-ch
|
select {
|
||||||
|
case rsp := <-ch:
|
||||||
return rsp.Response, rsp.Error
|
return rsp.Response, rsp.Error
|
||||||
|
case <-time.After(time.Second * 15):
|
||||||
|
c.handlers.Delete(seq)
|
||||||
|
return nil, errors.New("time out")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *QQClient) loop() {
|
func (c *QQClient) loop() {
|
||||||
@ -686,9 +690,9 @@ func (c *QQClient) loop() {
|
|||||||
}()
|
}()
|
||||||
decoder, ok := c.decoders[pkt.CommandName]
|
decoder, ok := c.decoders[pkt.CommandName]
|
||||||
if !ok {
|
if !ok {
|
||||||
if f, ok := c.handlers[pkt.SequenceId]; ok {
|
if f, ok := c.handlers.Load(pkt.SequenceId); ok {
|
||||||
delete(c.handlers, pkt.SequenceId)
|
c.handlers.Delete(pkt.SequenceId)
|
||||||
f(nil, nil)
|
f.(func(i interface{}, err error))(nil, nil)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -696,9 +700,9 @@ func (c *QQClient) loop() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("decode", pkt.CommandName, "error:", err)
|
log.Println("decode", pkt.CommandName, "error:", err)
|
||||||
}
|
}
|
||||||
if f, ok := c.handlers[pkt.SequenceId]; ok {
|
if f, ok := c.handlers.Load(pkt.SequenceId); ok {
|
||||||
delete(c.handlers, pkt.SequenceId)
|
c.handlers.Delete(pkt.SequenceId)
|
||||||
f(rsp, err)
|
f.(func(i interface{}, err error))(rsp, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
@ -263,7 +263,7 @@ func ToProtoElems(elems []IMessageElement, generalFlags bool) (r []*msg.Elem) {
|
|||||||
for _, elem := range elems {
|
for _, elem := range elems {
|
||||||
switch elem.(type) {
|
switch elem.(type) {
|
||||||
case *ServiceElement:
|
case *ServiceElement:
|
||||||
d, _ := hex.DecodeString("08 09 78 00 C8 01 00 F0 01 00 F8 01 00 90 02 00 C8 02 00 98 03 00 A0 03 20 B0 03 00 C0 03 00 D0 03 00 E8 03 00 8A 04 02 08 03 90 04 80 80 80 10 B8 04 00 C0 04 00")
|
d, _ := hex.DecodeString("08097800C80100F00100F80100900200C80200980300A00320B00300C00300D00300E803008A04020803900480808010B80400C00400")
|
||||||
r = append(r, &msg.Elem{
|
r = append(r, &msg.Elem{
|
||||||
GeneralFlags: &msg.GeneralFlags{
|
GeneralFlags: &msg.GeneralFlags{
|
||||||
PbReserve: d,
|
PbReserve: d,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user