/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; import { IPCClient } from 'vs/base/parts/ipc/common/ipc'; import { Protocol as ElectronProtocol } from 'vs/base/parts/ipc/common/ipc.electron'; import { IDisposable } from 'vs/base/common/lifecycle'; import { VSBuffer } from 'vs/base/common/buffer'; import { ipcRenderer } from 'vs/base/parts/sandbox/electron-sandbox/globals'; /** * An implemention of `IPCClient` on top of Electron `ipcRenderer` IPC communication * provided from sandbox globals (via preload script). */ export class Client extends IPCClient implements IDisposable { private protocol: ElectronProtocol; private static createProtocol(): ElectronProtocol { const onMessage = Event.fromNodeEventEmitter(ipcRenderer, 'vscode:message', (_, message) => VSBuffer.wrap(message)); ipcRenderer.send('vscode:hello'); return new ElectronProtocol(ipcRenderer, onMessage); } constructor(id: string) { const protocol = Client.createProtocol(); super(protocol, id); this.protocol = protocol; } dispose(): void { this.protocol.disconnect(); } }