@eclipse-glsp/server 1.1.0-next.385269d.45 → 1.1.0-next.3bba361.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/di/app-module.d.ts +2 -7
- package/lib/browser/di/app-module.d.ts.map +1 -1
- package/lib/browser/di/app-module.js +5 -30
- package/lib/browser/di/app-module.js.map +1 -1
- package/lib/browser/index.d.ts +0 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +0 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/launch/worker-server-launcher.d.ts +11 -8
- package/lib/browser/launch/worker-server-launcher.d.ts.map +1 -1
- package/lib/browser/launch/worker-server-launcher.js +13 -21
- package/lib/browser/launch/worker-server-launcher.js.map +1 -1
- package/lib/common/actions/client-action-handler.d.ts +1 -2
- package/lib/common/actions/client-action-handler.d.ts.map +1 -1
- package/lib/common/actions/client-action-handler.js +17 -2
- package/lib/common/actions/client-action-handler.js.map +1 -1
- package/lib/common/command/command-stack.d.ts +16 -1
- package/lib/common/command/command-stack.d.ts.map +1 -1
- package/lib/common/command/command-stack.js +0 -15
- package/lib/common/command/command-stack.js.map +1 -1
- package/lib/common/di/client-session-module.d.ts +1 -1
- package/lib/common/di/client-session-module.d.ts.map +1 -1
- package/lib/common/di/client-session-module.js +2 -2
- package/lib/common/di/client-session-module.js.map +1 -1
- package/lib/common/di/glsp-module.d.ts +3 -1
- package/lib/common/di/glsp-module.d.ts.map +1 -1
- package/lib/common/di/glsp-module.js +0 -15
- package/lib/common/di/glsp-module.js.map +1 -1
- package/lib/common/di/multi-binding.d.ts +19 -4
- package/lib/common/di/multi-binding.d.ts.map +1 -1
- package/lib/common/di/multi-binding.js.map +1 -1
- package/lib/common/di/server-module.d.ts +1 -6
- package/lib/common/di/server-module.d.ts.map +1 -1
- package/lib/common/di/server-module.js +21 -17
- package/lib/common/di/server-module.js.map +1 -1
- package/lib/common/index.d.ts +1 -2
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +1 -2
- package/lib/common/index.js.map +1 -1
- package/lib/common/launch/glsp-server-launcher.d.ts +8 -7
- package/lib/common/launch/glsp-server-launcher.d.ts.map +1 -1
- package/lib/common/launch/glsp-server-launcher.js +27 -4
- package/lib/common/launch/glsp-server-launcher.js.map +1 -1
- package/lib/common/launch/jsonrpc-server-launcher.d.ts +38 -0
- package/lib/common/launch/jsonrpc-server-launcher.d.ts.map +1 -0
- package/lib/common/launch/jsonrpc-server-launcher.js +84 -0
- package/lib/common/launch/jsonrpc-server-launcher.js.map +1 -0
- package/lib/common/protocol/glsp-server.d.ts +4 -104
- package/lib/common/protocol/glsp-server.d.ts.map +1 -1
- package/lib/common/protocol/glsp-server.js +13 -20
- package/lib/common/protocol/glsp-server.js.map +1 -1
- package/lib/common/protocol/glsp-server.spec.js +18 -5
- package/lib/common/protocol/glsp-server.spec.js.map +1 -1
- package/lib/common/session/client-session-factory.d.ts +1 -2
- package/lib/common/session/client-session-factory.d.ts.map +1 -1
- package/lib/common/session/client-session-factory.js +17 -2
- package/lib/common/session/client-session-factory.js.map +1 -1
- package/lib/common/session/client-session-factory.spec.js +2 -2
- package/lib/common/session/client-session-factory.spec.js.map +1 -1
- package/lib/common/session/client-session-manager.d.ts +1 -3
- package/lib/common/session/client-session-manager.d.ts.map +1 -1
- package/lib/common/session/client-session-manager.js.map +1 -1
- package/lib/common/test/mock-util.d.ts +3 -6
- package/lib/common/test/mock-util.d.ts.map +1 -1
- package/lib/common/test/mock-util.js.map +1 -1
- package/lib/{browser/di → common/utils}/console-logger.d.ts +8 -2
- package/lib/common/utils/console-logger.d.ts.map +1 -0
- package/lib/{browser/di → common/utils}/console-logger.js +27 -9
- package/lib/common/utils/console-logger.js.map +1 -0
- package/lib/common/utils/logger.d.ts +21 -0
- package/lib/common/utils/logger.d.ts.map +1 -1
- package/lib/common/utils/logger.js +12 -1
- package/lib/common/utils/logger.js.map +1 -1
- package/lib/node/di/app-module.d.ts +2 -2
- package/lib/node/di/app-module.d.ts.map +1 -1
- package/lib/node/di/app-module.js +10 -35
- package/lib/node/di/app-module.js.map +1 -1
- package/lib/node/index.d.ts +1 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/launch/cli-parser.d.ts +2 -3
- package/lib/node/launch/cli-parser.d.ts.map +1 -1
- package/lib/node/launch/cli-parser.js.map +1 -1
- package/lib/node/launch/socket-cli-parser.js +1 -1
- package/lib/node/launch/socket-cli-parser.js.map +1 -1
- package/lib/node/launch/socket-server-launcher.d.ts +4 -24
- package/lib/node/launch/socket-server-launcher.d.ts.map +1 -1
- package/lib/node/launch/socket-server-launcher.js +15 -34
- package/lib/node/launch/socket-server-launcher.js.map +1 -1
- package/lib/node/launch/socket-server-launcher.spec.js +5 -0
- package/lib/node/launch/socket-server-launcher.spec.js.map +1 -1
- package/lib/node/launch/websocket-server-launcher.d.ts +53 -0
- package/lib/node/launch/websocket-server-launcher.d.ts.map +1 -0
- package/lib/node/launch/websocket-server-launcher.js +121 -0
- package/lib/node/launch/websocket-server-launcher.js.map +1 -0
- package/package.json +7 -5
- package/src/browser/di/app-module.ts +4 -32
- package/src/browser/index.ts +0 -1
- package/src/browser/launch/worker-server-launcher.ts +20 -22
- package/src/common/actions/client-action-handler.ts +1 -2
- package/src/common/command/command-stack.ts +1 -1
- package/src/common/di/client-session-module.ts +1 -1
- package/src/common/di/glsp-module.ts +3 -1
- package/src/common/di/multi-binding.ts +4 -5
- package/src/common/di/server-module.ts +6 -21
- package/src/common/index.ts +1 -2
- package/src/common/launch/glsp-server-launcher.ts +15 -9
- package/src/common/launch/jsonrpc-server-launcher.ts +95 -0
- package/src/common/protocol/glsp-server.spec.ts +7 -4
- package/src/common/protocol/glsp-server.ts +17 -132
- package/src/common/session/client-session-factory.spec.ts +1 -1
- package/src/common/session/client-session-factory.ts +1 -2
- package/src/common/session/client-session-manager.ts +1 -3
- package/src/common/test/mock-util.ts +5 -5
- package/src/{browser/di → common/utils}/console-logger.ts +20 -2
- package/src/common/utils/logger.ts +16 -1
- package/src/node/di/app-module.ts +4 -13
- package/src/node/index.ts +1 -0
- package/src/node/launch/cli-parser.ts +2 -3
- package/src/node/launch/socket-cli-parser.ts +1 -1
- package/src/node/launch/socket-server-launcher.spec.ts +6 -0
- package/src/node/launch/socket-server-launcher.ts +19 -35
- package/src/node/launch/websocket-server-launcher.ts +138 -0
- package/lib/browser/di/console-logger.d.ts.map +0 -1
- package/lib/browser/di/console-logger.js.map +0 -1
- package/lib/common/protocol/glsp-client-proxy.d.ts +0 -45
- package/lib/common/protocol/glsp-client-proxy.d.ts.map +0 -1
- package/lib/common/protocol/glsp-client-proxy.js +0 -53
- package/lib/common/protocol/glsp-client-proxy.js.map +0 -1
- package/lib/common/protocol/glsp-server-listener.d.ts +0 -37
- package/lib/common/protocol/glsp-server-listener.d.ts.map +0 -1
- package/lib/common/protocol/glsp-server-listener.js +0 -5
- package/lib/common/protocol/glsp-server-listener.js.map +0 -1
- package/src/common/protocol/glsp-client-proxy.ts +0 -65
- package/src/common/protocol/glsp-server-listener.ts +0 -39
|
@@ -14,42 +14,14 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
|
-
import { ContainerModule
|
|
18
|
-
import { InjectionContainer,
|
|
19
|
-
import { ConsoleLogger } from './console-logger';
|
|
17
|
+
import { ContainerModule } from 'inversify';
|
|
18
|
+
import { InjectionContainer, LogLevel, LoggerConfigOptions, configureConsoleLogger } from '../../common/';
|
|
20
19
|
|
|
21
|
-
export
|
|
22
|
-
consoleLog
|
|
23
|
-
logLevel?: LogLevel;
|
|
24
|
-
}
|
|
25
|
-
export function createAppModule(options: LaunchOptions = {}): ContainerModule {
|
|
26
|
-
const resolvedOptions: LaunchOptions = { consoleLog: true, logLevel: LogLevel.info, ...options };
|
|
20
|
+
export function createAppModule(options: LoggerConfigOptions = {}): ContainerModule {
|
|
21
|
+
const resolvedOptions: LoggerConfigOptions = { consoleLog: true, logLevel: LogLevel.info, ...options };
|
|
27
22
|
return new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
28
23
|
bind(InjectionContainer).toDynamicValue(dynamicContext => dynamicContext.container);
|
|
29
24
|
const context = { bind, unbind, isBound, rebind };
|
|
30
25
|
configureConsoleLogger(context, resolvedOptions);
|
|
31
26
|
});
|
|
32
27
|
}
|
|
33
|
-
|
|
34
|
-
export function configureConsoleLogger<T extends LaunchOptions>(context: ModuleContext, options: T): void {
|
|
35
|
-
if (!options.consoleLog) {
|
|
36
|
-
context.bind(Logger).to(NullLogger).inSingletonScope();
|
|
37
|
-
} else {
|
|
38
|
-
context.bind(Logger).toDynamicValue(ctx => new ConsoleLogger(options.logLevel, getRequestParentName(ctx)));
|
|
39
|
-
}
|
|
40
|
-
context.bind(LoggerFactory).toFactory(dynamicContext => (caller: string) => {
|
|
41
|
-
const logger = dynamicContext.container.get(Logger);
|
|
42
|
-
logger.caller = caller;
|
|
43
|
-
return logger;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function getRequestParentName(context: interfaces.Context): string | undefined {
|
|
48
|
-
if (context.currentRequest.parentRequest) {
|
|
49
|
-
const bindings = context.currentRequest.parentRequest.bindings;
|
|
50
|
-
if (bindings.length > 0) {
|
|
51
|
-
return bindings[0].implementationType?.name;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return undefined;
|
|
55
|
-
}
|
package/src/browser/index.ts
CHANGED
|
@@ -14,26 +14,27 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { injectable } from 'inversify';
|
|
18
18
|
import * as jsonrpc from 'vscode-jsonrpc/browser';
|
|
19
|
-
import {
|
|
19
|
+
import { MaybePromise } from '../../common/index';
|
|
20
|
+
import { JsonRpcGLSPServerLauncher, JsonRpcServerInstance } from '../../common/launch/jsonrpc-server-launcher';
|
|
21
|
+
export interface WorkerLaunchOptions {
|
|
22
|
+
context?: Worker;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const START_UP_COMPLETE_MSG = '[GLSP-Server]:Startup completed.';
|
|
20
26
|
|
|
21
27
|
@injectable()
|
|
22
|
-
export class WorkerServerLauncher extends
|
|
23
|
-
|
|
28
|
+
export class WorkerServerLauncher extends JsonRpcGLSPServerLauncher<WorkerLaunchOptions> {
|
|
29
|
+
protected connection?: jsonrpc.MessageConnection;
|
|
24
30
|
|
|
25
|
-
protected run(): MaybePromise<void> {
|
|
31
|
+
protected run(options: WorkerLaunchOptions): MaybePromise<void> {
|
|
26
32
|
if (this.connection) {
|
|
27
33
|
throw new Error('Error during launch. Server already has an active client connection');
|
|
28
34
|
}
|
|
29
|
-
|
|
30
|
-
this.
|
|
31
|
-
const glspServer = container.get<JsonRpcGLSPServer>(JsonRpcGLSPServer);
|
|
32
|
-
glspServer.connect(this.connection);
|
|
33
|
-
this.connection.onDispose(() => this.disposeClientConnection(container, glspServer));
|
|
34
|
-
|
|
35
|
+
this.connection = this.createConnection(options);
|
|
36
|
+
this.createServerInstance(this.connection);
|
|
35
37
|
this.logger.info('GLSP server worker connection established');
|
|
36
|
-
this.connection.listen();
|
|
37
38
|
postMessage(START_UP_COMPLETE_MSG);
|
|
38
39
|
return new Promise((resolve, rejects) => {
|
|
39
40
|
this.connection?.onClose(() => resolve(undefined));
|
|
@@ -41,18 +42,15 @@ export class WorkerServerLauncher extends GLSPServerLauncher {
|
|
|
41
42
|
});
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
protected
|
|
45
|
-
|
|
46
|
-
container.unbindAll();
|
|
45
|
+
protected override disposeServerInstance(instance: JsonRpcServerInstance): void {
|
|
46
|
+
super.disposeServerInstance(instance);
|
|
47
47
|
this.connection = undefined;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
protected
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
protected createConnection(): jsonrpc.MessageConnection {
|
|
56
|
-
return jsonrpc.createMessageConnection(new jsonrpc.BrowserMessageReader(self), new jsonrpc.BrowserMessageWriter(self));
|
|
50
|
+
protected createConnection(options: WorkerLaunchOptions): jsonrpc.MessageConnection {
|
|
51
|
+
return jsonrpc.createMessageConnection(
|
|
52
|
+
new jsonrpc.BrowserMessageReader(options.context ?? self),
|
|
53
|
+
new jsonrpc.BrowserMessageWriter(options.context ?? self)
|
|
54
|
+
);
|
|
57
55
|
}
|
|
58
56
|
}
|
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Action, ActionMessage } from '@eclipse-glsp/protocol';
|
|
16
|
+
import { Action, ActionMessage, GLSPClientProxy } from '@eclipse-glsp/protocol';
|
|
17
17
|
import { inject, injectable, optional } from 'inversify';
|
|
18
18
|
import { ClientActionKinds, ClientId } from '../di/service-identifiers';
|
|
19
|
-
import { GLSPClientProxy } from '../protocol/glsp-client-proxy';
|
|
20
19
|
|
|
21
20
|
/**
|
|
22
21
|
* The client action handler is responsible of handling action kinds that are intended for the
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
+
import { MaybePromise } from '@eclipse-glsp/protocol';
|
|
16
17
|
import { inject, injectable } from 'inversify';
|
|
17
|
-
import { MaybePromise } from '..';
|
|
18
18
|
import { Logger } from '../utils/logger';
|
|
19
19
|
import { Command } from './command';
|
|
20
20
|
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
+
import { GLSPClientProxy } from '@eclipse-glsp/protocol';
|
|
16
17
|
import { ContainerModule } from 'inversify';
|
|
17
|
-
import { GLSPClientProxy } from '../protocol/glsp-client-proxy';
|
|
18
18
|
import { ClientId } from './service-identifiers';
|
|
19
19
|
|
|
20
20
|
export function createClientSessionModule(clientId: string, glspClient: GLSPClientProxy): ContainerModule {
|
|
@@ -13,12 +13,14 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
+
import { BindingContext } from '@eclipse-glsp/protocol';
|
|
16
17
|
import { ContainerModule, injectable, interfaces } from 'inversify';
|
|
17
18
|
import { AbstractMultiBinding } from './multi-binding';
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* A wrapper interface to get access to the binding related functions
|
|
21
22
|
* for a inversify container.
|
|
23
|
+
* @deprecated Use `BindingContext` from `@eclipse-glsp/protocol` instead
|
|
22
24
|
*/
|
|
23
25
|
export interface ModuleContext {
|
|
24
26
|
bind: interfaces.Bind;
|
|
@@ -34,7 +36,7 @@ export interface ModuleContext {
|
|
|
34
36
|
export abstract class GLSPModule extends ContainerModule {
|
|
35
37
|
public static CLIENT_ACTIONS = 'ClientActions';
|
|
36
38
|
|
|
37
|
-
protected context:
|
|
39
|
+
protected context: BindingContext;
|
|
38
40
|
|
|
39
41
|
constructor() {
|
|
40
42
|
super((bind, unbind, isBound, rebind) => {
|
|
@@ -13,9 +13,8 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { distinctAdd, flatPush, MaybeArray, remove } from '@eclipse-glsp/protocol';
|
|
16
|
+
import { BindingContext, distinctAdd, flatPush, MaybeArray, remove } from '@eclipse-glsp/protocol';
|
|
17
17
|
import { applyBindingTarget, BindingTarget } from './binding-target';
|
|
18
|
-
import { ModuleContext } from './glsp-module';
|
|
19
18
|
|
|
20
19
|
/**
|
|
21
20
|
* A helper class used in `GLSPModules` to ease the configuration of multi-injected service identifiers.
|
|
@@ -29,7 +28,7 @@ export abstract class AbstractMultiBinding<T> {
|
|
|
29
28
|
|
|
30
29
|
constructor(readonly identifier: string | symbol) {}
|
|
31
30
|
|
|
32
|
-
abstract applyBindings(context:
|
|
31
|
+
abstract applyBindings(context: BindingContext): void;
|
|
33
32
|
|
|
34
33
|
add(newBinding: T): void {
|
|
35
34
|
distinctAdd(this.bindings, newBinding);
|
|
@@ -71,7 +70,7 @@ export abstract class AbstractMultiBinding<T> {
|
|
|
71
70
|
* @typeparam T the base type of {@link BindingTarget}.
|
|
72
71
|
*/
|
|
73
72
|
export class MultiBinding<T> extends AbstractMultiBinding<BindingTarget<T>> {
|
|
74
|
-
applyBindings(context:
|
|
73
|
+
applyBindings(context: BindingContext): void {
|
|
75
74
|
this.bindings.forEach(binding => applyBindingTarget(context, this.identifier, binding));
|
|
76
75
|
}
|
|
77
76
|
}
|
|
@@ -83,7 +82,7 @@ export class MultiBinding<T> extends AbstractMultiBinding<BindingTarget<T>> {
|
|
|
83
82
|
* * @typeparam T the type of the instances
|
|
84
83
|
*/
|
|
85
84
|
export class InstanceMultiBinding<T> extends AbstractMultiBinding<T> {
|
|
86
|
-
applyBindings(context:
|
|
85
|
+
applyBindings(context: BindingContext): void {
|
|
87
86
|
context.bind(this.identifier).toConstantValue(this.bindings);
|
|
88
87
|
}
|
|
89
88
|
}
|
|
@@ -13,14 +13,13 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
+
import { GLSPServer, GLSPServerListener } from '@eclipse-glsp/protocol';
|
|
16
17
|
import { ContainerModule, interfaces } from 'inversify';
|
|
17
18
|
import { DefaultGlobalActionProvider, GlobalActionProvider } from '../actions/global-action-provider';
|
|
18
|
-
import {
|
|
19
|
-
import { DefaultGLSPServer, GLSPServer, JsonRpcGLSPServer } from '../protocol/glsp-server';
|
|
20
|
-
import { GLSPServerListener } from '../protocol/glsp-server-listener';
|
|
19
|
+
import { DefaultGLSPServer } from '../protocol/glsp-server';
|
|
21
20
|
import { ClientSessionFactory, DefaultClientSessionFactory } from '../session/client-session-factory';
|
|
22
21
|
import { ClientSessionManager, DefaultClientSessionManager } from '../session/client-session-manager';
|
|
23
|
-
import {
|
|
22
|
+
import { BindingTarget, applyBindingTarget } from './binding-target';
|
|
24
23
|
import { DiagramModule } from './diagram-module';
|
|
25
24
|
import { GLSPModule } from './glsp-module';
|
|
26
25
|
import { MultiBinding } from './multi-binding';
|
|
@@ -74,7 +73,6 @@ export class ServerModule extends GLSPModule {
|
|
|
74
73
|
applyBindingTarget(context, DiagramModules, this.bindDiagramModules());
|
|
75
74
|
|
|
76
75
|
applyBindingTarget(context, GLSPServer, this.bindGLSPServer()).inSingletonScope();
|
|
77
|
-
applyBindingTarget(context, JsonRpcGLSPServer, this.bindJsonRpcGLSPServer());
|
|
78
76
|
applyBindingTarget(context, ClientSessionFactory, this.bindClientSessionFactory()).inSingletonScope();
|
|
79
77
|
applyBindingTarget(context, ClientSessionManager, this.bindClientSessionManager()).inSingletonScope();
|
|
80
78
|
this.configureMultiBinding(new MultiBinding<GLSPServerListener>(GLSPServerListener), binding =>
|
|
@@ -83,10 +81,9 @@ export class ServerModule extends GLSPModule {
|
|
|
83
81
|
|
|
84
82
|
applyBindingTarget(context, GlobalActionProvider, this.bindGlobalActionProvider()).inSingletonScope();
|
|
85
83
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
applyBindingTarget(context, JsonRpcGLSPClientProxy, this.bindJsonRpcGLSPClientProxy());
|
|
84
|
+
if (!isBound(InjectionContainer)) {
|
|
85
|
+
applyBindingTarget(context, InjectionContainer, this.bindInjectionContainer());
|
|
86
|
+
}
|
|
90
87
|
}
|
|
91
88
|
|
|
92
89
|
protected bindDiagramModules(): BindingTarget<Map<string, ContainerModule[]>> {
|
|
@@ -97,10 +94,6 @@ export class ServerModule extends GLSPModule {
|
|
|
97
94
|
return DefaultGLSPServer;
|
|
98
95
|
}
|
|
99
96
|
|
|
100
|
-
protected bindJsonRpcGLSPServer(): BindingTarget<JsonRpcGLSPServer> {
|
|
101
|
-
return { service: GLSPServer };
|
|
102
|
-
}
|
|
103
|
-
|
|
104
97
|
protected bindClientSessionFactory(): BindingTarget<ClientSessionFactory> {
|
|
105
98
|
return DefaultClientSessionFactory;
|
|
106
99
|
}
|
|
@@ -117,14 +110,6 @@ export class ServerModule extends GLSPModule {
|
|
|
117
110
|
return { dynamicValue: context => context.container };
|
|
118
111
|
}
|
|
119
112
|
|
|
120
|
-
protected bindGLSPClientProxy(): BindingTarget<GLSPClientProxy> {
|
|
121
|
-
return DefaultGLSPClientProxy;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
protected bindJsonRpcGLSPClientProxy(): BindingTarget<JsonRpcGLSPClientProxy> {
|
|
125
|
-
return { service: GLSPClientProxy };
|
|
126
|
-
}
|
|
127
|
-
|
|
128
113
|
protected configureGLSPServerListeners(binding: MultiBinding<GLSPServerListener>): void {
|
|
129
114
|
binding.add({ service: ClientSessionManager });
|
|
130
115
|
}
|
package/src/common/index.ts
CHANGED
|
@@ -74,9 +74,7 @@ export * from './operations/create-operation-handler';
|
|
|
74
74
|
export * from './operations/operation-action-handler';
|
|
75
75
|
export * from './operations/operation-handler';
|
|
76
76
|
export * from './operations/operation-handler-registry';
|
|
77
|
-
export * from './protocol/glsp-client-proxy';
|
|
78
77
|
export * from './protocol/glsp-server';
|
|
79
|
-
export * from './protocol/glsp-server-listener';
|
|
80
78
|
export * from './session/client-session';
|
|
81
79
|
export * from './session/client-session-factory';
|
|
82
80
|
export * from './session/client-session-initializer';
|
|
@@ -84,6 +82,7 @@ export * from './session/client-session-listener';
|
|
|
84
82
|
export * from './session/client-session-manager';
|
|
85
83
|
export * from './utils/args-util';
|
|
86
84
|
export * from './utils/client-options-util';
|
|
85
|
+
export * from './utils/console-logger';
|
|
87
86
|
export * from './utils/glsp-server-error';
|
|
88
87
|
export * from './utils/layout-util';
|
|
89
88
|
export * from './utils/logger';
|
|
@@ -13,20 +13,19 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { MaybePromise } from '@eclipse-glsp/protocol';
|
|
16
|
+
import { Disposable, DisposableCollection, MaybePromise } from '@eclipse-glsp/protocol';
|
|
17
17
|
import { Container, ContainerModule, inject, injectable, optional } from 'inversify';
|
|
18
18
|
import { ServerModule } from '../di/server-module';
|
|
19
19
|
import { InjectionContainer } from '../di/service-identifiers';
|
|
20
20
|
import { Logger } from '../utils/logger';
|
|
21
21
|
|
|
22
|
-
export const START_UP_COMPLETE_MSG = '[GLSP-Server]:Startup completed';
|
|
23
|
-
|
|
24
22
|
@injectable()
|
|
25
|
-
export abstract class GLSPServerLauncher<T
|
|
23
|
+
export abstract class GLSPServerLauncher<T> implements Disposable {
|
|
26
24
|
@inject(Logger) protected logger: Logger;
|
|
27
25
|
|
|
28
26
|
protected _modules: ContainerModule[] = [];
|
|
29
27
|
protected running: boolean;
|
|
28
|
+
protected toDispose = new DisposableCollection();
|
|
30
29
|
|
|
31
30
|
@inject(InjectionContainer) @optional() protected parentContainer?: Container;
|
|
32
31
|
|
|
@@ -34,13 +33,13 @@ export abstract class GLSPServerLauncher<T = undefined> {
|
|
|
34
33
|
this._modules.push(serverModule, ...additionalModules);
|
|
35
34
|
}
|
|
36
35
|
|
|
37
|
-
createContainer(): Container {
|
|
36
|
+
createContainer(...additionalModules: ContainerModule[]): Container {
|
|
38
37
|
const container = this.parentContainer ? this.parentContainer.createChild() : new Container();
|
|
39
|
-
container.load(...this._modules);
|
|
38
|
+
container.load(...this._modules, ...additionalModules);
|
|
40
39
|
return container;
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
start(startParams
|
|
42
|
+
start(startParams: T): MaybePromise<void> {
|
|
44
43
|
if (!this.running) {
|
|
45
44
|
this.running = true;
|
|
46
45
|
return this.run(startParams);
|
|
@@ -48,10 +47,11 @@ export abstract class GLSPServerLauncher<T = undefined> {
|
|
|
48
47
|
this.logger.warn('Could not start launcher. Launcher is already running!');
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
protected abstract run(startParams
|
|
50
|
+
protected abstract run(startParams: T): MaybePromise<void>;
|
|
52
51
|
|
|
53
52
|
shutdown(): MaybePromise<void> {
|
|
54
53
|
if (this.running) {
|
|
54
|
+
this.logger.info('Shutdown GLSPServerLauncher');
|
|
55
55
|
const result = this.stop();
|
|
56
56
|
this.running = false;
|
|
57
57
|
return result;
|
|
@@ -59,7 +59,13 @@ export abstract class GLSPServerLauncher<T = undefined> {
|
|
|
59
59
|
this.logger.warn('Could not stop launcher. Launcher is not running!');
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
protected
|
|
62
|
+
protected stop(): MaybePromise<void> {
|
|
63
|
+
this.dispose();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
dispose(): void {
|
|
67
|
+
this.toDispose.dispose();
|
|
68
|
+
}
|
|
63
69
|
|
|
64
70
|
get modules(): ContainerModule[] {
|
|
65
71
|
if (!this._modules) {
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2023 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
Disposable,
|
|
19
|
+
GLSPClientProxy,
|
|
20
|
+
GLSPServer,
|
|
21
|
+
JsonrpcClientProxy,
|
|
22
|
+
JsonrpcGLSPClient,
|
|
23
|
+
configureClientConnection
|
|
24
|
+
} from '@eclipse-glsp/protocol';
|
|
25
|
+
import { Container, ContainerModule, inject, injectable } from 'inversify';
|
|
26
|
+
import * as jsonrpc from 'vscode-jsonrpc';
|
|
27
|
+
import { Logger } from '../utils/logger';
|
|
28
|
+
import { GLSPServerLauncher } from './glsp-server-launcher';
|
|
29
|
+
|
|
30
|
+
export const START_UP_COMPLETE_MSG = '[GLSP-Server]:Startup completed. Accepting requests on port:';
|
|
31
|
+
|
|
32
|
+
export interface JsonRpcServerInstance {
|
|
33
|
+
server: GLSPServer;
|
|
34
|
+
clientConnection: jsonrpc.MessageConnection;
|
|
35
|
+
container: Container;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@injectable()
|
|
39
|
+
export abstract class JsonRpcGLSPServerLauncher<T> extends GLSPServerLauncher<T> {
|
|
40
|
+
@inject(Logger)
|
|
41
|
+
protected override logger: Logger;
|
|
42
|
+
|
|
43
|
+
protected serverInstances = new Map<jsonrpc.MessageConnection, JsonRpcServerInstance>();
|
|
44
|
+
protected startupCompleteMessage = START_UP_COMPLETE_MSG;
|
|
45
|
+
|
|
46
|
+
constructor() {
|
|
47
|
+
super();
|
|
48
|
+
this.toDispose.push(
|
|
49
|
+
Disposable.create(() => {
|
|
50
|
+
this.serverInstances.forEach(instance => this.disposeServerInstance(instance));
|
|
51
|
+
})
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
protected disposeServerInstance(instance: JsonRpcServerInstance): void {
|
|
56
|
+
this.serverInstances.delete(instance.clientConnection);
|
|
57
|
+
instance.server.shutdown();
|
|
58
|
+
instance.container.unbindAll();
|
|
59
|
+
instance.clientConnection.dispose();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected createServerInstance(clientConnection: jsonrpc.MessageConnection): void {
|
|
63
|
+
const container = this.createContainer(this.createJsonRpcModule(clientConnection));
|
|
64
|
+
const server = container.get<GLSPServer>(GLSPServer);
|
|
65
|
+
const instance = { container, clientConnection, server };
|
|
66
|
+
this.serverInstances.set(clientConnection, instance);
|
|
67
|
+
this.configureClientConnection(instance);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
protected createJsonRpcModule(clientConnection: jsonrpc.MessageConnection): ContainerModule {
|
|
71
|
+
return new ContainerModule(bind => {
|
|
72
|
+
bind(GLSPClientProxy).toDynamicValue(ctx => {
|
|
73
|
+
const proxy = ctx.container.resolve(JsonrpcClientProxy);
|
|
74
|
+
proxy.initialize(clientConnection);
|
|
75
|
+
return proxy;
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
protected configureClientConnection(serverInstance: JsonRpcServerInstance): void {
|
|
81
|
+
configureClientConnection(serverInstance.clientConnection, serverInstance.server);
|
|
82
|
+
|
|
83
|
+
serverInstance.clientConnection.onNotification(JsonrpcGLSPClient.ShutdownNotification, () =>
|
|
84
|
+
this.disposeServerInstance(serverInstance)
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
this.logger.info('Starting GLSP server connection');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
protected createClientProxy(serverInstance: JsonRpcServerInstance): GLSPClientProxy {
|
|
91
|
+
const proxy = serverInstance.container.resolve(JsonrpcClientProxy);
|
|
92
|
+
proxy.initialize(serverInstance.clientConnection);
|
|
93
|
+
return proxy;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -13,7 +13,13 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
DisposeClientSessionParameters,
|
|
18
|
+
GLSPClientProxy,
|
|
19
|
+
GLSPServerListener,
|
|
20
|
+
InitializeClientSessionParameters,
|
|
21
|
+
InitializeParameters
|
|
22
|
+
} from '@eclipse-glsp/protocol';
|
|
17
23
|
import { expect } from 'chai';
|
|
18
24
|
import { Container, ContainerModule } from 'inversify';
|
|
19
25
|
import * as sinon from 'sinon';
|
|
@@ -21,9 +27,7 @@ import { GlobalActionProvider } from '../actions/global-action-provider';
|
|
|
21
27
|
import { ClientSessionManager } from '../session/client-session-manager';
|
|
22
28
|
import * as mock from '../test/mock-util';
|
|
23
29
|
import { Logger } from '../utils/logger';
|
|
24
|
-
import { GLSPClientProxy, JsonRpcGLSPClientProxy } from './glsp-client-proxy';
|
|
25
30
|
import { DefaultGLSPServer } from './glsp-server';
|
|
26
|
-
import { GLSPServerListener } from './glsp-server-listener';
|
|
27
31
|
import assert = require('assert');
|
|
28
32
|
|
|
29
33
|
describe('test DefaultGLSPServer', () => {
|
|
@@ -48,7 +52,6 @@ describe('test DefaultGLSPServer', () => {
|
|
|
48
52
|
new ContainerModule(bind => {
|
|
49
53
|
bind(Logger).toConstantValue(new mock.StubLogger());
|
|
50
54
|
bind(GLSPClientProxy).toConstantValue(new mock.StubGLSPClientProxy());
|
|
51
|
-
bind(JsonRpcGLSPClientProxy).toConstantValue(new mock.StubGLSPClientProxy());
|
|
52
55
|
bind(ClientSessionManager).toConstantValue(sessionManager);
|
|
53
56
|
bind(GlobalActionProvider).toConstantValue({ clientActionKinds: new Map<string, string[]>(), serverActionKinds });
|
|
54
57
|
bind(GLSPServerListener).toConstantValue(listener1);
|