fix: 简化代码

This commit is contained in:
手瓜一十雪 2025-10-29 21:37:55 +08:00
parent 4ed61136b2
commit 458d22223c

View File

@ -64,42 +64,45 @@ export class NativePacketClient {
} }
} }
async sendPacket(cmd: string, data: PacketHexStr, rsp = false, timeout = 5000): Promise<RecvPacketData> { async sendPacket(
cmd: string,
data: PacketHexStr,
rsp = false,
timeout = 5000
): Promise<RecvPacketData> {
if (!rsp) { if (!rsp) {
this.napcore.sendSsoCmdReqByContend(cmd, Buffer.from(data, 'hex')).catch(err => { this.napcore
this.logger.error(`[PacketClient] sendPacket 无响应命令发送失败 cmd=${cmd} err=${err}`); .sendSsoCmdReqByContend(cmd, Buffer.from(data, 'hex'))
}); .catch(err =>
return { seq: 0, cmd: cmd, data: Buffer.alloc(0) }; this.logger.error(
`[PacketClient] sendPacket 无响应命令发送失败 cmd=${cmd} err=${err}`
)
);
return { seq: 0, cmd, data: Buffer.alloc(0) };
} }
const task = new CancelableTask<RecvPacketData>((resolve, reject, onCancel) => { const sendPromise = this.napcore
const timeoutId = setTimeout(() => { .sendSsoCmdReqByContend(cmd, Buffer.from(data, 'hex'))
reject(new Error(`[PacketClient] sendPacket 超时 cmd=${cmd} timeout=${timeout}ms`)); .then(ret => ({
}, timeout);
onCancel(() => {
clearTimeout(timeoutId);
});
this.napcore.sendSsoCmdReqByContend(cmd, Buffer.from(data, 'hex'))
.then(ret => {
clearTimeout(timeoutId);
const result = ret as { rspbuffer: Buffer };
resolve({
seq: 0, seq: 0,
cmd: cmd, cmd,
data: result.rspbuffer data: (ret as { rspbuffer: Buffer }).rspbuffer
}); }));
})
.catch(err => { const timeoutPromise = new Promise<RecvPacketData>((_, reject) => {
clearTimeout(timeoutId); setTimeout(
reject(err); () =>
}); reject(
new Error(
`[PacketClient] sendPacket 超时 cmd=${cmd} timeout=${timeout}ms`
)
),
timeout
);
}); });
return await task; return Promise.race([sendPromise, timeoutPromise]);
} }
async sendOidbPacket(pkt: OidbPacket, rsp = false, timeout = 5000): Promise<RecvPacketData> { async sendOidbPacket(pkt: OidbPacket, rsp = false, timeout = 5000): Promise<RecvPacketData> {
return await this.sendPacket(pkt.cmd, pkt.data, rsp, timeout); return await this.sendPacket(pkt.cmd, pkt.data, rsp, timeout);
} }