mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-10 14:16:15 -06:00
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { VSBuffer } from '../../../common/buffer.js';
|
|
import { Event } from '../../../common/event.js';
|
|
import { IDisposable } from '../../../common/lifecycle.js';
|
|
import { IPCClient } from '../common/ipc.js';
|
|
import { Protocol as ElectronProtocol } from '../common/ipc.electron.js';
|
|
import { ipcRenderer } from '../../sandbox/electron-browser/globals.js';
|
|
|
|
/**
|
|
* An implementation 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<VSBuffer>(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;
|
|
}
|
|
|
|
override dispose(): void {
|
|
this.protocol.disconnect();
|
|
super.dispose();
|
|
}
|
|
}
|