new(all): #327 OPEN AS web automation.

This commit is contained in:
rodrigorodriguez 2023-02-17 06:32:30 -03:00
parent de84283b5d
commit 4d30d5988c
2 changed files with 22 additions and 16 deletions

View file

@ -237,6 +237,8 @@ export class GBVMService extends GBService {
${code} ${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}`); throw new Error(`BASIC RUNTIME ERR: ${error.message ? error.message : error}\n Stack:${error.stack}`);
} finally { } 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; return result;

View file

@ -114,6 +114,18 @@ export class WebAutomationServices {
this.debugWeb = this.min.core.getParam<boolean>(this.min.instance, 'Debug Web Automation', false); this.debugWeb = this.min.core.getParam<boolean>(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. * Returns the page object.
* *
@ -128,11 +140,11 @@ export class WebAutomationServices {
// Try to find an existing handle. // Try to find an existing handle.
let session = GBServer.globals.webSessions[sessionName]; let session;
let keys = Object.keys(GBServer.globals.webSessions); let keys = Object.keys(GBServer.globals.webSessions);
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
const session = GBServer.globals.webSessions[keys[i]]; if (GBServer.globals.webSessions[keys[i]].sessionName === sessionName) {
if (session.sessionName === sessionName) { session = GBServer.globals.webSessions[keys[i]];
handle = keys[i]; handle = keys[i];
break; break;
} }
@ -144,8 +156,8 @@ export class WebAutomationServices {
if (session) { if (session) {
const [value, release] = await session.semaphore.acquire(); const [value, release] = await session.semaphore.acquire();
try { try {
GBServer.globals.webSessions[sessionName].release = release; GBServer.globals.webSessions[handle].release = release;
page = GBServer.globals.webSessions[url.substr(1)]; page = session.page;
} catch { } catch {
release(); release();
} }
@ -156,7 +168,7 @@ export class WebAutomationServices {
let browser; let browser;
if (!page) { if (!page) {
browser = await createBrowser(null); browser = await createBrowser(null);
page = (await this.browser.pages())[0]; page = (await browser.pages())[0];
if (username || password) { if (username || password) {
await page.authenticate({ pid, username: username, password: password }); await page.authenticate({ pid, username: username, password: password });
} }
@ -169,7 +181,7 @@ export class WebAutomationServices {
// A new web session is being created. // A new web session is being created.
handle = WebAutomationServices.cyrb53(this.min.botId + url); 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].sessionName = sessionName;
GBServer.globals.webSessions[handle].pid = pid; GBServer.globals.webSessions[handle].pid = pid;
GBServer.globals.webSessions[handle].page = page; GBServer.globals.webSessions[handle].page = page;