feat: intialize remote browser for recording via controller
This commit is contained in:
46
server/src/browser-management/controller.ts
Normal file
46
server/src/browser-management/controller.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* The main function group which determines the flow of remote browser management.
|
||||||
|
* Holds the singleton instances of browser pool and socket.io server.
|
||||||
|
*/
|
||||||
|
import { Socket } from "socket.io";
|
||||||
|
import { uuid } from 'uuidv4';
|
||||||
|
|
||||||
|
import { createSocketConnection, createSocketConnectionForRun } from "../socket-connection/connection";
|
||||||
|
import { io, browserPool } from "../server";
|
||||||
|
import { RemoteBrowser } from "./classes/RemoteBrowser";
|
||||||
|
import { RemoteBrowserOptions } from "../types";
|
||||||
|
import logger from "../logger";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts and initializes a {@link RemoteBrowser} instance.
|
||||||
|
* Creates a new socket connection over a dedicated namespace
|
||||||
|
* and registers all interaction event handlers.
|
||||||
|
* Returns the id of an active browser or the new remote browser's generated id.
|
||||||
|
* @param options {@link RemoteBrowserOptions} to be used when launching the browser
|
||||||
|
* @returns string
|
||||||
|
* @category BrowserManagement-Controller
|
||||||
|
*/
|
||||||
|
export const initializeRemoteBrowserForRecording = (options: RemoteBrowserOptions): string => {
|
||||||
|
const id = getActiveBrowserId() || uuid();
|
||||||
|
createSocketConnection(
|
||||||
|
io.of(id),
|
||||||
|
async (socket: Socket) => {
|
||||||
|
// browser is already active
|
||||||
|
const activeId = getActiveBrowserId();
|
||||||
|
if (activeId) {
|
||||||
|
const remoteBrowser = browserPool.getRemoteBrowser(activeId);
|
||||||
|
remoteBrowser?.updateSocket(socket);
|
||||||
|
await remoteBrowser?.makeAndEmitScreenshot();
|
||||||
|
} else {
|
||||||
|
const browserSession = new RemoteBrowser(socket);
|
||||||
|
browserSession.interpreter.subscribeToPausing();
|
||||||
|
await browserSession.initialize(options);
|
||||||
|
await browserSession.registerEditorEvents();
|
||||||
|
await browserSession.subscribeToScreencast();
|
||||||
|
browserPool.addRemoteBrowser(id, browserSession, true);
|
||||||
|
}
|
||||||
|
socket.emit('loaded');
|
||||||
|
});
|
||||||
|
return id;
|
||||||
|
};
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user