From 3b4ae7d01398c3acd83bf392a4b1f4cec1259c55 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Sun, 17 Dec 2023 05:03:51 +0000 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E7=BD=91=E9=A1=B5=E7=AB=AF=E7=9A=84Ra?= =?UTF-8?q?wRequest=E4=B8=8A=E4=BA=86=E4=B8=AA=E9=94=81=EF=BC=8C=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E5=8F=91=E7=94=9F=E7=A5=9E=E5=A5=87=E7=9A=84=E4=BA=8B?= =?UTF-8?q?=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/Web/communication.js | 44 ++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/frontend/Web/communication.js b/frontend/Web/communication.js index 4fcf21e..ff316af 100644 --- a/frontend/Web/communication.js +++ b/frontend/Web/communication.js @@ -20,16 +20,42 @@ socket.on('response', (msg) => { function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } -async function RawRequest(raw_request){ - socket.emit('request', raw_request); - while(true) - { - if(__raw_response!=""){ - let response=__raw_response; - __raw_response=""; - return response; +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) { + 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()