/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; import { URI } from 'vs/base/common/uri'; import { IDisposable } from 'vs/base/common/lifecycle'; import { Event } from 'vs/base/common/event'; import { IURLService, IURLHandler } from 'vs/platform/url/common/url'; export class URLServiceChannel implements IServerChannel { constructor(private service: IURLService) { } listen(_: unknown, event: string): Event { throw new Error(`Event not found: ${event}`); } call(_: unknown, command: string, arg?: any): Promise { switch (command) { case 'open': return this.service.open(URI.revive(arg)); } throw new Error(`Call not found: ${command}`); } } export class URLServiceChannelClient implements IURLService { _serviceBrand: any; constructor(private channel: IChannel) { } open(url: URI): Promise { return this.channel.call('open', url.toJSON()); } registerHandler(handler: IURLHandler): IDisposable { throw new Error('Not implemented.'); } } export class URLHandlerChannel implements IServerChannel { constructor(private handler: IURLHandler) { } listen(_: unknown, event: string): Event { throw new Error(`Event not found: ${event}`); } call(_: unknown, command: string, arg?: any): Promise { switch (command) { case 'handleURL': return this.handler.handleURL(URI.revive(arg)); } throw new Error(`Call not found: ${command}`); } } export class URLHandlerChannelClient implements IURLHandler { constructor(private channel: IChannel) { } handleURL(uri: URI): Promise { return this.channel.call('handleURL', uri.toJSON()); } }