From 4d30d5988c6a1f15cd5503ae9e04f2519c7812d4 Mon Sep 17 00:00:00 2001 From: rodrigorodriguez Date: Fri, 17 Feb 2023 06:32:30 -0300 Subject: [PATCH] new(all): #327 OPEN AS web automation. --- packages/basic.gblib/services/GBVMService.ts | 12 +++------ .../services/WebAutomationServices.ts | 26 ++++++++++++++----- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/basic.gblib/services/GBVMService.ts b/packages/basic.gblib/services/GBVMService.ts index a7470a8e..d5b88784 100644 --- a/packages/basic.gblib/services/GBVMService.ts +++ b/packages/basic.gblib/services/GBVMService.ts @@ -237,6 +237,8 @@ export class GBVMService extends GBService { ${code} + await wa.closeHandles({pid: pid}); + })(); `; @@ -406,15 +408,7 @@ export class GBVMService extends GBService { throw new Error(`BASIC RUNTIME ERR: ${error.message ? error.message : error}\n Stack:${error.stack}`); } finally { - // Releases previous allocated OPEN semaphores. - - let keys = Object.keys(GBServer.globals.webSessions); - for (let i = 0; i < keys.length; i++) { - const session = GBServer.globals.webSessions[keys[i]]; - if (session.pid === pid) { - session.semaphore.release(); - } - } + } return result; diff --git a/packages/basic.gblib/services/WebAutomationServices.ts b/packages/basic.gblib/services/WebAutomationServices.ts index 2e4d1daa..0581b2fd 100644 --- a/packages/basic.gblib/services/WebAutomationServices.ts +++ b/packages/basic.gblib/services/WebAutomationServices.ts @@ -114,6 +114,18 @@ export class WebAutomationServices { this.debugWeb = this.min.core.getParam(this.min.instance, 'Debug Web Automation', false); } + public async closeHandles({pid}){ + // Releases previous allocated OPEN semaphores. + + let keys = Object.keys(GBServer.globals.webSessions); + for (let i = 0; i < keys.length; i++) { + const session = GBServer.globals.webSessions[keys[i]]; + if (session.pid === pid) { + session.semaphore.release(); + } + } + } + /** * Returns the page object. * @@ -128,11 +140,11 @@ export class WebAutomationServices { // Try to find an existing handle. - let session = GBServer.globals.webSessions[sessionName]; + let session; let keys = Object.keys(GBServer.globals.webSessions); for (let i = 0; i < keys.length; i++) { - const session = GBServer.globals.webSessions[keys[i]]; - if (session.sessionName === sessionName) { + if (GBServer.globals.webSessions[keys[i]].sessionName === sessionName) { + session = GBServer.globals.webSessions[keys[i]]; handle = keys[i]; break; } @@ -144,8 +156,8 @@ export class WebAutomationServices { if (session) { const [value, release] = await session.semaphore.acquire(); try { - GBServer.globals.webSessions[sessionName].release = release; - page = GBServer.globals.webSessions[url.substr(1)]; + GBServer.globals.webSessions[handle].release = release; + page = session.page; } catch { release(); } @@ -156,7 +168,7 @@ export class WebAutomationServices { let browser; if (!page) { browser = await createBrowser(null); - page = (await this.browser.pages())[0]; + page = (await browser.pages())[0]; if (username || password) { await page.authenticate({ pid, username: username, password: password }); } @@ -169,7 +181,7 @@ export class WebAutomationServices { // A new web session is being created. handle = WebAutomationServices.cyrb53(this.min.botId + url); - GBServer.globals.webSessions[handle] = {}; + GBServer.globals.webSessions[handle] = session= {}; GBServer.globals.webSessions[handle].sessionName = sessionName; GBServer.globals.webSessions[handle].pid = pid; GBServer.globals.webSessions[handle].page = page;