feat: Introduce a 10ms delay to sendSsoCmdReqByContend and cache prepareUpload requests

This commit is contained in:
pk5ls20 2024-10-17 22:41:39 +08:00
parent 8873a030ab
commit 205174255f
No known key found for this signature in database
GPG Key ID: 6370ED7A169F493A
2 changed files with 9 additions and 3 deletions

View File

@ -4,6 +4,7 @@ import WebSocket, { Data } from "ws";
import crypto, { createHash } from "crypto";
import { NapCatCore } from "@/core";
import { PacketHexStr } from "@/core/packet/packer";
import {sleep} from "@/common/helper";
export interface RecvPacket {
type: string, // 仅recv
@ -171,6 +172,7 @@ export class PacketClient {
const md5 = crypto.createHash('md5').update(data).digest('hex');
const trace_id = (this.randText(4) + md5 + data).slice(0, data.length / 2);
this.sendCommand(cmd, data, trace_id, rsp, 20000, async () => {
await sleep(10);
await this.napCatCore.context.session.getMsgService().sendSsoCmdReqByContend(cmd, trace_id);
}).then((res) => resolve(res)).catch((e: Error) => reject(e));
});

View File

@ -32,6 +32,7 @@ export class PacketHighwaySession {
protected sig: PacketHighwaySig;
protected logger: LogWrapper;
protected packer: PacketPacker;
private cachedPrepareReq: Promise<void> | null = null;
constructor(logger: LogWrapper, client: PacketClient) {
this.packetClient = client;
@ -53,12 +54,15 @@ export class PacketHighwaySession {
}
if (this.sig.sigSession === null || this.sig.sessionKey === null) {
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> {
const packet = this.packer.packHttp0x6ff_501();
const req = await this.packetClient.sendPacket('HttpConn.0x6ff_501', packet, true);