@gitpod/gitpod-protocol 0.1.5-sje-installer-helm.1 → 0.1.5-sje-installer-helm.3
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/messaging/browser/connection.d.ts +3 -3
- package/lib/messaging/browser/connection.d.ts.map +1 -1
- package/lib/messaging/browser/connection.js +209 -7
- package/lib/messaging/browser/connection.js.map +1 -1
- package/lib/messaging/handler.d.ts +10 -0
- package/lib/messaging/handler.d.ts.map +1 -1
- package/lib/messaging/proxy-factory.d.ts +2 -0
- package/lib/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/messaging/proxy-factory.js +8 -4
- package/lib/messaging/proxy-factory.js.map +1 -1
- package/package.json +1 -1
- package/pkg-yarn.lock +1 -1
- package/src/messaging/browser/connection.ts +176 -10
- package/src/messaging/handler.ts +12 -0
- package/src/messaging/proxy-factory.ts +10 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger } from "vscode-ws-jsonrpc";
|
|
2
2
|
import { JsonRpcProxy } from "../proxy-factory";
|
|
3
|
-
import { ConnectionHandler } from "../handler";
|
|
4
|
-
import ReconnectingWebSocket from 'reconnecting-websocket';
|
|
3
|
+
import { ConnectionEventHandler, ConnectionHandler } from "../handler";
|
|
4
|
+
import ReconnectingWebSocket, { Event } from 'reconnecting-websocket';
|
|
5
5
|
export interface WebSocketOptions {
|
|
6
6
|
onerror?: (event: Event) => void;
|
|
7
7
|
onListening?: (socket: ReconnectingWebSocket) => void;
|
|
@@ -18,7 +18,7 @@ export declare class WebSocketConnectionProvider {
|
|
|
18
18
|
/**
|
|
19
19
|
* Install a connection handler for the given path.
|
|
20
20
|
*/
|
|
21
|
-
listen(handler: ConnectionHandler, options?: WebSocketOptions): WebSocket;
|
|
21
|
+
listen(handler: ConnectionHandler, eventHandler: ConnectionEventHandler, options?: WebSocketOptions): WebSocket;
|
|
22
22
|
protected createLogger(): Logger;
|
|
23
23
|
/**
|
|
24
24
|
* Creates a web socket for the given url
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":"AAOA,OAAO,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAuC,MAAM,mBAAmB,CAAC;AAIhF,OAAO,EAAuB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACzD;AAED,qBAAa,2BAA2B;IAEpC;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC;IAyB3H;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS;IAwB/G,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;CAW1C"}
|
|
@@ -5,9 +5,56 @@
|
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
|
|
6
6
|
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
*/
|
|
8
|
+
var __extends = (this && this.__extends) || (function () {
|
|
9
|
+
var extendStatics = function (d, b) {
|
|
10
|
+
extendStatics = Object.setPrototypeOf ||
|
|
11
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
12
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
13
|
+
return extendStatics(d, b);
|
|
14
|
+
};
|
|
15
|
+
return function (d, b) {
|
|
16
|
+
extendStatics(d, b);
|
|
17
|
+
function __() { this.constructor = d; }
|
|
18
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
19
|
+
};
|
|
20
|
+
})();
|
|
21
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
22
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
23
|
+
if (!m) return o;
|
|
24
|
+
var i = m.call(o), r, ar = [], e;
|
|
25
|
+
try {
|
|
26
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
27
|
+
}
|
|
28
|
+
catch (error) { e = { error: error }; }
|
|
29
|
+
finally {
|
|
30
|
+
try {
|
|
31
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
32
|
+
}
|
|
33
|
+
finally { if (e) throw e.error; }
|
|
34
|
+
}
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
var __spread = (this && this.__spread) || function () {
|
|
38
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
var __values = (this && this.__values) || function(o) {
|
|
42
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
43
|
+
if (m) return m.call(o);
|
|
44
|
+
if (o && typeof o.length === "number") return {
|
|
45
|
+
next: function () {
|
|
46
|
+
if (o && i >= o.length) o = void 0;
|
|
47
|
+
return { value: o && o[i++], done: !o };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
51
|
+
};
|
|
8
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
53
|
exports.WebSocketConnectionProvider = void 0;
|
|
10
54
|
var vscode_ws_jsonrpc_1 = require("vscode-ws-jsonrpc");
|
|
55
|
+
var vscode_jsonrpc_1 = require("vscode-jsonrpc");
|
|
56
|
+
var messageWriter_1 = require("vscode-jsonrpc/lib/messageWriter");
|
|
57
|
+
var messageReader_1 = require("vscode-jsonrpc/lib/messageReader");
|
|
11
58
|
var proxy_factory_1 = require("../proxy-factory");
|
|
12
59
|
var reconnecting_websocket_1 = require("reconnecting-websocket");
|
|
13
60
|
var WebSocketConnectionProvider = /** @class */ (function () {
|
|
@@ -26,7 +73,10 @@ var WebSocketConnectionProvider = /** @class */ (function () {
|
|
|
26
73
|
var startListening = function (path) {
|
|
27
74
|
var socket = _this.listen({
|
|
28
75
|
path: path,
|
|
29
|
-
onConnection: function (c) { return factory.listen(c); }
|
|
76
|
+
onConnection: function (c) { return factory.listen(c); },
|
|
77
|
+
}, {
|
|
78
|
+
onTransportDidClose: function () { return factory.fireConnectionClosed(); },
|
|
79
|
+
onTransportDidOpen: function () { return factory.fireConnectionOpened(); },
|
|
30
80
|
}, options);
|
|
31
81
|
if (options === null || options === void 0 ? void 0 : options.onListening) {
|
|
32
82
|
options.onListening(socket);
|
|
@@ -43,7 +93,7 @@ var WebSocketConnectionProvider = /** @class */ (function () {
|
|
|
43
93
|
/**
|
|
44
94
|
* Install a connection handler for the given path.
|
|
45
95
|
*/
|
|
46
|
-
WebSocketConnectionProvider.prototype.listen = function (handler, options) {
|
|
96
|
+
WebSocketConnectionProvider.prototype.listen = function (handler, eventHandler, options) {
|
|
47
97
|
var url = handler.path;
|
|
48
98
|
var webSocket = this.createWebSocket(url);
|
|
49
99
|
var logger = this.createLogger();
|
|
@@ -58,11 +108,7 @@ var WebSocketConnectionProvider = /** @class */ (function () {
|
|
|
58
108
|
logger.error(JSON.stringify(error));
|
|
59
109
|
});
|
|
60
110
|
}
|
|
61
|
-
|
|
62
|
-
webSocket: webSocket,
|
|
63
|
-
onConnection: function (connection) { return handler.onConnection(connection); },
|
|
64
|
-
logger: logger
|
|
65
|
-
});
|
|
111
|
+
doListen(webSocket, handler, eventHandler, logger);
|
|
66
112
|
return webSocket;
|
|
67
113
|
};
|
|
68
114
|
WebSocketConnectionProvider.prototype.createLogger = function () {
|
|
@@ -84,4 +130,160 @@ var WebSocketConnectionProvider = /** @class */ (function () {
|
|
|
84
130
|
return WebSocketConnectionProvider;
|
|
85
131
|
}());
|
|
86
132
|
exports.WebSocketConnectionProvider = WebSocketConnectionProvider;
|
|
133
|
+
// The following was extracted from vscode-ws-jsonrpc to make these changes:
|
|
134
|
+
// - switch from WebSocket to ReconnectingWebSocket
|
|
135
|
+
// - webSocket.onopen: making sure it's only ever called once so we're re-using MessageConnection
|
|
136
|
+
// - WebSocketMessageWriter: buffer and re-try messages instead of throwing an error immidiately
|
|
137
|
+
// - WebSocketMessageReader: don't close MessageConnection on 'socket.onclose'
|
|
138
|
+
function doListen(resocket, handler, eventHandler, logger) {
|
|
139
|
+
resocket.addEventListener("close", function () { return eventHandler.onTransportDidClose(); });
|
|
140
|
+
var alreadyOpened = false;
|
|
141
|
+
resocket.onopen = function () {
|
|
142
|
+
// trigerr "open" every time we re-open the underlying websocket
|
|
143
|
+
eventHandler.onTransportDidOpen();
|
|
144
|
+
// make sure we're only ever creating one MessageConnection, irregardless of how many times we have to re-open the underlying (reconnecting) websocket
|
|
145
|
+
if (alreadyOpened) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
alreadyOpened = true;
|
|
149
|
+
var connection = createWebSocketConnection(resocket, logger);
|
|
150
|
+
handler.onConnection(connection);
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function createWebSocketConnection(resocket, logger) {
|
|
154
|
+
var socket = vscode_ws_jsonrpc_1.toSocket(resocket);
|
|
155
|
+
var messageReader = new NonClosingWebSocketMessageReader(socket);
|
|
156
|
+
var messageWriter = new BufferingWebSocketMessageWriter(resocket, logger);
|
|
157
|
+
var connection = vscode_jsonrpc_1.createMessageConnection(messageReader, messageWriter, logger);
|
|
158
|
+
connection.onClose(function () { return connection.dispose(); });
|
|
159
|
+
return connection;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* This takes vscode-ws-jsonrpc/lib/socket/writer/WebSocketMessageWriter and adds a buffer
|
|
163
|
+
*/
|
|
164
|
+
var BufferingWebSocketMessageWriter = /** @class */ (function (_super) {
|
|
165
|
+
__extends(BufferingWebSocketMessageWriter, _super);
|
|
166
|
+
function BufferingWebSocketMessageWriter(socket, logger) {
|
|
167
|
+
var _this = _super.call(this) || this;
|
|
168
|
+
_this.errorCount = 0;
|
|
169
|
+
_this.buffer = [];
|
|
170
|
+
_this.socket = socket;
|
|
171
|
+
_this.logger = logger;
|
|
172
|
+
socket.addEventListener("open", function (event) { return _this.flushBuffer(); });
|
|
173
|
+
return _this;
|
|
174
|
+
}
|
|
175
|
+
BufferingWebSocketMessageWriter.prototype.write = function (msg) {
|
|
176
|
+
if (this.socket.readyState !== reconnecting_websocket_1.default.OPEN) {
|
|
177
|
+
this.bufferMsg(msg);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
var content = JSON.stringify(msg);
|
|
182
|
+
this.socket.send(content);
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
this.errorCount++;
|
|
186
|
+
this.fireError(e, msg, this.errorCount);
|
|
187
|
+
this.bufferMsg(msg);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
BufferingWebSocketMessageWriter.prototype.flushBuffer = function () {
|
|
191
|
+
var e_1, _a;
|
|
192
|
+
if (this.buffer.length === 0) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
var buffer = __spread(this.buffer);
|
|
196
|
+
this.buffer = [];
|
|
197
|
+
try {
|
|
198
|
+
for (var buffer_1 = __values(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) {
|
|
199
|
+
var msg = buffer_1_1.value;
|
|
200
|
+
this.write(msg);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
204
|
+
finally {
|
|
205
|
+
try {
|
|
206
|
+
if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1);
|
|
207
|
+
}
|
|
208
|
+
finally { if (e_1) throw e_1.error; }
|
|
209
|
+
}
|
|
210
|
+
//this.logger.info(`flushed buffer (${this.buffer.length})`)
|
|
211
|
+
};
|
|
212
|
+
BufferingWebSocketMessageWriter.prototype.bufferMsg = function (msg) {
|
|
213
|
+
this.buffer.push(msg);
|
|
214
|
+
//this.logger.info(`buffered message (${this.buffer.length})`);
|
|
215
|
+
};
|
|
216
|
+
return BufferingWebSocketMessageWriter;
|
|
217
|
+
}(messageWriter_1.AbstractMessageWriter));
|
|
218
|
+
/**
|
|
219
|
+
* This takes vscode-ws-jsonrpc/lib/socket/reader/WebSocketMessageReader and removes the "onClose -> fireClose" connection
|
|
220
|
+
*/
|
|
221
|
+
var NonClosingWebSocketMessageReader = /** @class */ (function (_super) {
|
|
222
|
+
__extends(NonClosingWebSocketMessageReader, _super);
|
|
223
|
+
function NonClosingWebSocketMessageReader(socket) {
|
|
224
|
+
var _this = _super.call(this) || this;
|
|
225
|
+
_this.events = [];
|
|
226
|
+
_this.state = 'initial';
|
|
227
|
+
_this.callback = function () { };
|
|
228
|
+
_this.socket = socket;
|
|
229
|
+
_this.socket.onMessage(function (message) { return _this.readMessage(message); });
|
|
230
|
+
_this.socket.onError(function (error) { return _this.fireError(error); });
|
|
231
|
+
_this.socket.onClose(function (code, reason) {
|
|
232
|
+
if (code !== 1000) {
|
|
233
|
+
var error = {
|
|
234
|
+
name: '' + code,
|
|
235
|
+
message: "Error during socket reconnect: code = " + code + ", reason = " + reason
|
|
236
|
+
};
|
|
237
|
+
_this.fireError(error);
|
|
238
|
+
}
|
|
239
|
+
// this.fireClose(); // <-- reason for this class to be copied over
|
|
240
|
+
});
|
|
241
|
+
return _this;
|
|
242
|
+
}
|
|
243
|
+
NonClosingWebSocketMessageReader.prototype.listen = function (callback) {
|
|
244
|
+
if (this.state === 'initial') {
|
|
245
|
+
this.state = 'listening';
|
|
246
|
+
this.callback = callback;
|
|
247
|
+
while (this.events.length !== 0) {
|
|
248
|
+
var event_1 = this.events.pop();
|
|
249
|
+
if (event_1.message) {
|
|
250
|
+
this.readMessage(event_1.message);
|
|
251
|
+
}
|
|
252
|
+
else if (event_1.error) {
|
|
253
|
+
this.fireError(event_1.error);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
this.fireClose();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
NonClosingWebSocketMessageReader.prototype.readMessage = function (message) {
|
|
262
|
+
if (this.state === 'initial') {
|
|
263
|
+
this.events.splice(0, 0, { message: message });
|
|
264
|
+
}
|
|
265
|
+
else if (this.state === 'listening') {
|
|
266
|
+
var data = JSON.parse(message);
|
|
267
|
+
this.callback(data);
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
NonClosingWebSocketMessageReader.prototype.fireError = function (error) {
|
|
271
|
+
if (this.state === 'initial') {
|
|
272
|
+
this.events.splice(0, 0, { error: error });
|
|
273
|
+
}
|
|
274
|
+
else if (this.state === 'listening') {
|
|
275
|
+
_super.prototype.fireError.call(this, error);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
NonClosingWebSocketMessageReader.prototype.fireClose = function () {
|
|
279
|
+
if (this.state === 'initial') {
|
|
280
|
+
this.events.splice(0, 0, {});
|
|
281
|
+
}
|
|
282
|
+
else if (this.state === 'listening') {
|
|
283
|
+
_super.prototype.fireClose.call(this);
|
|
284
|
+
}
|
|
285
|
+
this.state = 'closed';
|
|
286
|
+
};
|
|
287
|
+
return NonClosingWebSocketMessageReader;
|
|
288
|
+
}(messageReader_1.AbstractMessageReader));
|
|
87
289
|
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,4 +4,14 @@ export interface ConnectionHandler {
|
|
|
4
4
|
readonly path: string;
|
|
5
5
|
onConnection(connection: MessageConnection, session?: object): void;
|
|
6
6
|
}
|
|
7
|
+
export interface ConnectionEventHandler {
|
|
8
|
+
/**
|
|
9
|
+
* Called when the transport underpinning the connection got closed
|
|
10
|
+
*/
|
|
11
|
+
onTransportDidClose(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Called when the transport underpinning the connection is (re-)opened
|
|
14
|
+
*/
|
|
15
|
+
onTransportDidOpen(): void;
|
|
16
|
+
}
|
|
7
17
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/messaging/handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvE"}
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/messaging/handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACF,mBAAmB,IAAI,IAAI,CAAC;IAE5B;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAAC;CAC/B"}
|
|
@@ -77,6 +77,8 @@ export declare class JsonRpcProxyFactory<T extends object> implements ProxyHandl
|
|
|
77
77
|
*/
|
|
78
78
|
constructor(target?: any);
|
|
79
79
|
protected waitForConnection(): void;
|
|
80
|
+
fireConnectionClosed(): void;
|
|
81
|
+
fireConnectionOpened(): void;
|
|
80
82
|
/**
|
|
81
83
|
* Connect a MessageConnection to the factory.
|
|
82
84
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-factory.d.ts","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,oBAAY,aAAa,CAAC,MAAM,IAAI,UAAU,GAAG;IAC7C;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CAC9C;AACD,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC;AAEhE,qBAAa,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,iBAAiB;IAE5E,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;gBADhE,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;IAG7E,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAMtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IActD,MAAM,CAAC;IAZ1B,SAAS,CAAC,QAAQ,CAAC,0BAA0B,gBAAuB;IACpE,SAAS,CAAC,QAAQ,CAAC,2BAA2B,gBAAuB;IAErE,SAAS,CAAC,wBAAwB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5E,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExD;;;;;OAKG;gBACgB,MAAM,CAAC,KAAK;IAI/B,SAAS,CAAC,iBAAiB,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"proxy-factory.d.ts","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,oBAAY,aAAa,CAAC,MAAM,IAAI,UAAU,GAAG;IAC7C;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CAC9C;AACD,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC;AAEhE,qBAAa,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,iBAAiB;IAE5E,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;gBADhE,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;IAG7E,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAMtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IActD,MAAM,CAAC;IAZ1B,SAAS,CAAC,QAAQ,CAAC,0BAA0B,gBAAuB;IACpE,SAAS,CAAC,QAAQ,CAAC,2BAA2B,gBAAuB;IAErE,SAAS,CAAC,wBAAwB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5E,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExD;;;;;OAKG;gBACgB,MAAM,CAAC,KAAK;IAI/B,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAUnC,oBAAoB;IAIpB,oBAAoB;IAIpB;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,iBAAiB;IAQpC;;;;;;;;;;;OAWG;cACa,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAavE;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM9D;;;;;;OAMG;IACH,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC;IAK9B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG;IAiClD;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO;CAGpD"}
|
|
@@ -141,12 +141,16 @@ var JsonRpcProxyFactory = /** @class */ (function () {
|
|
|
141
141
|
return _this.connectionPromiseResolve = resolve;
|
|
142
142
|
});
|
|
143
143
|
this.connectionPromise.then(function (connection) {
|
|
144
|
-
connection.onClose(function () {
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
_this.onDidOpenConnectionEmitter.fire(undefined);
|
|
144
|
+
connection.onClose(function () { return _this.fireConnectionClosed(); });
|
|
145
|
+
_this.fireConnectionOpened();
|
|
148
146
|
});
|
|
149
147
|
};
|
|
148
|
+
JsonRpcProxyFactory.prototype.fireConnectionClosed = function () {
|
|
149
|
+
this.onDidCloseConnectionEmitter.fire(undefined);
|
|
150
|
+
};
|
|
151
|
+
JsonRpcProxyFactory.prototype.fireConnectionOpened = function () {
|
|
152
|
+
this.onDidOpenConnectionEmitter.fire(undefined);
|
|
153
|
+
};
|
|
150
154
|
/**
|
|
151
155
|
* Connect a MessageConnection to the factory.
|
|
152
156
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-factory.js","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAkE;AAClE,uCAA+C;AAG/C,2CAAsC;AAiBtC;IACI,kCACa,IAAY,EACZ,aAAgE;QADhE,SAAI,GAAJ,IAAI,CAAQ;QACZ,kBAAa,GAAb,aAAa,CAAmD;IACzE,CAAC;IAEL,+CAAY,GAAZ,UAAa,UAA6B,EAAE,OAAgB;QACxD,IAAM,OAAO,GAAG,IAAI,mBAAmB,EAAK,CAAC;QAC7C,IAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IACL,+BAAC;AAAD,CAAC,AAZD,IAYC;AAZY,4DAAwB;AAcrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH;IAQI;;;;;OAKG;IACH,6BAAmB,MAAY;QAAZ,WAAM,GAAN,MAAM,CAAM;QAZZ,+BAA0B,GAAG,IAAI,eAAO,EAAQ,CAAC;QACjD,gCAA2B,GAAG,IAAI,eAAO,EAAQ,CAAC;QAYjE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAES,+CAAiB,GAA3B;QAAA,
|
|
1
|
+
{"version":3,"file":"proxy-factory.js","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"watch": "leeway exec --package .:lib --transitive-dependencies --filter-type yarn --components --parallel -- tsc -w --preserveWatchOutput"
|
|
53
53
|
},
|
|
54
54
|
"types": "./lib/index.d.ts",
|
|
55
|
-
"version": "0.1.5-sje-installer-helm.
|
|
55
|
+
"version": "0.1.5-sje-installer-helm.3"
|
|
56
56
|
}
|
package/pkg-yarn.lock
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"@gitpod/gitpod-protocol@0.1.5":
|
|
6
6
|
version "0.1.5"
|
|
7
|
-
resolved "file:///tmp/cache/
|
|
7
|
+
resolved "file:///tmp/cache/35cfab5c67d0ea6caf11324e9ba1e3f48a45940e.tar.gz"
|
|
8
8
|
dependencies:
|
|
9
9
|
ajv "^6.5.4"
|
|
10
10
|
analytics-node "^4.0.1"
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Logger, ConsoleLogger, toSocket, IWebSocket } from "vscode-ws-jsonrpc";
|
|
9
|
+
import { createMessageConnection } from "vscode-jsonrpc";
|
|
10
|
+
import { AbstractMessageWriter } from "vscode-jsonrpc/lib/messageWriter";
|
|
11
|
+
import { AbstractMessageReader } from "vscode-jsonrpc/lib/messageReader";
|
|
9
12
|
import { JsonRpcProxyFactory, JsonRpcProxy } from "../proxy-factory";
|
|
10
|
-
import { ConnectionHandler } from "../handler";
|
|
11
|
-
import ReconnectingWebSocket from 'reconnecting-websocket';
|
|
13
|
+
import { ConnectionEventHandler, ConnectionHandler } from "../handler";
|
|
14
|
+
import ReconnectingWebSocket, { Event } from 'reconnecting-websocket';
|
|
12
15
|
|
|
13
16
|
export interface WebSocketOptions {
|
|
14
17
|
onerror?: (event: Event) => void;
|
|
@@ -29,7 +32,10 @@ export class WebSocketConnectionProvider {
|
|
|
29
32
|
const startListening = (path: string) => {
|
|
30
33
|
const socket = this.listen({
|
|
31
34
|
path,
|
|
32
|
-
onConnection: c => factory.listen(c)
|
|
35
|
+
onConnection: c => factory.listen(c),
|
|
36
|
+
}, {
|
|
37
|
+
onTransportDidClose: () => factory.fireConnectionClosed(),
|
|
38
|
+
onTransportDidOpen: () => factory.fireConnectionOpened(),
|
|
33
39
|
},
|
|
34
40
|
options
|
|
35
41
|
);
|
|
@@ -49,7 +55,7 @@ export class WebSocketConnectionProvider {
|
|
|
49
55
|
/**
|
|
50
56
|
* Install a connection handler for the given path.
|
|
51
57
|
*/
|
|
52
|
-
listen(handler: ConnectionHandler, options?: WebSocketOptions): WebSocket {
|
|
58
|
+
listen(handler: ConnectionHandler, eventHandler: ConnectionEventHandler, options?: WebSocketOptions): WebSocket {
|
|
53
59
|
const url = handler.path;
|
|
54
60
|
const webSocket = this.createWebSocket(url);
|
|
55
61
|
|
|
@@ -64,11 +70,12 @@ export class WebSocketConnectionProvider {
|
|
|
64
70
|
logger.error(JSON.stringify(error));
|
|
65
71
|
});
|
|
66
72
|
}
|
|
67
|
-
doListen(
|
|
68
|
-
webSocket,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
doListen(
|
|
74
|
+
webSocket as any as ReconnectingWebSocket,
|
|
75
|
+
handler,
|
|
76
|
+
eventHandler,
|
|
77
|
+
logger,
|
|
78
|
+
);
|
|
72
79
|
return webSocket;
|
|
73
80
|
}
|
|
74
81
|
|
|
@@ -91,3 +98,162 @@ export class WebSocketConnectionProvider {
|
|
|
91
98
|
}
|
|
92
99
|
|
|
93
100
|
}
|
|
101
|
+
|
|
102
|
+
// The following was extracted from vscode-ws-jsonrpc to make these changes:
|
|
103
|
+
// - switch from WebSocket to ReconnectingWebSocket
|
|
104
|
+
// - webSocket.onopen: making sure it's only ever called once so we're re-using MessageConnection
|
|
105
|
+
// - WebSocketMessageWriter: buffer and re-try messages instead of throwing an error immidiately
|
|
106
|
+
// - WebSocketMessageReader: don't close MessageConnection on 'socket.onclose'
|
|
107
|
+
function doListen(resocket: ReconnectingWebSocket, handler: ConnectionHandler, eventHandler: ConnectionEventHandler, logger: Logger) {
|
|
108
|
+
resocket.addEventListener("close", () => eventHandler.onTransportDidClose());
|
|
109
|
+
|
|
110
|
+
let alreadyOpened = false;
|
|
111
|
+
resocket.onopen = () => {
|
|
112
|
+
// trigerr "open" every time we re-open the underlying websocket
|
|
113
|
+
eventHandler.onTransportDidOpen();
|
|
114
|
+
|
|
115
|
+
// make sure we're only ever creating one MessageConnection, irregardless of how many times we have to re-open the underlying (reconnecting) websocket
|
|
116
|
+
if (alreadyOpened) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
alreadyOpened = true;
|
|
120
|
+
|
|
121
|
+
const connection = createWebSocketConnection(resocket, logger);
|
|
122
|
+
handler.onConnection(connection);
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function createWebSocketConnection(resocket: ReconnectingWebSocket, logger: Logger) {
|
|
127
|
+
const socket = toSocket(resocket as any);
|
|
128
|
+
const messageReader = new NonClosingWebSocketMessageReader(socket);
|
|
129
|
+
const messageWriter = new BufferingWebSocketMessageWriter(resocket, logger);
|
|
130
|
+
const connection = createMessageConnection(messageReader, messageWriter, logger);
|
|
131
|
+
connection.onClose(() => connection.dispose());
|
|
132
|
+
return connection;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* This takes vscode-ws-jsonrpc/lib/socket/writer/WebSocketMessageWriter and adds a buffer
|
|
137
|
+
*/
|
|
138
|
+
class BufferingWebSocketMessageWriter extends AbstractMessageWriter {
|
|
139
|
+
protected readonly socket: ReconnectingWebSocket;
|
|
140
|
+
protected readonly logger: Logger;
|
|
141
|
+
protected errorCount: number = 0;
|
|
142
|
+
|
|
143
|
+
protected buffer: any[] = [];
|
|
144
|
+
|
|
145
|
+
constructor(socket: ReconnectingWebSocket, logger: Logger) {
|
|
146
|
+
super();
|
|
147
|
+
this.socket = socket;
|
|
148
|
+
this.logger = logger;
|
|
149
|
+
|
|
150
|
+
socket.addEventListener("open", (event: Event) => this.flushBuffer());
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
write(msg: any) {
|
|
154
|
+
if (this.socket.readyState !== ReconnectingWebSocket.OPEN) {
|
|
155
|
+
this.bufferMsg(msg);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
const content = JSON.stringify(msg);
|
|
161
|
+
this.socket.send(content);
|
|
162
|
+
} catch (e) {
|
|
163
|
+
this.errorCount++;
|
|
164
|
+
this.fireError(e, msg, this.errorCount);
|
|
165
|
+
|
|
166
|
+
this.bufferMsg(msg);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
protected flushBuffer() {
|
|
171
|
+
if (this.buffer.length === 0) {
|
|
172
|
+
return
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const buffer = [...this.buffer];
|
|
176
|
+
this.buffer = [];
|
|
177
|
+
for (const msg of buffer) {
|
|
178
|
+
this.write(msg);
|
|
179
|
+
}
|
|
180
|
+
//this.logger.info(`flushed buffer (${this.buffer.length})`)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
protected bufferMsg(msg: any) {
|
|
184
|
+
this.buffer.push(msg);
|
|
185
|
+
//this.logger.info(`buffered message (${this.buffer.length})`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* This takes vscode-ws-jsonrpc/lib/socket/reader/WebSocketMessageReader and removes the "onClose -> fireClose" connection
|
|
192
|
+
*/
|
|
193
|
+
class NonClosingWebSocketMessageReader extends AbstractMessageReader {
|
|
194
|
+
protected readonly socket: IWebSocket;
|
|
195
|
+
protected readonly events: any[] = [];
|
|
196
|
+
protected state: 'initial' | 'listening' | 'closed' = 'initial';
|
|
197
|
+
protected callback: (message: any) => void = () => {};
|
|
198
|
+
|
|
199
|
+
constructor(socket: IWebSocket) {
|
|
200
|
+
super();
|
|
201
|
+
this.socket = socket;
|
|
202
|
+
this.socket.onMessage(message => this.readMessage(message));
|
|
203
|
+
this.socket.onError(error => this.fireError(error));
|
|
204
|
+
this.socket.onClose((code, reason) => {
|
|
205
|
+
if (code !== 1000) {
|
|
206
|
+
const error = {
|
|
207
|
+
name: '' + code,
|
|
208
|
+
message: `Error during socket reconnect: code = ${code}, reason = ${reason}`
|
|
209
|
+
};
|
|
210
|
+
this.fireError(error);
|
|
211
|
+
}
|
|
212
|
+
// this.fireClose(); // <-- reason for this class to be copied over
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
listen(callback: (message: any) => void) {
|
|
216
|
+
if (this.state === 'initial') {
|
|
217
|
+
this.state = 'listening';
|
|
218
|
+
this.callback = callback;
|
|
219
|
+
while (this.events.length !== 0) {
|
|
220
|
+
const event = this.events.pop();
|
|
221
|
+
if (event.message) {
|
|
222
|
+
this.readMessage(event.message);
|
|
223
|
+
}
|
|
224
|
+
else if (event.error) {
|
|
225
|
+
this.fireError(event.error);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.fireClose();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
readMessage(message: any) {
|
|
234
|
+
if (this.state === 'initial') {
|
|
235
|
+
this.events.splice(0, 0, { message });
|
|
236
|
+
}
|
|
237
|
+
else if (this.state === 'listening') {
|
|
238
|
+
const data = JSON.parse(message);
|
|
239
|
+
this.callback(data);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
fireError(error: any) {
|
|
243
|
+
if (this.state === 'initial') {
|
|
244
|
+
this.events.splice(0, 0, { error });
|
|
245
|
+
}
|
|
246
|
+
else if (this.state === 'listening') {
|
|
247
|
+
super.fireError(error);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
fireClose() {
|
|
251
|
+
if (this.state === 'initial') {
|
|
252
|
+
this.events.splice(0, 0, {});
|
|
253
|
+
}
|
|
254
|
+
else if (this.state === 'listening') {
|
|
255
|
+
super.fireClose();
|
|
256
|
+
}
|
|
257
|
+
this.state = 'closed';
|
|
258
|
+
}
|
|
259
|
+
}
|
package/src/messaging/handler.ts
CHANGED
|
@@ -13,3 +13,15 @@ export interface ConnectionHandler {
|
|
|
13
13
|
readonly path: string;
|
|
14
14
|
onConnection(connection: MessageConnection, session?: object): void;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
export interface ConnectionEventHandler {
|
|
18
|
+
/**
|
|
19
|
+
* Called when the transport underpinning the connection got closed
|
|
20
|
+
*/
|
|
21
|
+
onTransportDidClose(): void;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Called when the transport underpinning the connection is (re-)opened
|
|
25
|
+
*/
|
|
26
|
+
onTransportDidOpen(): void;
|
|
27
|
+
}
|
|
@@ -105,13 +105,19 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
|
|
|
105
105
|
this.connectionPromiseResolve = resolve
|
|
106
106
|
);
|
|
107
107
|
this.connectionPromise.then(connection => {
|
|
108
|
-
connection.onClose(() =>
|
|
109
|
-
|
|
110
|
-
);
|
|
111
|
-
this.onDidOpenConnectionEmitter.fire(undefined);
|
|
108
|
+
connection.onClose(() => this.fireConnectionClosed());
|
|
109
|
+
this.fireConnectionOpened();
|
|
112
110
|
});
|
|
113
111
|
}
|
|
114
112
|
|
|
113
|
+
fireConnectionClosed() {
|
|
114
|
+
this.onDidCloseConnectionEmitter.fire(undefined)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
fireConnectionOpened() {
|
|
118
|
+
this.onDidOpenConnectionEmitter.fire(undefined);
|
|
119
|
+
}
|
|
120
|
+
|
|
115
121
|
/**
|
|
116
122
|
* Connect a MessageConnection to the factory.
|
|
117
123
|
*
|