@eclipse-glsp/server 1.1.0-RC07 → 1.1.0-RC09
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 +4 -4
- package/lib/browser/launch/worker-server-launcher.d.ts.map +1 -1
- package/lib/browser/launch/worker-server-launcher.js +5 -11
- 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 +1 -1
- package/lib/common/launch/glsp-server-launcher.d.ts.map +1 -1
- package/lib/common/launch/glsp-server-launcher.js +2 -2
- 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/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-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/{browser/di → common/utils}/console-logger.d.ts +7 -1
- package/lib/common/utils/console-logger.d.ts.map +1 -0
- package/lib/{browser/di → common/utils}/console-logger.js +26 -8
- 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/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 +2 -23
- package/lib/node/launch/socket-server-launcher.d.ts.map +1 -1
- package/lib/node/launch/socket-server-launcher.js +8 -28
- package/lib/node/launch/socket-server-launcher.js.map +1 -1
- package/lib/node/launch/websocket-server-launcher.d.ts +2 -8
- package/lib/node/launch/websocket-server-launcher.d.ts.map +1 -1
- package/lib/node/launch/websocket-server-launcher.js +4 -28
- package/lib/node/launch/websocket-server-launcher.js.map +1 -1
- package/package.json +4 -4
- package/src/browser/di/app-module.ts +4 -32
- package/src/browser/index.ts +0 -1
- package/src/browser/launch/worker-server-launcher.ts +7 -13
- 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 +2 -2
- 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 +19 -1
- package/src/common/utils/logger.ts +16 -1
- package/src/node/di/app-module.ts +4 -13
- 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 +8 -30
- package/src/node/launch/websocket-server-launcher.ts +5 -31
- package/lib/browser/di/console-logger.d.ts.map +0 -1
- package/lib/browser/di/console-logger.js.map +0 -1
- package/lib/common/actions/action-dispatcher.spec.d.ts +0 -2
- package/lib/common/actions/action-dispatcher.spec.d.ts.map +0 -1
- package/lib/common/actions/action-dispatcher.spec.js +0 -264
- package/lib/common/actions/action-dispatcher.spec.js.map +0 -1
- package/lib/common/actions/action-handler-registry.spec.d.ts +0 -2
- package/lib/common/actions/action-handler-registry.spec.d.ts.map +0 -1
- package/lib/common/actions/action-handler-registry.spec.js +0 -50
- package/lib/common/actions/action-handler-registry.spec.js.map +0 -1
- package/lib/common/actions/global-action-provider.spec.d.ts +0 -2
- package/lib/common/actions/global-action-provider.spec.d.ts.map +0 -1
- package/lib/common/actions/global-action-provider.spec.js +0 -70
- package/lib/common/actions/global-action-provider.spec.js.map +0 -1
- package/lib/common/command/command-stack.spec.d.ts +0 -2
- package/lib/common/command/command-stack.spec.d.ts.map +0 -1
- package/lib/common/command/command-stack.spec.js +0 -207
- package/lib/common/command/command-stack.spec.js.map +0 -1
- package/lib/common/command/command.spec.d.ts +0 -2
- package/lib/common/command/command.spec.d.ts.map +0 -1
- package/lib/common/command/command.spec.js +0 -86
- package/lib/common/command/command.spec.js.map +0 -1
- package/lib/common/command/recording-command.spec.d.ts +0 -17
- package/lib/common/command/recording-command.spec.d.ts.map +0 -1
- package/lib/common/command/recording-command.spec.js +0 -62
- package/lib/common/command/recording-command.spec.js.map +0 -1
- package/lib/common/di/binding-target.spec.d.ts +0 -2
- package/lib/common/di/binding-target.spec.d.ts.map +0 -1
- package/lib/common/di/binding-target.spec.js +0 -121
- package/lib/common/di/binding-target.spec.js.map +0 -1
- package/lib/common/di/multi-bindings.spec.d.ts +0 -2
- package/lib/common/di/multi-bindings.spec.d.ts.map +0 -1
- package/lib/common/di/multi-bindings.spec.js +0 -137
- package/lib/common/di/multi-bindings.spec.js.map +0 -1
- package/lib/common/diagram/request-type-hints-action-handler.spec.d.ts +0 -2
- package/lib/common/diagram/request-type-hints-action-handler.spec.d.ts.map +0 -1
- package/lib/common/diagram/request-type-hints-action-handler.spec.js +0 -57
- package/lib/common/diagram/request-type-hints-action-handler.spec.js.map +0 -1
- package/lib/common/features/contextactions/context-actions-provider-registry.spec.d.ts +0 -2
- package/lib/common/features/contextactions/context-actions-provider-registry.spec.d.ts.map +0 -1
- package/lib/common/features/contextactions/context-actions-provider-registry.spec.js +0 -34
- package/lib/common/features/contextactions/context-actions-provider-registry.spec.js.map +0 -1
- package/lib/common/features/contextactions/request-context-actions-handler.spec.d.ts +0 -2
- package/lib/common/features/contextactions/request-context-actions-handler.spec.d.ts.map +0 -1
- package/lib/common/features/contextactions/request-context-actions-handler.spec.js +0 -63
- package/lib/common/features/contextactions/request-context-actions-handler.spec.js.map +0 -1
- package/lib/common/features/contextactions/tool-palette-item-provider.spec.d.ts +0 -2
- package/lib/common/features/contextactions/tool-palette-item-provider.spec.d.ts.map +0 -1
- package/lib/common/features/contextactions/tool-palette-item-provider.spec.js +0 -48
- package/lib/common/features/contextactions/tool-palette-item-provider.spec.js.map +0 -1
- package/lib/common/features/directediting/context-edit-validator-registry.spec.d.ts +0 -2
- package/lib/common/features/directediting/context-edit-validator-registry.spec.d.ts.map +0 -1
- package/lib/common/features/directediting/context-edit-validator-registry.spec.js +0 -44
- package/lib/common/features/directediting/context-edit-validator-registry.spec.js.map +0 -1
- package/lib/common/features/directediting/request-edit-validation-handler.spec.d.ts +0 -2
- package/lib/common/features/directediting/request-edit-validation-handler.spec.d.ts.map +0 -1
- package/lib/common/features/directediting/request-edit-validation-handler.spec.js +0 -97
- package/lib/common/features/directediting/request-edit-validation-handler.spec.js.map +0 -1
- package/lib/common/features/model/gmodel-serializer.spec.d.ts +0 -2
- package/lib/common/features/model/gmodel-serializer.spec.d.ts.map +0 -1
- package/lib/common/features/model/gmodel-serializer.spec.js +0 -124
- package/lib/common/features/model/gmodel-serializer.spec.js.map +0 -1
- package/lib/common/operations/operation-handler-registry.spec.d.ts +0 -2
- package/lib/common/operations/operation-handler-registry.spec.d.ts.map +0 -1
- package/lib/common/operations/operation-handler-registry.spec.js +0 -50
- package/lib/common/operations/operation-handler-registry.spec.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/lib/common/protocol/glsp-server.spec.d.ts +0 -2
- package/lib/common/protocol/glsp-server.spec.d.ts.map +0 -1
- package/lib/common/protocol/glsp-server.spec.js +0 -119
- package/lib/common/protocol/glsp-server.spec.js.map +0 -1
- package/lib/common/session/client-session-factory.spec.d.ts +0 -2
- package/lib/common/session/client-session-factory.spec.d.ts.map +0 -1
- package/lib/common/session/client-session-factory.spec.js +0 -56
- package/lib/common/session/client-session-factory.spec.js.map +0 -1
- package/lib/common/session/client-session-manager.spec.d.ts +0 -2
- package/lib/common/session/client-session-manager.spec.d.ts.map +0 -1
- package/lib/common/session/client-session-manager.spec.js +0 -74
- package/lib/common/session/client-session-manager.spec.js.map +0 -1
- package/lib/common/test/mock-util.d.ts +0 -123
- package/lib/common/test/mock-util.d.ts.map +0 -1
- package/lib/common/test/mock-util.js +0 -216
- package/lib/common/test/mock-util.js.map +0 -1
- package/lib/common/utils/promise-queue.spec.d.ts +0 -2
- package/lib/common/utils/promise-queue.spec.d.ts.map +0 -1
- package/lib/common/utils/promise-queue.spec.js +0 -117
- package/lib/common/utils/promise-queue.spec.js.map +0 -1
- package/lib/common/utils/registry.spec.d.ts +0 -2
- package/lib/common/utils/registry.spec.d.ts.map +0 -1
- package/lib/common/utils/registry.spec.js +0 -199
- package/lib/common/utils/registry.spec.js.map +0 -1
- package/lib/node/launch/cli-parser.spec.d.ts +0 -2
- package/lib/node/launch/cli-parser.spec.d.ts.map +0 -1
- package/lib/node/launch/cli-parser.spec.js +0 -56
- package/lib/node/launch/cli-parser.spec.js.map +0 -1
- package/lib/node/launch/socket-cli-parser.spec.d.ts +0 -2
- package/lib/node/launch/socket-cli-parser.spec.d.ts.map +0 -1
- package/lib/node/launch/socket-cli-parser.spec.js +0 -66
- package/lib/node/launch/socket-cli-parser.spec.js.map +0 -1
- package/lib/node/launch/socket-server-launcher.spec.d.ts +0 -17
- package/lib/node/launch/socket-server-launcher.spec.d.ts.map +0 -1
- package/lib/node/launch/socket-server-launcher.spec.js +0 -70
- package/lib/node/launch/socket-server-launcher.spec.js.map +0 -1
- package/src/common/protocol/glsp-client-proxy.ts +0 -65
- package/src/common/protocol/glsp-server-listener.ts +0 -39
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-glsp/server",
|
|
3
|
-
"version": "1.1.0-
|
|
3
|
+
"version": "1.1.0-RC09",
|
|
4
4
|
"description": "A js server framework for Eclipse GLSP",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eclipse",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"watch": "tsc -w"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@eclipse-glsp/graph": "1.1.0-
|
|
63
|
-
"@eclipse-glsp/protocol": "1.1.0-
|
|
62
|
+
"@eclipse-glsp/graph": "1.1.0-RC09",
|
|
63
|
+
"@eclipse-glsp/protocol": "1.1.0-RC09",
|
|
64
64
|
"@types/uuid": "8.3.1",
|
|
65
65
|
"commander": "^8.3.0",
|
|
66
66
|
"fast-json-patch": "^3.1.0",
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"publishConfig": {
|
|
76
76
|
"access": "public"
|
|
77
77
|
},
|
|
78
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "edffbe7d7a2b9e117d7f235b8d629dfde0c1ffe7"
|
|
79
79
|
}
|
|
@@ -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,9 +14,10 @@
|
|
|
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';
|
|
20
21
|
export interface WorkerLaunchOptions {
|
|
21
22
|
context?: Worker;
|
|
22
23
|
}
|
|
@@ -24,22 +25,16 @@ export interface WorkerLaunchOptions {
|
|
|
24
25
|
export const START_UP_COMPLETE_MSG = '[GLSP-Server]:Startup completed.';
|
|
25
26
|
|
|
26
27
|
@injectable()
|
|
27
|
-
export class WorkerServerLauncher extends
|
|
28
|
+
export class WorkerServerLauncher extends JsonRpcGLSPServerLauncher<WorkerLaunchOptions> {
|
|
28
29
|
protected connection?: jsonrpc.MessageConnection;
|
|
29
30
|
|
|
30
31
|
protected run(options: WorkerLaunchOptions): MaybePromise<void> {
|
|
31
32
|
if (this.connection) {
|
|
32
33
|
throw new Error('Error during launch. Server already has an active client connection');
|
|
33
34
|
}
|
|
34
|
-
const container = this.createContainer();
|
|
35
35
|
this.connection = this.createConnection(options);
|
|
36
|
-
|
|
37
|
-
glspServer.connect(this.connection);
|
|
38
|
-
this.connection.onDispose(() => this.disposeClientConnection(container, glspServer));
|
|
39
|
-
|
|
36
|
+
this.createServerInstance(this.connection);
|
|
40
37
|
this.logger.info('GLSP server worker connection established');
|
|
41
|
-
this.connection.listen();
|
|
42
|
-
this.toDispose.push(this.connection);
|
|
43
38
|
postMessage(START_UP_COMPLETE_MSG);
|
|
44
39
|
return new Promise((resolve, rejects) => {
|
|
45
40
|
this.connection?.onClose(() => resolve(undefined));
|
|
@@ -47,9 +42,8 @@ export class WorkerServerLauncher extends GLSPServerLauncher<WorkerLaunchOptions
|
|
|
47
42
|
});
|
|
48
43
|
}
|
|
49
44
|
|
|
50
|
-
protected
|
|
51
|
-
|
|
52
|
-
container.unbindAll();
|
|
45
|
+
protected override disposeServerInstance(instance: JsonRpcServerInstance): void {
|
|
46
|
+
super.disposeServerInstance(instance);
|
|
53
47
|
this.connection = undefined;
|
|
54
48
|
}
|
|
55
49
|
|
|
@@ -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';
|
|
@@ -33,9 +33,9 @@ export abstract class GLSPServerLauncher<T> implements Disposable {
|
|
|
33
33
|
this._modules.push(serverModule, ...additionalModules);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
createContainer(): Container {
|
|
36
|
+
createContainer(...additionalModules: ContainerModule[]): Container {
|
|
37
37
|
const container = this.parentContainer ? this.parentContainer.createChild() : new Container();
|
|
38
|
-
container.load(...this._modules);
|
|
38
|
+
container.load(...this._modules, ...additionalModules);
|
|
39
39
|
return container;
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -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);
|
|
@@ -18,134 +18,26 @@ import {
|
|
|
18
18
|
Args,
|
|
19
19
|
DisposeClientSessionParameters,
|
|
20
20
|
distinctAdd,
|
|
21
|
+
GLSPClientProxy,
|
|
22
|
+
GLSPServer,
|
|
23
|
+
GLSPServerListener,
|
|
21
24
|
InitializeClientSessionParameters,
|
|
22
25
|
InitializeParameters,
|
|
23
26
|
InitializeResult,
|
|
24
|
-
JsonrpcGLSPClient,
|
|
25
27
|
MaybePromise,
|
|
26
28
|
remove,
|
|
27
29
|
ServerActions,
|
|
28
30
|
ServerMessageAction
|
|
29
31
|
} from '@eclipse-glsp/protocol';
|
|
30
32
|
import { inject, injectable, multiInject, optional } from 'inversify';
|
|
31
|
-
import * as jsonrpc from 'vscode-jsonrpc';
|
|
32
|
-
import { MessageConnection } from 'vscode-jsonrpc';
|
|
33
33
|
import { GlobalActionProvider } from '../actions/global-action-provider';
|
|
34
34
|
import { ClientSession } from '../session/client-session';
|
|
35
35
|
import { ClientSessionManager } from '../session/client-session-manager';
|
|
36
36
|
import { GLSPServerError } from '../utils/glsp-server-error';
|
|
37
37
|
import { Logger } from '../utils/logger';
|
|
38
|
-
import { JsonRpcGLSPClientProxy } from './glsp-client-proxy';
|
|
39
|
-
import { GLSPServerListener } from './glsp-server-listener';
|
|
40
|
-
|
|
41
|
-
export const GLSPServer = Symbol('GLSPServer');
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Interface for implementations of a server component using json-rpc for client-server communication.
|
|
45
|
-
* Based on the specification of the Graphical Language Server Protocol:
|
|
46
|
-
* https://github.com/eclipse-glsp/glsp/blob/master/PROTOCOL.md
|
|
47
|
-
*/
|
|
48
|
-
export interface GLSPServer {
|
|
49
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
* The `initialize` request has to be the first request from the client to the server. Until the server has responded
|
|
52
|
-
* with an {@link InitializeResult} no other request or notification can be handled and is expected to throw an
|
|
53
|
-
* error. A client is uniquely identified by an `applicationId` and has to specify on which `protocolVersion` it is
|
|
54
|
-
* based on. In addition, custom arguments can be provided in the `args` map to allow for custom initialization
|
|
55
|
-
* behavior on the server.
|
|
56
|
-
*
|
|
57
|
-
* After successfully initialization all {@link GLSPServerListener}s are notified via the
|
|
58
|
-
* {@link GLSPServerListener.serverInitialized} method.
|
|
59
|
-
*
|
|
60
|
-
* @param params the {@link InitializeParameters}.
|
|
61
|
-
* @returns A promise of the {@link InitializeResult} .
|
|
62
|
-
*
|
|
63
|
-
* @throws {@link Error} Subsequent initialize requests return the {@link InitializeResult} of the initial request
|
|
64
|
-
* if the given application id and protocol version are matching, otherwise the promise rejects with an error.
|
|
65
|
-
*
|
|
66
|
-
*/
|
|
67
|
-
initialize(params: InitializeParameters): Promise<InitializeResult>;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* The `initializeClientSession` request is sent to the server whenever a new graphical representation (diagram) is
|
|
71
|
-
* created. Each individual diagram on the client side counts as one session and has to provide a unique
|
|
72
|
-
* `clientSessionId` and its `diagramType`. In addition, custom arguments can be provided in the `args` map to allow
|
|
73
|
-
* for custom initialization behavior on the server. Subsequent `initializeClientSession` requests for the same
|
|
74
|
-
* client id and diagram type are expected to resolve successfully but don't have an actual effect because the
|
|
75
|
-
* corresponding client session is already initialized.
|
|
76
|
-
*
|
|
77
|
-
* @param params the {@link InitializeClientSessionParameters}.
|
|
78
|
-
* @returns A promise that completes when the initialization was successful.
|
|
79
|
-
*/
|
|
80
|
-
initializeClientSession(params: InitializeClientSessionParameters): Promise<void>;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* The 'DisposeClientSession' request is sent to the server when a graphical representation (diagram) is no longer
|
|
84
|
-
* needed, e.g. the tab containing the diagram widget has been closed. The session is identified by its unique
|
|
85
|
-
* `clientSessionId`. In addition, custom arguments can be provided in the `args` map to allow for custom dispose
|
|
86
|
-
* behavior on the server.
|
|
87
|
-
*
|
|
88
|
-
* @param params the {@link DisposeClientSessionParameters}.
|
|
89
|
-
* @returns A `void` promise that completes if the disposal was successful.
|
|
90
|
-
*
|
|
91
|
-
*/
|
|
92
|
-
disposeClientSession(params: DisposeClientSessionParameters): Promise<void>;
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* A `process` notification is sent from the client to server when the server should handle i.e. process a specific
|
|
96
|
-
* {@link ActionMessage}. Any communication that is performed between initialization and shutdown is handled by
|
|
97
|
-
* sending action messages, either from the client to the server or from the server to the client. This is the core
|
|
98
|
-
* part of the Graphical Language Server Protocol.
|
|
99
|
-
*
|
|
100
|
-
* @param message The {@link ActionMessage} that should be processed.
|
|
101
|
-
*/
|
|
102
|
-
process(message: ActionMessage): void;
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* The `shutdown` notification is sent from the client to the server if the client disconnects from the server (e.g.
|
|
106
|
-
* the client application has been closed).
|
|
107
|
-
* This gives the server a chance to clean up and dispose any resources dedicated to the client and its sessions.
|
|
108
|
-
* All {@link GLSPServerListener}s are notified via the {@link GLSPServerListener.serverShutDown} method.
|
|
109
|
-
* Afterwards the server instance is considered to be disposed and can no longer be used for handling requests.
|
|
110
|
-
*
|
|
111
|
-
*/
|
|
112
|
-
shutdown(): void;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Register a new {@link GLSPServerListener}.
|
|
116
|
-
*
|
|
117
|
-
* @param listener The listener that should be registered.
|
|
118
|
-
* @returns `true` if the listener was registered successfully, `false` otherwise (e.g. listener is already
|
|
119
|
-
* registered).
|
|
120
|
-
*/
|
|
121
|
-
addListener(listener: GLSPServerListener): boolean;
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Unregister a {@link GLSPServerListener}.
|
|
125
|
-
*
|
|
126
|
-
* @param listener The listener that should be removed
|
|
127
|
-
* @returns 'true' if the listener was unregistered successfully, `false` otherwise (e.g. listener is was not
|
|
128
|
-
* registered in the first place).
|
|
129
|
-
*/
|
|
130
|
-
removeListener(listener: GLSPServerListener): boolean;
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* get a {@link ClientSession}.
|
|
134
|
-
*
|
|
135
|
-
* @param sessionId The id of the session to get
|
|
136
|
-
* @returns The either the ClientSession or undefined, if no ClientSession was found for the given id.
|
|
137
|
-
*/
|
|
138
|
-
getClientSession(sessionId: string): ClientSession | undefined;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export const JsonRpcGLSPServer = Symbol('JsonRpcGLSPServer');
|
|
142
|
-
|
|
143
|
-
export interface JsonRpcGLSPServer extends GLSPServer {
|
|
144
|
-
connect(connection: jsonrpc.MessageConnection): void;
|
|
145
|
-
}
|
|
146
38
|
|
|
147
39
|
@injectable()
|
|
148
|
-
export class DefaultGLSPServer implements
|
|
40
|
+
export class DefaultGLSPServer implements GLSPServer {
|
|
149
41
|
public static readonly PROTOCOL_VERSION = '1.0.0';
|
|
150
42
|
|
|
151
43
|
@inject(Logger)
|
|
@@ -157,8 +49,9 @@ export class DefaultGLSPServer implements JsonRpcGLSPServer {
|
|
|
157
49
|
@inject(GlobalActionProvider)
|
|
158
50
|
protected actionProvider: GlobalActionProvider;
|
|
159
51
|
|
|
160
|
-
@inject(
|
|
161
|
-
|
|
52
|
+
@inject(GLSPClientProxy)
|
|
53
|
+
@optional()
|
|
54
|
+
protected glspClientProxy?: GLSPClientProxy;
|
|
162
55
|
|
|
163
56
|
protected initializeResult?: InitializeResult;
|
|
164
57
|
|
|
@@ -172,18 +65,6 @@ export class DefaultGLSPServer implements JsonRpcGLSPServer {
|
|
|
172
65
|
serverListeners.forEach(listener => this.addListener(listener));
|
|
173
66
|
}
|
|
174
67
|
|
|
175
|
-
protected setupJsonRpc(connection: MessageConnection): void {
|
|
176
|
-
connection.onRequest(JsonrpcGLSPClient.InitializeRequest.method, (params: InitializeParameters) => this.initialize(params));
|
|
177
|
-
connection.onRequest(JsonrpcGLSPClient.InitializeClientSessionRequest, (params: InitializeClientSessionParameters) =>
|
|
178
|
-
this.initializeClientSession(params)
|
|
179
|
-
);
|
|
180
|
-
connection.onRequest(JsonrpcGLSPClient.DisposeClientSessionRequest, (params: DisposeClientSessionParameters) =>
|
|
181
|
-
this.disposeClientSession(params)
|
|
182
|
-
);
|
|
183
|
-
connection.onNotification(JsonrpcGLSPClient.ActionMessageNotification, message => this.process(message));
|
|
184
|
-
connection.onNotification(JsonrpcGLSPClient.ShutdownNotification, () => this.shutdown());
|
|
185
|
-
}
|
|
186
|
-
|
|
187
68
|
protected validateProtocolVersion(params: InitializeParameters): void {
|
|
188
69
|
if (params.protocolVersion !== DefaultGLSPServer.PROTOCOL_VERSION) {
|
|
189
70
|
throw new Error(
|
|
@@ -237,6 +118,7 @@ export class DefaultGLSPServer implements JsonRpcGLSPServer {
|
|
|
237
118
|
this.validateServerInitialized();
|
|
238
119
|
|
|
239
120
|
const session = this.sessionManager.getOrCreateClientSession(params);
|
|
121
|
+
|
|
240
122
|
this.clientSessions.set(params.clientSessionId, session);
|
|
241
123
|
return this.handleInitializeClientSessionArgs(params.args);
|
|
242
124
|
}
|
|
@@ -281,7 +163,15 @@ export class DefaultGLSPServer implements JsonRpcGLSPServer {
|
|
|
281
163
|
errorMsg = reason.message;
|
|
282
164
|
}
|
|
283
165
|
const errorAction = ServerMessageAction.create(errorMsg, { severity: 'ERROR', details });
|
|
284
|
-
this.
|
|
166
|
+
this.sendToClient({ clientId: message.clientId, action: errorAction });
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
protected sendToClient(message: ActionMessage): void {
|
|
170
|
+
if (this.glspClientProxy) {
|
|
171
|
+
this.glspClientProxy.process(message);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
throw new Error("Could not send message to client. No 'GLSPClientProxy' is connected");
|
|
285
175
|
}
|
|
286
176
|
|
|
287
177
|
getClientSession(sessionId: string): ClientSession | undefined {
|
|
@@ -295,11 +185,6 @@ export class DefaultGLSPServer implements JsonRpcGLSPServer {
|
|
|
295
185
|
this.initializeResult = undefined;
|
|
296
186
|
}
|
|
297
187
|
|
|
298
|
-
public connect(connection: jsonrpc.MessageConnection): void {
|
|
299
|
-
this.setupJsonRpc(connection);
|
|
300
|
-
this.glspClient.connect(connection);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
188
|
protected isInitialized(): boolean {
|
|
304
189
|
return this.initializeResult !== undefined;
|
|
305
190
|
}
|