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

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

View File

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