@opensumi/ide-connection 3.0.2-next-1715690415.0 → 3.0.2-next-1715773842.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 +2 -2
- package/lib/common/server-handler.d.ts.map +1 -1
- package/lib/common/server-handler.js +24 -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 +39 -17
- 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":";;;AAAA,uCAAoC;AAEpC,6CAAgD;AAChD,+DAMmC;AAGnC,kDAA8C;AAC9C,iDAA0E;AAuD1E,MAAa,SAAS;IAwBpB,MAAM,CAAC,SAAS,CAAC,UAAwC,EAAE,OAAgC;QACzF,MAAM,UAAU,GAAG,IAAI,sCAAoB,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEnD,UAAU,CAAC,IAAI,CACb,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CACH,CAAC;QAEF,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YACxB,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAmB,UAAwC,EAAE,OAAgC;QAA1E,eAAU,GAAV,UAAU,CAA8B;QAxCjD,iBAAY,GAAG,IAAI,iCAAe,EAAE,CAAC;QACrC,YAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CACvC,IAAI,qBAAY,EAMZ,CACL,CAAC;QAEQ,kBAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,4BAAU,EAAc,CAAC,CAAC;QAEpE,cAAS,GAAiB,EAAE,CAAC;QAC7B,mBAAc,GAAG,KAAK,CAAC;QAOjC,WAAM,GAAY,OAAO,CAAC;QAiG1B,gBAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,6BAAW,EAAE,CAAC,CAAC;QA7ErD,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;QAED,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAErD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IAES,OAAO,CAAC,IAAgB;QAChC,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;aACrB;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;SACR;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,EAAyB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,QAAQ,CAAC,EAA6B;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,EAAwB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,QAAQ,CAAC,EAAc;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,EAAc;QAC1B,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,EAAE,EAAE,CAAC;YACL,OAAO;SACR;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5B;YACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACrB;IACH,CAAC;IAED,QAAQ,CAAC,GAAmB;QAC1B,QAAQ,GAAG,CAAC,IAAI,EAAE;YAChB,KAAK,cAAc;gBACjB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC1B;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM;SACT;IACH,CAAC;IAID;;OAEG;IACH,IAAI,CAAC,IAAY,EAAE,QAAgB,EAAE,eAAe,GAAG,IAAA,8BAAY,EAAC,EAAE,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,gDAAgD,IAAI,eAAe,QAAQ,sBAAsB,eAAe,EAAE,CACnH,CAAC;YACF,OAAO;SACR;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAEzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,SAAS,CAAC;YACR,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI;YACJ,QAAQ;YACR,eAAe;SAChB,CAAC,CACH,CAAC;QAEF,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;SACtD;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAGD;;OAEG;IACO,cAAc,CAAC,IAAY,EAAE,QAAgB,EAAE,eAAuB;QAC9E,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,OAAO;aACR;YACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC7C,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,OAAO,CACV,SAAS,CAAC;YACR,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO;SACR,CAAC,CACH,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,IAAgB;QACzB,IAAI,CAAC,OAAO,CACV,SAAS,CAAC;YACR,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI;SACb,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAI,CAAC;IACZ,KAAK,CAAC,IAAa,EAAE,MAAe;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,UAAU;QACR,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,EAA0C;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,SAAS,CAAC,EAA0C;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,SAAS,EAAE,CAAC,EAA0C,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7E,SAAS,EAAE,CAAC,EAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,IAAI,EAAE,CAAC,IAAgB,EAAE,EAAE;gBACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,KAAI,CAAC;SACb,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,UAAkC,EAAE;QACvD,MAAM,IAAI,GAAG,IAAI,2BAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;CACF;AAnOD,8BAmOC;AAMD;;GAEG;AACH,MAAa,eAAgB,SAAQ,SAAS;IAI5C,YAAmB,UAAwC,EAAE,OAAsC;QACjG,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QADV,eAAU,GAAV,UAAU,CAA8B;QAH3D,iBAAY,GAAqB,EAAE,CAAC;QAKlC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IACD,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,SAAS,CAAC;YACR,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK;SACN,CAAC,CACH,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,GAAmB;QAC1B,QAAQ,GAAG,CAAC,IAAI,EAAE;YAChB,KAAK,MAAM;gBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM;SACT;IACH,CAAC;CACF;AA5BD,0CA4BC;AAYY,QAAA,YAAY,GAAG,WAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC9C,QAAQ,EAAE,WAAI,CAAC,MAAM,EAAE;IACvB,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,WAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC9C,QAAQ,EAAE,WAAI,CAAC,MAAM,EAAE;IACvB,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAeU,QAAA,YAAY,GAAG,WAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC9C,QAAQ,EAAE,WAAI,CAAC,MAAM,EAAE;IACvB,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,WAAI,CAAC,MAAM,EAAE;IACnB,eAAe,EAAE,WAAI,CAAC,MAAM,EAAE;CAC/B,CAAC,CAAC;AAYU,QAAA,mBAAmB,GAAG,WAAI,CAAC,MAAM,CAAC,cAAc,EAAE;IAC7D,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,WAAI,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IAC1B,6EAAmB,CAAA;AACrB,CAAC,EAFW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAE3B;AASY,QAAA,aAAa,GAAG,WAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAChD,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,WAAI,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,WAAI,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,WAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC9C,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,WAAI,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,WAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAClD,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,WAAI,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,WAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAChD,EAAE,EAAE,WAAI,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,WAAI,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,WAAI,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAA,cAAK,EAAC;IACvB,oBAAY;IACZ,oBAAY;IACZ,oBAAY;IACZ,2BAAmB;IACnB,oBAAY;IACZ,sBAAc;IACd,qBAAa;IACb,qBAAa;CACd,CAAC,CAAC;AAEH,SAAgB,SAAS,CAAC,GAAmB;IAC3C,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAFD,8BAEC;AAED,SAAgB,KAAK,CAAC,KAAiB;IACrC,OAAO,UAAU,CAAC,WAAW,CAAC,KAAK,CAAQ,CAAC;AAC9C,CAAC;AAFD,sBAEC;AAED,MAAM,YAAY,GAAgB;IAChC,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,EAAE;IACN,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,YAAY,GAAgB;IAChC,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,EAAE;IACN,QAAQ,EAAE,EAAE;CACb,CAAC;AAEW,QAAA,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AACtC,QAAA,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC"}
|
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":";;;;AAAA,4DAA4B;AAC5B,wDAAwB;AAIxB,MAAsB,gBAAgB;CAIrC;AAJD,4CAIC;AAUD,MAAa,oBAAoB;IAK/B,YACE,MAAmB,EACX,SAAc,OAAO,EAC7B,IAAI,GAAG,IAAI,EACX,qBAAyC,EAAE;QAFnC,WAAM,GAAN,MAAM,CAAe;QAI7B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,MAAqB,CAAC;SACrC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAEM,eAAe,CAAC,OAAyB;QAC9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnD,MAAM,WAAW,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAQ,CAAC,SAAS,CAAC;QAEhF,IAAI,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;YACpD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvC;IACH,CAAC;IAEM,aAAa,CAAC,OAAkC;QACrD,IAAI,SAAiB,CAAC;QACtB,IAAK,OAA4B,CAAC,SAAS,EAAE;YAC3C,SAAS,GAAI,OAA4B,CAAC,SAAS,CAAC;SACrD;aAAM;YACL,SAAS,GAAG,OAAiB,CAAC;SAC/B;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAErG,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IACO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,cAAI,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IACO,WAAW;QACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1C,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACO,aAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEnD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC7C,IAAA,gBAAM,EAAC,OAAO,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;YAE1D,oCAAoC;YACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAW,GAAG,CAAC,QAAQ,CAAC;YAExC,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC;YAElD,OAAO,cAAc,GAAG,eAAe,EAAE,cAAc,EAAE,EAAE;gBACzD,MAAM,OAAO,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBACnD,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC9E,IAAI,YAAY,EAAE;oBAChB,MAAM;iBACP;aACF;YAED,IAAI,cAAc,KAAK,eAAe,EAAE;gBACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;gBAC1D,MAAM,CAAC,OAAO,EAAE,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA9FD,oDA8FC"}
|
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-1715773842.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-1715773842.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-1715773842.0",
|
|
30
|
+
"@opensumi/ide-dev-tool": "3.0.2-next-1715773842.0",
|
|
31
31
|
"@opensumi/mock-socket": "^9.3.1"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "ea9fbdc240d639b8563f3029f9ae1184c6bad503"
|
|
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,14 @@
|
|
|
1
1
|
import { IConnectionShape } from './connection/types';
|
|
2
2
|
import { ILogger } from './types';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
ChannelMessage,
|
|
5
|
+
ErrorMessageCode,
|
|
6
|
+
WSChannel,
|
|
7
|
+
WSServerChannel,
|
|
8
|
+
parse,
|
|
9
|
+
pongMessage,
|
|
10
|
+
stringify,
|
|
11
|
+
} from './ws-channel';
|
|
4
12
|
|
|
5
13
|
export interface IPathHandler {
|
|
6
14
|
dispose: (channel: WSChannel, connectionId: string) => void;
|
|
@@ -68,7 +76,7 @@ export class CommonChannelPathHandler {
|
|
|
68
76
|
});
|
|
69
77
|
});
|
|
70
78
|
}
|
|
71
|
-
|
|
79
|
+
openChannel(path: string, channel: WSChannel, clientId: string) {
|
|
72
80
|
// 根据 path 拿到注册的 handler
|
|
73
81
|
let handlerArr = this.get(path);
|
|
74
82
|
let params: Record<string, string> | undefined;
|
|
@@ -100,29 +108,36 @@ export const commonChannelPathHandler = new CommonChannelPathHandler();
|
|
|
100
108
|
export abstract class BaseCommonChannelHandler {
|
|
101
109
|
protected channelMap: Map<string, WSServerChannel> = new Map();
|
|
102
110
|
|
|
103
|
-
heartbeatTimer: NodeJS.Timeout | null = null;
|
|
111
|
+
protected heartbeatTimer: NodeJS.Timeout | null = null;
|
|
104
112
|
|
|
105
113
|
constructor(public handlerId: string, protected logger: ILogger = console) {}
|
|
106
114
|
|
|
107
115
|
abstract doHeartbeat(connection: any): void;
|
|
108
116
|
|
|
109
117
|
private heartbeat(connection: any) {
|
|
110
|
-
const timer = global.setTimeout(() => {
|
|
111
|
-
this.doHeartbeat(connection);
|
|
112
|
-
this.heartbeat(connection);
|
|
113
|
-
}, 5000);
|
|
114
|
-
|
|
115
118
|
if (this.heartbeatTimer) {
|
|
116
119
|
clearTimeout(this.heartbeatTimer);
|
|
117
120
|
}
|
|
118
121
|
|
|
119
|
-
this.heartbeatTimer =
|
|
122
|
+
this.heartbeatTimer = global.setTimeout(() => {
|
|
123
|
+
this.doHeartbeat(connection);
|
|
124
|
+
this.heartbeat(connection);
|
|
125
|
+
}, 5000);
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
receiveConnection(connection: IConnectionShape<Uint8Array>) {
|
|
123
129
|
let clientId: string;
|
|
124
130
|
this.heartbeat(connection);
|
|
125
131
|
|
|
132
|
+
const getOrCreateChannel = (id: string, clientId: string) => {
|
|
133
|
+
let channel = this.channelMap.get(id);
|
|
134
|
+
if (!channel) {
|
|
135
|
+
channel = new WSServerChannel(connection, { id, clientId, logger: this.logger });
|
|
136
|
+
this.channelMap.set(id, channel);
|
|
137
|
+
}
|
|
138
|
+
return channel;
|
|
139
|
+
};
|
|
140
|
+
|
|
126
141
|
connection.onMessage((data: Uint8Array) => {
|
|
127
142
|
let msg: ChannelMessage;
|
|
128
143
|
try {
|
|
@@ -133,24 +148,30 @@ export abstract class BaseCommonChannelHandler {
|
|
|
133
148
|
connection.send(pongMessage);
|
|
134
149
|
break;
|
|
135
150
|
case 'open': {
|
|
136
|
-
const { id, path } = msg;
|
|
137
|
-
|
|
151
|
+
const { id, path, connectionToken } = msg;
|
|
138
152
|
clientId = msg.clientId;
|
|
139
153
|
this.logger.log(`open a new connection channel ${clientId} with path ${path}`);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
commonChannelPathHandler.dispatchChannelOpen(path, channel, clientId);
|
|
145
|
-
channel.serverReady();
|
|
154
|
+
const channel = getOrCreateChannel(id, clientId);
|
|
155
|
+
commonChannelPathHandler.openChannel(path, channel, clientId);
|
|
156
|
+
channel.serverReady(connectionToken);
|
|
146
157
|
break;
|
|
147
158
|
}
|
|
148
159
|
default: {
|
|
149
160
|
const { id } = msg;
|
|
161
|
+
|
|
150
162
|
const channel = this.channelMap.get(id);
|
|
151
163
|
if (channel) {
|
|
152
164
|
channel.dispatch(msg);
|
|
153
165
|
} else {
|
|
166
|
+
connection.send(
|
|
167
|
+
stringify({
|
|
168
|
+
kind: 'error',
|
|
169
|
+
id,
|
|
170
|
+
code: ErrorMessageCode.ChannelNotFound,
|
|
171
|
+
message: `channel ${id} not found`,
|
|
172
|
+
}),
|
|
173
|
+
);
|
|
174
|
+
|
|
154
175
|
this.logger.warn(`channel ${id} is not found`);
|
|
155
176
|
}
|
|
156
177
|
}
|
|
@@ -161,6 +182,7 @@ export abstract class BaseCommonChannelHandler {
|
|
|
161
182
|
});
|
|
162
183
|
|
|
163
184
|
connection.onceClose(() => {
|
|
185
|
+
this.logger.log(`connection ${clientId} is closed, dispose all channels`);
|
|
164
186
|
commonChannelPathHandler.disposeConnectionClientId(connection, clientId);
|
|
165
187
|
|
|
166
188
|
Array.from(this.channelMap.values())
|