mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: Introduce a 10ms delay to sendSsoCmdReqByContend
and cache prepareUpload
requests
This commit is contained in:
parent
8873a030ab
commit
205174255f
@ -4,6 +4,7 @@ import WebSocket, { Data } from "ws";
|
|||||||
import crypto, { createHash } from "crypto";
|
import crypto, { createHash } from "crypto";
|
||||||
import { NapCatCore } from "@/core";
|
import { NapCatCore } from "@/core";
|
||||||
import { PacketHexStr } from "@/core/packet/packer";
|
import { PacketHexStr } from "@/core/packet/packer";
|
||||||
|
import {sleep} from "@/common/helper";
|
||||||
|
|
||||||
export interface RecvPacket {
|
export interface RecvPacket {
|
||||||
type: string, // 仅recv
|
type: string, // 仅recv
|
||||||
@ -171,6 +172,7 @@ export class PacketClient {
|
|||||||
const md5 = crypto.createHash('md5').update(data).digest('hex');
|
const md5 = crypto.createHash('md5').update(data).digest('hex');
|
||||||
const trace_id = (this.randText(4) + md5 + data).slice(0, data.length / 2);
|
const trace_id = (this.randText(4) + md5 + data).slice(0, data.length / 2);
|
||||||
this.sendCommand(cmd, data, trace_id, rsp, 20000, async () => {
|
this.sendCommand(cmd, data, trace_id, rsp, 20000, async () => {
|
||||||
|
await sleep(10);
|
||||||
await this.napCatCore.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id);
|
await this.napCatCore.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id);
|
||||||
}).then((res) => resolve(res)).catch((e: Error) => reject(e));
|
}).then((res) => resolve(res)).catch((e: Error) => reject(e));
|
||||||
});
|
});
|
||||||
|
@ -32,6 +32,7 @@ export class PacketHighwaySession {
|
|||||||
protected sig: PacketHighwaySig;
|
protected sig: PacketHighwaySig;
|
||||||
protected logger: LogWrapper;
|
protected logger: LogWrapper;
|
||||||
protected packer: PacketPacker;
|
protected packer: PacketPacker;
|
||||||
|
private cachedPrepareReq: Promise<void> | null = null;
|
||||||
|
|
||||||
constructor(logger: LogWrapper, client: PacketClient) {
|
constructor(logger: LogWrapper, client: PacketClient) {
|
||||||
this.packetClient = client;
|
this.packetClient = client;
|
||||||
@ -53,12 +54,15 @@ export class PacketHighwaySession {
|
|||||||
}
|
}
|
||||||
if (this.sig.sigSession === null || this.sig.sessionKey === null) {
|
if (this.sig.sigSession === null || this.sig.sessionKey === null) {
|
||||||
this.logger.logWarn('[Highway] sigSession or sessionKey not available!');
|
this.logger.logWarn('[Highway] sigSession or sessionKey not available!');
|
||||||
await this.prepareUpload();
|
if (this.cachedPrepareReq === null) {
|
||||||
|
this.cachedPrepareReq = this.prepareUpload().finally(() => {
|
||||||
|
this.cachedPrepareReq = null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
await this.cachedPrepareReq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: add signal to auto prepare when ready
|
|
||||||
// TODO: refactor
|
|
||||||
private async prepareUpload(): Promise<void> {
|
private async prepareUpload(): Promise<void> {
|
||||||
const packet = this.packer.packHttp0x6ff_501();
|
const packet = this.packer.packHttp0x6ff_501();
|
||||||
const req = await this.packetClient.sendPacket('HttpConn.0x6ff_501', packet, true);
|
const req = await this.packetClient.sendPacket('HttpConn.0x6ff_501', packet, true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user