Skip to content

Commit 017aef6

Browse files
committed
Add tunnel list changed event API
1 parent 7cfac76 commit 017aef6

6 files changed

Lines changed: 22 additions & 1 deletion

File tree

src/vs/vscode.proposed.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ declare module 'vscode' {
147147
* Note that these are of type TunnelDescription and cannot be disposed.
148148
*/
149149
export let tunnels: Thenable<TunnelDescription[]>;
150+
151+
/**
152+
* Fired when the list of tunnels has changed.
153+
*/
154+
export const onDidTunnelsChange: Event<void>;
150155
}
151156

152157
export interface ResourceLabelFormatter {

src/vs/workbench/api/browser/mainThreadTunnelService.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export class MainThreadTunnelService extends Disposable implements MainThreadTun
2222
) {
2323
super();
2424
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostTunnelService);
25+
this._register(tunnelService.onTunnelOpened(() => this._proxy.$onDidTunnelsChange()));
26+
this._register(tunnelService.onTunnelClosed(() => this._proxy.$onDidTunnelsChange()));
2527
}
2628

2729
async $openTunnel(tunnelOptions: TunnelOptions): Promise<TunnelDto | undefined> {

src/vs/workbench/api/common/extHost.api.impl.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
765765
},
766766
get tunnels() {
767767
return extHostTunnelService.getTunnels();
768+
},
769+
onDidTunnelsChange: (listener, thisArg?, disposables?) => {
770+
return extHostTunnelService.onDidTunnelsChange(listener, thisArg, disposables);
768771
}
769772
};
770773

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,7 @@ export interface ExtHostTunnelServiceShape {
14231423
$filterCandidates(candidates: { host: string, port: number, detail: string }[]): Promise<boolean[]>;
14241424
$forwardPort(tunnelOptions: TunnelOptions): Promise<TunnelDto> | undefined;
14251425
$closeTunnel(remote: { host: string, port: number }): Promise<void>;
1426+
$onDidTunnelsChange(): Promise<void>;
14261427
}
14271428

14281429
// --- proxy identifiers

src/vs/workbench/api/common/extHostTunnelService.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
88
import type * as vscode from 'vscode';
99
import { RemoteTunnel, TunnelOptions } from 'vs/platform/remote/common/tunnel';
1010
import { IDisposable } from 'vs/base/common/lifecycle';
11+
import { Emitter } from 'vs/base/common/event';
1112

1213
export interface TunnelDto {
1314
remoteAddress: { port: number, host: string };
@@ -32,13 +33,16 @@ export interface IExtHostTunnelService extends ExtHostTunnelServiceShape {
3233
readonly _serviceBrand: undefined;
3334
openTunnel(forward: TunnelOptions): Promise<vscode.Tunnel | undefined>;
3435
getTunnels(): Promise<vscode.TunnelDescription[]>;
36+
onDidTunnelsChange: vscode.Event<void>;
3537
setTunnelExtensionFunctions(provider: vscode.RemoteAuthorityResolver | undefined): Promise<IDisposable>;
3638
}
3739

3840
export const IExtHostTunnelService = createDecorator<IExtHostTunnelService>('IExtHostTunnelService');
3941

4042
export class ExtHostTunnelService implements IExtHostTunnelService {
4143
_serviceBrand: undefined;
44+
onDidTunnelsChange: vscode.Event<void> = (new Emitter<void>()).event;
45+
4246
async openTunnel(forward: TunnelOptions): Promise<vscode.Tunnel | undefined> {
4347
return undefined;
4448
}
@@ -54,5 +58,5 @@ export class ExtHostTunnelService implements IExtHostTunnelService {
5458
async setTunnelExtensionFunctions(provider: vscode.RemoteAuthorityResolver | undefined): Promise<IDisposable> { return { dispose: () => { } }; }
5559
$forwardPort(tunnelOptions: TunnelOptions): Promise<TunnelDto> | undefined { return undefined; }
5660
async $closeTunnel(remote: { host: string, port: number }): Promise<void> { }
57-
61+
async $onDidTunnelsChange(): Promise<void> { }
5862
}

src/vs/workbench/api/node/extHostTunnelService.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ export class ExtHostTunnelService extends Disposable implements IExtHostTunnelSe
3939
private _forwardPortProvider: ((tunnelOptions: TunnelOptions) => Thenable<vscode.Tunnel> | undefined) | undefined;
4040
private _showCandidatePort: (host: string, port: number, detail: string) => Thenable<boolean> = () => { return Promise.resolve(true); };
4141
private _extensionTunnels: Map<string, Map<number, vscode.Tunnel>> = new Map();
42+
private _onDidTunnelsChange: Emitter<void> = new Emitter<void>();
43+
onDidTunnelsChange: vscode.Event<void> = this._onDidTunnelsChange.event;
4244

4345
constructor(
4446
@IExtHostRpcService extHostRpc: IExtHostRpcService,
@@ -104,6 +106,10 @@ export class ExtHostTunnelService extends Disposable implements IExtHostTunnelSe
104106
}
105107
}
106108

109+
async $onDidTunnelsChange(): Promise<void> {
110+
this._onDidTunnelsChange.fire();
111+
}
112+
107113
$forwardPort(tunnelOptions: TunnelOptions): Promise<TunnelDto> | undefined {
108114
if (this._forwardPortProvider) {
109115
const providedPort = this._forwardPortProvider!(tunnelOptions);

0 commit comments

Comments
 (0)