Merge from master

This commit is contained in:
Raj Musuku
2019-02-21 17:56:04 -08:00
parent 5a146e34fa
commit 666ae11639
11482 changed files with 119352 additions and 255574 deletions

View File

@@ -0,0 +1,42 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/node/ipc';
import { Event, Emitter } from 'vs/base/common/event';
/**
* This implementation doesn't perform well since it uses base64 encoding for buffers.
* Electron 3.0 should have suport for buffers in IPC: https://github.com/electron/electron/pull/13055
*/
export interface Sender {
send(channel: string, msg: string | null): void;
}
export class Protocol implements IMessagePassingProtocol {
private listener: IDisposable;
private _onMessage = new Emitter<Buffer>();
get onMessage(): Event<Buffer> { return this._onMessage.event; }
constructor(private sender: Sender, onMessageEvent: Event<string>) {
onMessageEvent(msg => this._onMessage.fire(Buffer.from(msg, 'base64')));
}
send(message: Buffer): void {
try {
this.sender.send('ipc:message', message.toString('base64'));
} catch (e) {
// systems are going down
}
}
dispose(): void {
this.sender.send('ipc:disconnect', null);
this.listener = dispose(this.listener);
}
}