* // waitPacket // 等待一个或多个数据包解析, 优先级低于 sendAndWait // 返回终止解析函数 func (c *QQClient) waitPacket(cmd string, f func(any, error)) func() { c.waiters.Store(cmd, f) return func() { c.waiters.Delete(cmd) } } // waitPacketTimeoutSyncF // 等待一个数据包解析, 优先级低于 sendAndWait func (c *QQClient) waitPacketTimeou
(seq uint32, pkt []byte)
| 279 | // sendAndWaitDynamic |
| 280 | // 发送数据包并返回需要解析的 response |
| 281 | func (c *QQClient) sendAndWaitDynamic(seq uint32, pkt []byte) ([]byte, error) { |
| 282 | ch := make(chan []byte, 1) |
| 283 | c.handlers.Store(seq, &handlerInfo{fun: func(i any, _ error) { ch <- i.([]byte) }, dynamic: true}) |
| 284 | err := c.sendPacket(pkt) |
| 285 | if err != nil { |
| 286 | c.handlers.Delete(seq) |
| 287 | return nil, err |
| 288 | } |
| 289 | select { |
| 290 | case rsp := <-ch: |
| 291 | return rsp, nil |
| 292 | case <-time.After(time.Second * 15): |
| 293 | c.handlers.Delete(seq) |
| 294 | return nil, errors.New("Packet timed out") |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | // SendSsoPacket |
| 299 | // 发送签名回调包给服务器并获取返回结果供提交 |
no test coverage detected