@opensumi/ide-connection 3.0.2-next-1715689237.0 → 3.0.2-next-1715702831.0
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/ws-channel-handler.d.ts +6 -0
- package/lib/browser/ws-channel-handler.d.ts.map +1 -1
- package/lib/browser/ws-channel-handler.js +50 -4
- package/lib/browser/ws-channel-handler.js.map +1 -1
- package/lib/common/fury-extends/one-of.d.ts +2 -1
- package/lib/common/fury-extends/one-of.d.ts.map +1 -1
- package/lib/common/fury-extends/one-of.js +12 -5
- package/lib/common/fury-extends/one-of.js.map +1 -1
- package/lib/common/server-handler.d.ts +5 -3
- package/lib/common/server-handler.d.ts.map +1 -1
- package/lib/common/server-handler.js +34 -11
- package/lib/common/server-handler.js.map +1 -1
- package/lib/common/ws-channel.d.ts +65 -24
- package/lib/common/ws-channel.d.ts.map +1 -1
- package/lib/common/ws-channel.js +51 -7
- package/lib/common/ws-channel.js.map +1 -1
- package/lib/node/ws.d.ts.map +1 -1
- package/lib/node/ws.js +1 -0
- package/lib/node/ws.js.map +1 -1
- package/package.json +5 -5
- package/src/browser/ws-channel-handler.ts +56 -7
- package/src/common/fury-extends/one-of.ts +12 -3
- package/src/common/server-handler.ts +50 -14
- package/src/common/ws-channel.ts +110 -39
- package/src/node/ws.ts +1 -0
package/lib/common/ws-channel.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pongMessage = exports.pingMessage = exports.parse = exports.stringify = exports.CloseProtocol = exports.BinaryProtocol = exports.DataProtocol = exports.ServerReadyProtocol = exports.OpenProtocol = exports.PongProtocol = exports.PingProtocol = exports.WSServerChannel = exports.WSChannel = void 0;
|
|
3
|
+
exports.pongMessage = exports.pingMessage = exports.parse = exports.stringify = exports.CloseProtocol = exports.BinaryProtocol = exports.DataProtocol = exports.ErrorProtocol = exports.ErrorMessageCode = exports.ServerReadyProtocol = exports.OpenProtocol = exports.PongProtocol = exports.PingProtocol = exports.WSServerChannel = exports.WSChannel = void 0;
|
|
4
4
|
const fury_1 = require("@furyjs/fury");
|
|
5
5
|
const events_1 = require("@opensumi/events");
|
|
6
6
|
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
@@ -26,6 +26,7 @@ class WSChannel {
|
|
|
26
26
|
this.sendQueue = [];
|
|
27
27
|
this._isServerReady = false;
|
|
28
28
|
this.logger = console;
|
|
29
|
+
this.stateTracer = this._disposables.add(new ide_core_common_1.StateTracer());
|
|
29
30
|
const { id, logger, ensureServerReady } = options;
|
|
30
31
|
this.id = id;
|
|
31
32
|
if (logger) {
|
|
@@ -59,6 +60,13 @@ class WSChannel {
|
|
|
59
60
|
pause() {
|
|
60
61
|
this._isServerReady = false;
|
|
61
62
|
}
|
|
63
|
+
onServerReady(cb) {
|
|
64
|
+
if (this._isServerReady) {
|
|
65
|
+
cb();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
return this.emitter.on('open', cb);
|
|
69
|
+
}
|
|
62
70
|
resume() {
|
|
63
71
|
this._isServerReady = true;
|
|
64
72
|
if (this.sendQueue) {
|
|
@@ -71,6 +79,7 @@ class WSChannel {
|
|
|
71
79
|
dispatch(msg) {
|
|
72
80
|
switch (msg.kind) {
|
|
73
81
|
case 'server-ready':
|
|
82
|
+
this.stateTracer.fulfill(msg.token);
|
|
74
83
|
this.resume();
|
|
75
84
|
if (this.timer) {
|
|
76
85
|
clearTimeout(this.timer);
|
|
@@ -85,22 +94,32 @@ class WSChannel {
|
|
|
85
94
|
break;
|
|
86
95
|
}
|
|
87
96
|
}
|
|
88
|
-
|
|
97
|
+
/**
|
|
98
|
+
* @param connectionToken 一个 connection token 用于在全链路中追踪一个 channel 的生命周期,防止 channel 被重复打开
|
|
99
|
+
*/
|
|
100
|
+
open(path, clientId, connectionToken = (0, ide_core_common_1.randomString)(16)) {
|
|
89
101
|
this.channelPath = path;
|
|
102
|
+
if (this.stateTracer.has(connectionToken)) {
|
|
103
|
+
this.logger.warn(`channel already opened or in progress, path: ${path}, clientId: ${clientId}, connectionToken: ${connectionToken}`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.stateTracer.record(connectionToken);
|
|
90
107
|
this.connection.send(stringify({
|
|
91
108
|
kind: 'open',
|
|
92
109
|
id: this.id,
|
|
93
110
|
path,
|
|
94
111
|
clientId,
|
|
112
|
+
connectionToken,
|
|
95
113
|
}));
|
|
96
114
|
if (this._ensureServerReady) {
|
|
97
|
-
this.ensureOpenSend(path, clientId);
|
|
115
|
+
this.ensureOpenSend(path, clientId, connectionToken);
|
|
98
116
|
}
|
|
117
|
+
return connectionToken;
|
|
99
118
|
}
|
|
100
119
|
/**
|
|
101
120
|
* 启动定时器,确保 server-ready 消息在一定时间内到达
|
|
102
121
|
*/
|
|
103
|
-
ensureOpenSend(path, clientId) {
|
|
122
|
+
ensureOpenSend(path, clientId, connectionToken) {
|
|
104
123
|
if (this.timer) {
|
|
105
124
|
clearTimeout(this.timer);
|
|
106
125
|
}
|
|
@@ -108,7 +127,8 @@ class WSChannel {
|
|
|
108
127
|
if (this._isServerReady) {
|
|
109
128
|
return;
|
|
110
129
|
}
|
|
111
|
-
this.
|
|
130
|
+
this.stateTracer.delete(connectionToken);
|
|
131
|
+
this.open(path, clientId, connectionToken);
|
|
112
132
|
}, 500);
|
|
113
133
|
}
|
|
114
134
|
send(content) {
|
|
@@ -169,14 +189,26 @@ class WSServerChannel extends WSChannel {
|
|
|
169
189
|
constructor(connection, options) {
|
|
170
190
|
super(connection, options);
|
|
171
191
|
this.connection = connection;
|
|
192
|
+
this.messageQueue = [];
|
|
172
193
|
this.clientId = options.clientId;
|
|
173
194
|
}
|
|
174
|
-
serverReady() {
|
|
195
|
+
serverReady(token) {
|
|
175
196
|
this.connection.send(stringify({
|
|
176
197
|
kind: 'server-ready',
|
|
177
198
|
id: this.id,
|
|
199
|
+
token,
|
|
178
200
|
}));
|
|
179
201
|
}
|
|
202
|
+
dispatch(msg) {
|
|
203
|
+
switch (msg.kind) {
|
|
204
|
+
case 'data':
|
|
205
|
+
this.emitter.emit('message', msg.content);
|
|
206
|
+
break;
|
|
207
|
+
case 'binary':
|
|
208
|
+
this.emitter.emit('binary', msg.binary);
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
180
212
|
}
|
|
181
213
|
exports.WSServerChannel = WSServerChannel;
|
|
182
214
|
exports.PingProtocol = fury_1.Type.object('ping', {
|
|
@@ -191,9 +223,20 @@ exports.OpenProtocol = fury_1.Type.object('open', {
|
|
|
191
223
|
clientId: fury_1.Type.string(),
|
|
192
224
|
id: fury_1.Type.string(),
|
|
193
225
|
path: fury_1.Type.string(),
|
|
226
|
+
connectionToken: fury_1.Type.string(),
|
|
194
227
|
});
|
|
195
228
|
exports.ServerReadyProtocol = fury_1.Type.object('server-ready', {
|
|
196
229
|
id: fury_1.Type.string(),
|
|
230
|
+
token: fury_1.Type.string(),
|
|
231
|
+
});
|
|
232
|
+
var ErrorMessageCode;
|
|
233
|
+
(function (ErrorMessageCode) {
|
|
234
|
+
ErrorMessageCode[ErrorMessageCode["ChannelNotFound"] = 1] = "ChannelNotFound";
|
|
235
|
+
})(ErrorMessageCode = exports.ErrorMessageCode || (exports.ErrorMessageCode = {}));
|
|
236
|
+
exports.ErrorProtocol = fury_1.Type.object('error', {
|
|
237
|
+
id: fury_1.Type.string(),
|
|
238
|
+
code: fury_1.Type.uint16(),
|
|
239
|
+
message: fury_1.Type.string(),
|
|
197
240
|
});
|
|
198
241
|
exports.DataProtocol = fury_1.Type.object('data', {
|
|
199
242
|
id: fury_1.Type.string(),
|
|
@@ -208,7 +251,7 @@ exports.CloseProtocol = fury_1.Type.object('close', {
|
|
|
208
251
|
code: fury_1.Type.uint32(),
|
|
209
252
|
reason: fury_1.Type.string(),
|
|
210
253
|
});
|
|
211
|
-
const serializer = (0, one_of_1.
|
|
254
|
+
const serializer = (0, one_of_1.oneOf)([
|
|
212
255
|
exports.PingProtocol,
|
|
213
256
|
exports.PongProtocol,
|
|
214
257
|
exports.OpenProtocol,
|
|
@@ -216,6 +259,7 @@ const serializer = (0, one_of_1.oneOf7)([
|
|
|
216
259
|
exports.DataProtocol,
|
|
217
260
|
exports.BinaryProtocol,
|
|
218
261
|
exports.CloseProtocol,
|
|
262
|
+
exports.ErrorProtocol,
|
|
219
263
|
]);
|
|
220
264
|
function stringify(obj) {
|
|
221
265
|
return serializer.serialize(obj);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-channel.js","sourceRoot":"","sources":["../../src/common/ws-channel.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AAEpC,6CAAgD;AAChD,+
|
|
1
|
+
{"version":3,"file":"ws-channel.js","sourceRoot":"","sources":["../../src/common/ws-channel.ts"],"names":[],"mappings":"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"}
|
package/lib/node/ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO;IACvF,IAAI,CAAC,IAAI,IAAI;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC;IACnC,gBAAgB,CAAC,EAAE;QAEjB,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;CACH;AAED,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,MAAM;IANT,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,kBAAkB,CAAqB;gBAG7C,MAAM,EAAE,IAAI,CAAC,MAAM,EACX,MAAM,GAAE,GAAa,EAC7B,IAAI,SAAO,EACX,kBAAkB,GAAE,gBAAgB,EAAO;IAUtC,eAAe,CAAC,OAAO,EAAE,gBAAgB;IASzC,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAkBhD,IAAI;IAKX,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO;IACvF,IAAI,CAAC,IAAI,IAAI;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC;IACnC,gBAAgB,CAAC,EAAE;QAEjB,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;CACH;AAED,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,MAAM;IANT,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,kBAAkB,CAAqB;gBAG7C,MAAM,EAAE,IAAI,CAAC,MAAM,EACX,MAAM,GAAE,GAAa,EAC7B,IAAI,SAAO,EACX,kBAAkB,GAAE,gBAAgB,EAAO;IAUtC,eAAe,CAAC,OAAO,EAAE,gBAAgB;IASzC,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAkBhD,IAAI;IAKX,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;CA4BtB"}
|
package/lib/node/ws.js
CHANGED
package/lib/node/ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-connection",
|
|
3
|
-
"version": "3.0.2-next-
|
|
3
|
+
"version": "3.0.2-next-1715702831.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -19,16 +19,16 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@furyjs/fury": "0.5.9-beta",
|
|
21
21
|
"@opensumi/events": "^1.0.0",
|
|
22
|
-
"@opensumi/ide-core-common": "3.0.2-next-
|
|
22
|
+
"@opensumi/ide-core-common": "3.0.2-next-1715702831.0",
|
|
23
23
|
"@opensumi/reconnecting-websocket": "^4.4.0",
|
|
24
24
|
"@opensumi/vscode-jsonrpc": "^8.0.0-next.2",
|
|
25
25
|
"path-to-regexp": "^6.2.1",
|
|
26
26
|
"ws": "^8.16.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@opensumi/ide-components": "3.0.2-next-
|
|
30
|
-
"@opensumi/ide-dev-tool": "3.0.2-next-
|
|
29
|
+
"@opensumi/ide-components": "3.0.2-next-1715702831.0",
|
|
30
|
+
"@opensumi/ide-dev-tool": "3.0.2-next-1715702831.0",
|
|
31
31
|
"@opensumi/mock-socket": "^9.3.1"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "6dee66531d1c197674858180b901961aac2948ec"
|
|
34
34
|
}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EventEmitter } from '@opensumi/events';
|
|
2
|
+
import { Barrier, Deferred, DisposableStore, IReporterService, MultiMap, REPORT_NAME } from '@opensumi/ide-core-common';
|
|
2
3
|
|
|
3
4
|
import { NetSocketConnection } from '../common/connection';
|
|
4
5
|
import { ReconnectingWebSocketConnection } from '../common/connection/drivers/reconnecting-websocket';
|
|
5
6
|
import { ConnectionInfo, WSCloseInfo } from '../common/types';
|
|
6
|
-
import { WSChannel, parse, pingMessage } from '../common/ws-channel';
|
|
7
|
+
import { ErrorMessageCode, WSChannel, parse, pingMessage } from '../common/ws-channel';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Channel Handler in browser
|
|
10
11
|
*/
|
|
11
12
|
export class WSChannelHandler {
|
|
13
|
+
private _disposables = new DisposableStore();
|
|
14
|
+
|
|
15
|
+
private _onChannelCreatedEmitter = this._disposables.add(new EventEmitter<Record<string, [WSChannel]>>());
|
|
16
|
+
public onChannelCreated(path: string, listener: (channel: WSChannel) => void) {
|
|
17
|
+
return this._onChannelCreatedEmitter.on(path, listener);
|
|
18
|
+
}
|
|
19
|
+
|
|
12
20
|
private channelMap: Map<string, WSChannel> = new Map();
|
|
13
21
|
private channelCloseEventMap = new MultiMap<string, WSCloseInfo>();
|
|
14
22
|
private logger = console;
|
|
@@ -58,6 +66,21 @@ export class WSChannelHandler {
|
|
|
58
66
|
case 'pong':
|
|
59
67
|
// pong 没有 msg.id, 且不需要分发, 不处理
|
|
60
68
|
break;
|
|
69
|
+
case 'error':
|
|
70
|
+
this.logger.error(this.LOG_TAG, `receive error: id: ${msg.id}, code: ${msg.code}, error: ${msg.message}`);
|
|
71
|
+
switch (msg.code) {
|
|
72
|
+
case ErrorMessageCode.ChannelNotFound:
|
|
73
|
+
if (this.channelMap.has(msg.id)) {
|
|
74
|
+
// 如果远程报错 channel 不存在但是本机存在,则重新打开
|
|
75
|
+
const channel = this.channelMap.get(msg.id)!;
|
|
76
|
+
if (channel.channelPath) {
|
|
77
|
+
channel.pause();
|
|
78
|
+
channel.open(channel.channelPath, this.clientId);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
61
84
|
default: {
|
|
62
85
|
const channel = this.channelMap.get(msg.id);
|
|
63
86
|
if (channel) {
|
|
@@ -79,7 +102,7 @@ export class WSChannelHandler {
|
|
|
79
102
|
|
|
80
103
|
this.connection.onClose((code, reason) => {
|
|
81
104
|
this.channelMap.forEach((channel) => {
|
|
82
|
-
channel.close(code
|
|
105
|
+
channel.close(code, reason);
|
|
83
106
|
});
|
|
84
107
|
});
|
|
85
108
|
|
|
@@ -101,12 +124,18 @@ export class WSChannelHandler {
|
|
|
101
124
|
await this.openingBarrier.wait();
|
|
102
125
|
}
|
|
103
126
|
|
|
127
|
+
private fillKey(channelPath: string) {
|
|
128
|
+
return `${this.clientId}:${channelPath}`;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public getChannel(channelPath: string) {
|
|
132
|
+
return this.channelMap.get(this.fillKey(channelPath));
|
|
133
|
+
}
|
|
134
|
+
|
|
104
135
|
public async openChannel(channelPath: string) {
|
|
105
|
-
const key =
|
|
136
|
+
const key = this.fillKey(channelPath);
|
|
106
137
|
if (this.channelMap.has(key)) {
|
|
107
|
-
|
|
108
|
-
channel.dispose();
|
|
109
|
-
|
|
138
|
+
this.channelMap.get(key)!.dispose();
|
|
110
139
|
this.logger.log(this.LOG_TAG, `channel ${key} already exists, dispose it`);
|
|
111
140
|
}
|
|
112
141
|
|
|
@@ -116,6 +145,7 @@ export class WSChannelHandler {
|
|
|
116
145
|
ensureServerReady: true,
|
|
117
146
|
});
|
|
118
147
|
this.channelMap.set(channel.id, channel);
|
|
148
|
+
this._onChannelCreatedEmitter.emit(channelPath, channel);
|
|
119
149
|
|
|
120
150
|
let channelOpenedCount = 0;
|
|
121
151
|
|
|
@@ -169,5 +199,24 @@ export class WSChannelHandler {
|
|
|
169
199
|
if (this.heartbeatMessageTimer) {
|
|
170
200
|
clearTimeout(this.heartbeatMessageTimer);
|
|
171
201
|
}
|
|
202
|
+
this._disposables.dispose();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
awaitChannelReady(channelPath: string) {
|
|
206
|
+
const channel = this.getChannel(channelPath);
|
|
207
|
+
const deferred = new Deferred<void>();
|
|
208
|
+
if (channel) {
|
|
209
|
+
channel.onServerReady(() => {
|
|
210
|
+
deferred.resolve();
|
|
211
|
+
});
|
|
212
|
+
} else {
|
|
213
|
+
const dispose = this.onChannelCreated(channelPath, (channel) => {
|
|
214
|
+
channel.onServerReady(() => {
|
|
215
|
+
deferred.resolve();
|
|
216
|
+
});
|
|
217
|
+
dispose.dispose();
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return deferred.promise;
|
|
172
221
|
}
|
|
173
222
|
}
|
|
@@ -5,7 +5,9 @@ import { FuryFactoryReturn, furyFactory } from './shared';
|
|
|
5
5
|
|
|
6
6
|
type Writable = Record<string, any> & { kind: string };
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
const cap = 8;
|
|
9
|
+
|
|
10
|
+
export const oneOf = (
|
|
9
11
|
schemas: [
|
|
10
12
|
TypeDescription,
|
|
11
13
|
TypeDescription,
|
|
@@ -14,6 +16,7 @@ export const oneOf7 = (
|
|
|
14
16
|
TypeDescription,
|
|
15
17
|
TypeDescription,
|
|
16
18
|
TypeDescription,
|
|
19
|
+
TypeDescription,
|
|
17
20
|
],
|
|
18
21
|
context?: FuryFactoryReturn,
|
|
19
22
|
) => {
|
|
@@ -23,8 +26,8 @@ export const oneOf7 = (
|
|
|
23
26
|
|
|
24
27
|
const { fury, reader, writer } = context;
|
|
25
28
|
|
|
26
|
-
const serializers = new Array(
|
|
27
|
-
const kinds = new Array(
|
|
29
|
+
const serializers = new Array(cap) as Serializer[];
|
|
30
|
+
const kinds = new Array(cap) as string[];
|
|
28
31
|
|
|
29
32
|
const kindToIndex = {} as Record<string, number>;
|
|
30
33
|
|
|
@@ -62,6 +65,9 @@ export const oneOf7 = (
|
|
|
62
65
|
case 6:
|
|
63
66
|
v = serializers[6].read();
|
|
64
67
|
break;
|
|
68
|
+
case 7:
|
|
69
|
+
v = serializers[7].read();
|
|
70
|
+
break;
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
v.kind = kinds[idx];
|
|
@@ -97,6 +103,9 @@ export const oneOf7 = (
|
|
|
97
103
|
case 6:
|
|
98
104
|
serializers[6].write(v);
|
|
99
105
|
break;
|
|
106
|
+
case 7:
|
|
107
|
+
serializers[7].write(v);
|
|
108
|
+
break;
|
|
100
109
|
}
|
|
101
110
|
|
|
102
111
|
return writer.dump();
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
+
import { MultiMap } from '@opensumi/ide-core-common';
|
|
2
|
+
|
|
1
3
|
import { IConnectionShape } from './connection/types';
|
|
2
4
|
import { ILogger } from './types';
|
|
3
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
ChannelMessage,
|
|
7
|
+
ErrorMessageCode,
|
|
8
|
+
WSChannel,
|
|
9
|
+
WSServerChannel,
|
|
10
|
+
parse,
|
|
11
|
+
pongMessage,
|
|
12
|
+
stringify,
|
|
13
|
+
} from './ws-channel';
|
|
4
14
|
|
|
5
15
|
export interface IPathHandler {
|
|
6
16
|
dispose: (channel: WSChannel, connectionId: string) => void;
|
|
@@ -68,7 +78,7 @@ export class CommonChannelPathHandler {
|
|
|
68
78
|
});
|
|
69
79
|
});
|
|
70
80
|
}
|
|
71
|
-
|
|
81
|
+
openChannel(path: string, channel: WSChannel, clientId: string) {
|
|
72
82
|
// 根据 path 拿到注册的 handler
|
|
73
83
|
let handlerArr = this.get(path);
|
|
74
84
|
let params: Record<string, string> | undefined;
|
|
@@ -99,30 +109,38 @@ export const commonChannelPathHandler = new CommonChannelPathHandler();
|
|
|
99
109
|
|
|
100
110
|
export abstract class BaseCommonChannelHandler {
|
|
101
111
|
protected channelMap: Map<string, WSServerChannel> = new Map();
|
|
112
|
+
protected messageQueue = new MultiMap<string, ChannelMessage>();
|
|
102
113
|
|
|
103
|
-
heartbeatTimer: NodeJS.Timeout | null = null;
|
|
114
|
+
protected heartbeatTimer: NodeJS.Timeout | null = null;
|
|
104
115
|
|
|
105
116
|
constructor(public handlerId: string, protected logger: ILogger = console) {}
|
|
106
117
|
|
|
107
118
|
abstract doHeartbeat(connection: any): void;
|
|
108
119
|
|
|
109
120
|
private heartbeat(connection: any) {
|
|
110
|
-
const timer = global.setTimeout(() => {
|
|
111
|
-
this.doHeartbeat(connection);
|
|
112
|
-
this.heartbeat(connection);
|
|
113
|
-
}, 5000);
|
|
114
|
-
|
|
115
121
|
if (this.heartbeatTimer) {
|
|
116
122
|
clearTimeout(this.heartbeatTimer);
|
|
117
123
|
}
|
|
118
124
|
|
|
119
|
-
this.heartbeatTimer =
|
|
125
|
+
this.heartbeatTimer = global.setTimeout(() => {
|
|
126
|
+
this.doHeartbeat(connection);
|
|
127
|
+
this.heartbeat(connection);
|
|
128
|
+
}, 5000);
|
|
120
129
|
}
|
|
121
130
|
|
|
122
131
|
receiveConnection(connection: IConnectionShape<Uint8Array>) {
|
|
123
132
|
let clientId: string;
|
|
124
133
|
this.heartbeat(connection);
|
|
125
134
|
|
|
135
|
+
const getOrCreateChannel = (id: string, clientId: string) => {
|
|
136
|
+
let channel = this.channelMap.get(id);
|
|
137
|
+
if (!channel) {
|
|
138
|
+
channel = new WSServerChannel(connection, { id, clientId, logger: this.logger });
|
|
139
|
+
this.channelMap.set(id, channel);
|
|
140
|
+
}
|
|
141
|
+
return channel;
|
|
142
|
+
};
|
|
143
|
+
|
|
126
144
|
connection.onMessage((data: Uint8Array) => {
|
|
127
145
|
let msg: ChannelMessage;
|
|
128
146
|
try {
|
|
@@ -133,24 +151,41 @@ export abstract class BaseCommonChannelHandler {
|
|
|
133
151
|
connection.send(pongMessage);
|
|
134
152
|
break;
|
|
135
153
|
case 'open': {
|
|
136
|
-
const { id, path } = msg;
|
|
154
|
+
const { id, path, connectionToken } = msg;
|
|
137
155
|
|
|
138
156
|
clientId = msg.clientId;
|
|
139
157
|
this.logger.log(`open a new connection channel ${clientId} with path ${path}`);
|
|
140
158
|
|
|
141
|
-
const channel =
|
|
142
|
-
this.
|
|
159
|
+
const channel = getOrCreateChannel(id, clientId);
|
|
160
|
+
const messages = this.messageQueue.get(id);
|
|
161
|
+
if (messages) {
|
|
162
|
+
messages.forEach((message) => {
|
|
163
|
+
channel.dispatch(message);
|
|
164
|
+
});
|
|
165
|
+
this.messageQueue.delete(id);
|
|
166
|
+
}
|
|
143
167
|
|
|
144
|
-
commonChannelPathHandler.
|
|
145
|
-
channel.serverReady();
|
|
168
|
+
commonChannelPathHandler.openChannel(path, channel, clientId);
|
|
169
|
+
channel.serverReady(connectionToken);
|
|
146
170
|
break;
|
|
147
171
|
}
|
|
148
172
|
default: {
|
|
149
173
|
const { id } = msg;
|
|
174
|
+
|
|
150
175
|
const channel = this.channelMap.get(id);
|
|
151
176
|
if (channel) {
|
|
152
177
|
channel.dispatch(msg);
|
|
153
178
|
} else {
|
|
179
|
+
this.messageQueue.set(id, msg);
|
|
180
|
+
connection.send(
|
|
181
|
+
stringify({
|
|
182
|
+
kind: 'error',
|
|
183
|
+
id,
|
|
184
|
+
code: ErrorMessageCode.ChannelNotFound,
|
|
185
|
+
message: `channel ${id} not found`,
|
|
186
|
+
}),
|
|
187
|
+
);
|
|
188
|
+
|
|
154
189
|
this.logger.warn(`channel ${id} is not found`);
|
|
155
190
|
}
|
|
156
191
|
}
|
|
@@ -161,6 +196,7 @@ export abstract class BaseCommonChannelHandler {
|
|
|
161
196
|
});
|
|
162
197
|
|
|
163
198
|
connection.onceClose(() => {
|
|
199
|
+
this.logger.log(`connection ${clientId} is closed, dispose all channels`);
|
|
164
200
|
commonChannelPathHandler.disposeConnectionClientId(connection, clientId);
|
|
165
201
|
|
|
166
202
|
Array.from(this.channelMap.values())
|