Handle up/down on server

This commit is contained in:
Asher 2019-10-10 17:05:24 -05:00
parent 3f6cbfa4dd
commit ae43e2016f
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
2 changed files with 15 additions and 6 deletions

View File

@ -285,12 +285,14 @@ export class NodeProxyService implements INodeProxyService {
public readonly onMessage = this._onMessage.event; public readonly onMessage = this._onMessage.event;
private readonly _$onMessage = new Emitter<string>(); private readonly _$onMessage = new Emitter<string>();
public readonly $onMessage = this._$onMessage.event; public readonly $onMessage = this._$onMessage.event;
public readonly _onDown = new Emitter<void>();
public readonly onDown = this._onDown.event;
public readonly _onUp = new Emitter<void>();
public readonly onUp = this._onUp.event;
// Unused because the server connection will never permanently close.
private readonly _onClose = new Emitter<void>(); private readonly _onClose = new Emitter<void>();
public readonly onClose = this._onClose.event; public readonly onClose = this._onClose.event;
private readonly _onDown = new Emitter<void>();
public readonly onDown = this._onDown.event;
private readonly _onUp = new Emitter<void>();
public readonly onUp = this._onUp.event;
public constructor() { public constructor() {
// TODO: close/down/up // TODO: close/down/up

View File

@ -61,7 +61,7 @@ import { ExtensionEnvironmentChannel, FileProviderChannel, NodeProxyService } fr
import { Connection, ExtensionHostConnection, ManagementConnection } from "vs/server/src/node/connection"; import { Connection, ExtensionHostConnection, ManagementConnection } from "vs/server/src/node/connection";
import { TelemetryClient } from "vs/server/src/node/insights"; import { TelemetryClient } from "vs/server/src/node/insights";
import { getLocaleFromConfig, getNlsConfiguration } from "vs/server/src/node/nls"; import { getLocaleFromConfig, getNlsConfiguration } from "vs/server/src/node/nls";
import { NodeProxyChannel } from "vs/server/src/common/nodeProxy"; import { NodeProxyChannel, INodeProxyService } from "vs/server/src/common/nodeProxy";
import { Protocol } from "vs/server/src/node/protocol"; import { Protocol } from "vs/server/src/node/protocol";
import { TelemetryChannel } from "vs/server/src/common/telemetry"; import { TelemetryChannel } from "vs/server/src/common/telemetry";
import { UpdateService } from "vs/server/src/node/update"; import { UpdateService } from "vs/server/src/node/update";
@ -621,6 +621,11 @@ export class MainServer extends Server {
this._onDidClientConnect.fire({ this._onDidClientConnect.fire({
protocol, onDidClientDisconnect: connection.onClose, protocol, onDidClientDisconnect: connection.onClose,
}); });
// NOTE: We can do this because we only have one connection at a
// time but if that changes we need a way to determine which clients
// belong to a connection and dispose only those.
(this.services.get(INodeProxyService) as NodeProxyService)._onUp.fire();
connection.onClose(() => (this.services.get(INodeProxyService) as NodeProxyService)._onDown.fire());
} else { } else {
const buffer = protocol.readEntireBuffer(); const buffer = protocol.readEntireBuffer();
connection = new ExtensionHostConnection( connection = new ExtensionHostConnection(
@ -695,6 +700,8 @@ export class MainServer extends Server {
const instantiationService = new InstantiationService(this.services); const instantiationService = new InstantiationService(this.services);
const localizationService = instantiationService.createInstance(LocalizationsService); const localizationService = instantiationService.createInstance(LocalizationsService);
this.services.set(ILocalizationsService, localizationService); this.services.set(ILocalizationsService, localizationService);
const proxyService = instantiationService.createInstance(NodeProxyService);
this.services.set(INodeProxyService, proxyService);
this.ipc.registerChannel("localizations", new LocalizationsChannel(localizationService)); this.ipc.registerChannel("localizations", new LocalizationsChannel(localizationService));
instantiationService.invokeFunction(() => { instantiationService.invokeFunction(() => {
instantiationService.createInstance(LogsDataCleaner); instantiationService.createInstance(LogsDataCleaner);
@ -708,7 +715,7 @@ export class MainServer extends Server {
const requestChannel = new RequestChannel(this.services.get(IRequestService) as IRequestService); const requestChannel = new RequestChannel(this.services.get(IRequestService) as IRequestService);
const telemetryChannel = new TelemetryChannel(telemetryService); const telemetryChannel = new TelemetryChannel(telemetryService);
const updateChannel = new UpdateChannel(instantiationService.createInstance(UpdateService)); const updateChannel = new UpdateChannel(instantiationService.createInstance(UpdateService));
const nodeProxyChannel = new NodeProxyChannel(instantiationService.createInstance(NodeProxyService)); const nodeProxyChannel = new NodeProxyChannel(proxyService);
this.ipc.registerChannel("extensions", extensionsChannel); this.ipc.registerChannel("extensions", extensionsChannel);
this.ipc.registerChannel("remoteextensionsenvironment", extensionsEnvironmentChannel); this.ipc.registerChannel("remoteextensionsenvironment", extensionsEnvironmentChannel);