给网页端的RawRequest上了个锁,防止发生神奇的事情

This commit is contained in:
2023-12-17 05:03:51 +00:00
parent c696fa1396
commit 3b4ae7d013

View File

@ -20,16 +20,42 @@ socket.on('response', (msg) => {
function sleep(ms) { function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms)); return new Promise(resolve => setTimeout(resolve, ms));
} }
async function RawRequest(raw_request){ let raw_request_lock = false;
socket.emit('request', raw_request);
while(true) async function acquireRawRequestLock() {
{ return new Promise((resolve) => {
if(__raw_response!=""){ const attemptAcquire = () => {
let response=__raw_response; if (!raw_request_lock) {
__raw_response=""; raw_request_lock = true;
return response; resolve();
} else {
setTimeout(attemptAcquire, 10);
}
};
attemptAcquire();
});
}
function releaseRawRequestLock() {
raw_request_lock = false;
}
async function RawRequest(raw_request) {
await acquireRawRequestLock();
try {
socket.emit('request', raw_request);
while (true) {
if (__raw_response !== "") {
let response = __raw_response;
__raw_response = "";
return response;
}
await sleep(100);
} }
await sleep(100); } finally {
releaseRawRequestLock();
} }
} }
async function ShutDownWholeSystem() async function ShutDownWholeSystem()