@push-rpc/next 2.0.19 → 2.0.21
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/README.md +4 -3
- package/dist/client/RemoteSubscriptions.d.ts +0 -1
- package/dist/client/RemoteSubscriptions.js +3 -10
- package/dist/client/RemoteSubscriptions.js.map +1 -1
- package/dist/client/RpcClientImpl.js +5 -10
- package/dist/client/RpcClientImpl.js.map +1 -1
- package/dist/client/WebSocketConnection.d.ts +1 -0
- package/dist/client/WebSocketConnection.js +9 -1
- package/dist/client/WebSocketConnection.js.map +1 -1
- package/dist/server/ConnectionsServer.d.ts +1 -0
- package/dist/server/ConnectionsServer.js +4 -0
- package/dist/server/ConnectionsServer.js.map +1 -1
- package/dist/server/RpcServerImpl.d.ts +0 -1
- package/dist/server/RpcServerImpl.js +11 -13
- package/dist/server/RpcServerImpl.js.map +1 -1
- package/dist/utils/promises.d.ts +0 -4
- package/dist/utils/promises.js +1 -22
- package/dist/utils/promises.js.map +1 -1
- package/package.json +1 -1
- package/src/client/RemoteSubscriptions.ts +3 -11
- package/src/client/RpcClientImpl.ts +6 -11
- package/src/client/WebSocketConnection.ts +14 -4
- package/src/server/ConnectionsServer.ts +7 -1
- package/src/server/LocalSubscriptions.ts +4 -4
- package/src/server/RpcServerImpl.ts +24 -28
- package/src/utils/promises.ts +0 -22
- package/tests/calls.ts +1 -36
- package/tests/context.ts +22 -34
- package/tests/middleware.ts +8 -3
- package/tests/subscriptions.ts +118 -97
- package/tests/testUtils.ts +2 -2
- package/tests/triggers.ts +6 -2
package/README.md
CHANGED
|
@@ -170,8 +170,9 @@ There are the types of messages that can be sent from client to server:
|
|
|
170
170
|
[{"id": 1, text: "Buy groceries", status: "open"}]
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
Server accepts subscribe requests before WS connection is established. Server do not track client subscriptions.
|
|
174
|
+
On WS connection established, client should re-sent subscribe requests. In response, server will provide up-to-date
|
|
175
|
+
data.
|
|
175
176
|
|
|
176
177
|
3. **Unsubscribe** - a request to unsubscribe from a remote function updates. Implemented as HTTP PATCH request. URL
|
|
177
178
|
contains the remote function name. Body contains JSON-encoded list of arguments. Response is always empty.
|
|
@@ -205,7 +206,7 @@ topic name, remote function result and subscription parameters if any:
|
|
|
205
206
|
["todo/getTodos", [{"id": 1, text: "Buy groceries", status: "open"}], ...]
|
|
206
207
|
```
|
|
207
208
|
|
|
208
|
-
Both client & server will try to
|
|
209
|
+
Both client & server will try to detect broken connections by sending WS ping/pongs.
|
|
209
210
|
|
|
210
211
|
## Glossary
|
|
211
212
|
|
|
@@ -25,7 +25,6 @@ class RemoteSubscriptions {
|
|
|
25
25
|
itemSubscriptions.byParameters.set(parametersKey, parameterSubscriptions);
|
|
26
26
|
parameterSubscriptions.consumers.push({
|
|
27
27
|
consumer,
|
|
28
|
-
completed: false,
|
|
29
28
|
});
|
|
30
29
|
}
|
|
31
30
|
pause(itemName, parameters) {
|
|
@@ -49,9 +48,7 @@ class RemoteSubscriptions {
|
|
|
49
48
|
this.cache.put(itemName, parameters, data);
|
|
50
49
|
filterSubscriptions.cached = data;
|
|
51
50
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
52
|
-
|
|
53
|
-
consumer.consumer(data);
|
|
54
|
-
}
|
|
51
|
+
consumer.consumer(data);
|
|
55
52
|
});
|
|
56
53
|
});
|
|
57
54
|
filterSubscriptions.queue = [];
|
|
@@ -100,9 +97,7 @@ class RemoteSubscriptions {
|
|
|
100
97
|
this.cache.put(itemName, parameters, data);
|
|
101
98
|
filterSubscriptions.cached = data;
|
|
102
99
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
103
|
-
|
|
104
|
-
consumer.consumer(data);
|
|
105
|
-
}
|
|
100
|
+
consumer.consumer(data);
|
|
106
101
|
});
|
|
107
102
|
}
|
|
108
103
|
}
|
|
@@ -114,9 +109,7 @@ class RemoteSubscriptions {
|
|
|
114
109
|
const result = [];
|
|
115
110
|
for (const [itemName, itemSubscriptions] of this.byItem) {
|
|
116
111
|
for (const [, parameterSubscriptions] of itemSubscriptions.byParameters) {
|
|
117
|
-
const consumers = parameterSubscriptions.consumers
|
|
118
|
-
.filter((c) => c.completed)
|
|
119
|
-
.map((c) => c.consumer);
|
|
112
|
+
const consumers = parameterSubscriptions.consumers.map((c) => c.consumer);
|
|
120
113
|
if (consumers.length) {
|
|
121
114
|
result.push([itemName, parameterSubscriptions.parameters, consumers]);
|
|
122
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSubscriptions.js","sourceRoot":"","sources":["../../src/client/RemoteSubscriptions.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAI9C,MAAa,mBAAmB;IAC9B,YAAoB,KAAyB;QAAzB,UAAK,GAAL,KAAK,CAAoB;
|
|
1
|
+
{"version":3,"file":"RemoteSubscriptions.js","sourceRoot":"","sources":["../../src/client/RemoteSubscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,18 +20,12 @@ class RpcClientImpl {
|
|
|
20
20
|
if (cached !== undefined) {
|
|
21
21
|
consumer(cached);
|
|
22
22
|
}
|
|
23
|
-
//
|
|
23
|
+
// Add subscription before subscribing in case in will be unsubscribed while waiting for a server reply
|
|
24
|
+
// Subscription is added in pending state to not re-subscribe until subscribe response is completed
|
|
24
25
|
this.remoteSubscriptions.addSubscription(itemName, parameters, consumer);
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
await this.connection.connect();
|
|
26
|
+
// Start connecting, if not already
|
|
27
|
+
void this.connection.connect();
|
|
28
28
|
try {
|
|
29
|
-
// check if already unsubscribed
|
|
30
|
-
const sub = this.remoteSubscriptions.getConsumerSubscription(itemName, parameters, consumer);
|
|
31
|
-
if (!sub)
|
|
32
|
-
return;
|
|
33
|
-
// mark as completed - will resubscribe on reconnects
|
|
34
|
-
sub.completed = true;
|
|
35
29
|
this.remoteSubscriptions.pause(itemName, parameters);
|
|
36
30
|
const data = await this.invoke(itemName, rpc_js_1.InvocationType.Subscribe, (...parameters) => this.httpClient.subscribe(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
|
|
37
31
|
this.remoteSubscriptions.unpause(itemName, parameters);
|
|
@@ -59,6 +53,7 @@ class RpcClientImpl {
|
|
|
59
53
|
this.remoteSubscriptions.consume(itemName, params, data);
|
|
60
54
|
})
|
|
61
55
|
.catch((e) => {
|
|
56
|
+
// is it a good idea to unsubscribe on errors? What if those errors are network-related?
|
|
62
57
|
for (const consumer of consumers) {
|
|
63
58
|
this.remoteSubscriptions.unsubscribe(itemName, params, consumer);
|
|
64
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":";;;AAAA,sCAA2E;AAC3E,mDAA0C;AAC1C,qEAA4D;AAC5D,qEAA4D;AAC5D,mCAA6B;AAC7B,2CAAmE;AAEnE,0DAAsD;AAEtD,MAAa,aAAa;IACxB,YACE,GAAW,EACM,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;QA0ClC,aAAQ,GAAG,IAAA,eAAM,GAAE,CAAA;QA8C3B,SAAI,GAAG,CACb,QAAgB,EAChB,UAAqB,EACrB,WAAyB,EACP,EAAE;YACpB,OAAO,IAAI,CAAC,MAAM,CAChB,QAAQ,EACR,uBAAc,CAAC,IAAI,EACnB,CAAC,GAAG,UAAU,EAAE,EAAE,CAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,QAAQ,EACR,UAAU,EACV,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CACjD,EACH,UAAU,CACX,CAAA;QACH,CAAC,CAAA;QAEO,cAAS,GAAG,KAAK,EACvB,QAAgB,EAChB,UAAqB,EACrB,QAA8B,EAC9B,WAAyB,EACV,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YAEvE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClB,CAAC;YAED,
|
|
1
|
+
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WebSocketConnection = void 0;
|
|
3
|
+
exports.setTestWebSocketConnectionDelay = exports.WebSocketConnection = void 0;
|
|
4
4
|
const logger_js_1 = require("../logger.js");
|
|
5
5
|
const json_js_1 = require("../utils/json.js");
|
|
6
6
|
const promises_js_1 = require("../utils/promises.js");
|
|
@@ -89,6 +89,9 @@ class WebSocketConnection {
|
|
|
89
89
|
async establishConnection(onDisconnected) {
|
|
90
90
|
return new Promise(async (resolve, reject) => {
|
|
91
91
|
try {
|
|
92
|
+
if (testWebSocketConnectionDelay) {
|
|
93
|
+
await (0, promises_js_1.adelay)(testWebSocketConnectionDelay);
|
|
94
|
+
}
|
|
92
95
|
const socket = new WebSocket(this.url, this.clientId);
|
|
93
96
|
let connected = false;
|
|
94
97
|
socket.addEventListener("open", () => {
|
|
@@ -158,4 +161,9 @@ class WebSocketConnection {
|
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
163
|
exports.WebSocketConnection = WebSocketConnection;
|
|
164
|
+
let testWebSocketConnectionDelay = 0;
|
|
165
|
+
function setTestWebSocketConnectionDelay(ms) {
|
|
166
|
+
testWebSocketConnectionDelay = ms;
|
|
167
|
+
}
|
|
168
|
+
exports.setTestWebSocketConnectionDelay = setTestWebSocketConnectionDelay;
|
|
161
169
|
//# sourceMappingURL=WebSocketConnection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":";;;AAAA,4CAAgC;AAChC,8CAA8C;AAC9C,sDAA2C;AAE3C,MAAa,mBAAmB;IAC9B,YACmB,GAAW,EACX,QAAgB,EAChB,OAKhB,EACgB,OAII,EACJ,WAAuB,EACvB,cAA0B;QAd1B,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAKvB;QACgB,YAAO,GAAP,OAAO,CAIH;QACJ,gBAAW,GAAX,WAAW,CAAY;QACvB,mBAAc,GAAd,cAAc,CAAY;QAKrC,iBAAY,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import http from "http";
|
|
|
3
3
|
export declare class ConnectionsServer {
|
|
4
4
|
constructor(server: http.Server, options: ConnectionsServerOptions, connectionClosed: (clientId: string) => void, closeSocketsWithDifferentPath: boolean);
|
|
5
5
|
publish(clientId: string, itemName: string, parameters: unknown[], data: unknown): void;
|
|
6
|
+
isClientSubscribed(clientId: string): boolean;
|
|
6
7
|
private wss;
|
|
7
8
|
private clientSockets;
|
|
8
9
|
close(): Promise<void>;
|
|
@@ -57,8 +57,12 @@ class ConnectionsServer {
|
|
|
57
57
|
ws.send((0, json_js_1.safeStringify)(message));
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
isClientSubscribed(clientId) {
|
|
61
|
+
return this.clientSockets.has(clientId);
|
|
62
|
+
}
|
|
60
63
|
async close() {
|
|
61
64
|
return new Promise((resolve, reject) => {
|
|
65
|
+
this.clientSockets.forEach((c) => c.terminate());
|
|
62
66
|
this.wss.close((err) => {
|
|
63
67
|
if (err)
|
|
64
68
|
reject(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionsServer.js","sourceRoot":"","sources":["../../src/server/ConnectionsServer.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,2BAA6C;AAE7C,4CAAgC;AAEhC,MAAa,iBAAiB;IAC5B,YACE,MAAmB,EACnB,OAAiC,EACjC,gBAA4C,EAC5C,6BAAsC;
|
|
1
|
+
{"version":3,"file":"ConnectionsServer.js","sourceRoot":"","sources":["../../src/server/ConnectionsServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,6 @@ export declare class RpcServerImpl<S extends Services<S>, C extends RpcContext>
|
|
|
13
13
|
createServicesWithTriggers(): ServicesWithTriggers<S>;
|
|
14
14
|
_allSubscriptions(): [itemName: string, parameters: unknown[], consumer: unknown][];
|
|
15
15
|
private readonly localSubscriptions;
|
|
16
|
-
private readonly invocationCache;
|
|
17
16
|
private connectionsServer;
|
|
18
17
|
readonly httpServer: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
|
|
19
18
|
private call;
|
|
@@ -29,7 +29,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.RpcServerImpl = void 0;
|
|
30
30
|
const LocalSubscriptions_js_1 = require("./LocalSubscriptions.js");
|
|
31
31
|
const http_1 = __importDefault(require("http"));
|
|
32
|
-
const promises_js_1 = require("../utils/promises.js");
|
|
33
32
|
const http_js_1 = require("./http.js");
|
|
34
33
|
const rpc_js_1 = require("../rpc.js");
|
|
35
34
|
const logger_js_1 = require("../logger.js");
|
|
@@ -41,7 +40,6 @@ class RpcServerImpl {
|
|
|
41
40
|
this.services = services;
|
|
42
41
|
this.options = options;
|
|
43
42
|
this.localSubscriptions = new LocalSubscriptions_js_1.LocalSubscriptions();
|
|
44
|
-
this.invocationCache = new promises_js_1.PromiseCache();
|
|
45
43
|
this.connectionsServer = null;
|
|
46
44
|
this.call = async (connectionContext, itemName, parameters) => {
|
|
47
45
|
const item = this.getRemoteFunction(itemName);
|
|
@@ -78,7 +76,9 @@ class RpcServerImpl {
|
|
|
78
76
|
logger_js_1.log.error("Cannot get data for subscription", e);
|
|
79
77
|
}
|
|
80
78
|
});
|
|
81
|
-
this.
|
|
79
|
+
if (this.connectionsServer?.isClientSubscribed(connectionContext.clientId)) {
|
|
80
|
+
this.localSubscriptions.subscribe(connectionContext.clientId, itemName, parameters, update);
|
|
81
|
+
}
|
|
82
82
|
const lastData = await this.invokeLocalFunction(connectionContext, itemName, item, parameters, rpc_js_1.InvocationType.Subscribe);
|
|
83
83
|
lastDataJson = (0, json_js_1.safeStringify)(lastData);
|
|
84
84
|
return lastData;
|
|
@@ -184,16 +184,14 @@ class RpcServerImpl {
|
|
|
184
184
|
};
|
|
185
185
|
}
|
|
186
186
|
invokeLocalFunction(connectionContext, itemName, item, parameters, invocationType) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return (0, middleware_js_1.withMiddlewares)(ctx, this.options.middleware, invokeItem, ...parametersCopy);
|
|
196
|
-
});
|
|
187
|
+
const parametersCopy = (0, json_js_1.safeParseJson)((0, json_js_1.safeStringify)(parameters));
|
|
188
|
+
const ctx = (0, json_js_1.safeParseJson)((0, json_js_1.safeStringify)(connectionContext));
|
|
189
|
+
ctx.itemName = itemName;
|
|
190
|
+
ctx.invocationType = invocationType;
|
|
191
|
+
const invokeItem = (...params) => {
|
|
192
|
+
return item.function.call(item.container, ...params, ctx);
|
|
193
|
+
};
|
|
194
|
+
return (0, middleware_js_1.withMiddlewares)(ctx, this.options.middleware, invokeItem, ...parametersCopy);
|
|
197
195
|
}
|
|
198
196
|
}
|
|
199
197
|
exports.RpcServerImpl = RpcServerImpl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mEAA0D;AAC1D,gDAAuB;AAEvB,
|
|
1
|
+
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/promises.d.ts
CHANGED
package/dist/utils/promises.js
CHANGED
|
@@ -1,27 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.adelay =
|
|
4
|
-
class PromiseCache {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.cache = {};
|
|
7
|
-
}
|
|
8
|
-
invoke(cacheKey, supplier) {
|
|
9
|
-
const key = JSON.stringify(cacheKey);
|
|
10
|
-
if (!this.cache[key]) {
|
|
11
|
-
this.cache[key] = supplier()
|
|
12
|
-
.then((r) => {
|
|
13
|
-
delete this.cache[key];
|
|
14
|
-
return r;
|
|
15
|
-
})
|
|
16
|
-
.catch((e) => {
|
|
17
|
-
delete this.cache[key];
|
|
18
|
-
throw e;
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
return this.cache[key];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.PromiseCache = PromiseCache;
|
|
3
|
+
exports.adelay = void 0;
|
|
25
4
|
async function adelay(ms) {
|
|
26
5
|
return new Promise((r) => setTimeout(r, ms));
|
|
27
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../src/utils/promises.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../src/utils/promises.ts"],"names":[],"mappings":";;;AAAO,KAAK,UAAU,MAAM,CAAC,EAAU;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC9C,CAAC;AAFD,wBAEC"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,6 @@ export class RemoteSubscriptions {
|
|
|
29
29
|
itemSubscriptions.byParameters.set(parametersKey, parameterSubscriptions)
|
|
30
30
|
parameterSubscriptions.consumers.push({
|
|
31
31
|
consumer,
|
|
32
|
-
completed: false,
|
|
33
32
|
})
|
|
34
33
|
}
|
|
35
34
|
|
|
@@ -55,9 +54,7 @@ export class RemoteSubscriptions {
|
|
|
55
54
|
if (this.cache) this.cache.put(itemName, parameters, data)
|
|
56
55
|
filterSubscriptions.cached = data
|
|
57
56
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
58
|
-
|
|
59
|
-
consumer.consumer(data)
|
|
60
|
-
}
|
|
57
|
+
consumer.consumer(data)
|
|
61
58
|
})
|
|
62
59
|
})
|
|
63
60
|
|
|
@@ -117,9 +114,7 @@ export class RemoteSubscriptions {
|
|
|
117
114
|
if (this.cache) this.cache.put(itemName, parameters, data)
|
|
118
115
|
filterSubscriptions.cached = data
|
|
119
116
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
120
|
-
|
|
121
|
-
consumer.consumer(data)
|
|
122
|
-
}
|
|
117
|
+
consumer.consumer(data)
|
|
123
118
|
})
|
|
124
119
|
}
|
|
125
120
|
}
|
|
@@ -140,9 +135,7 @@ export class RemoteSubscriptions {
|
|
|
140
135
|
|
|
141
136
|
for (const [itemName, itemSubscriptions] of this.byItem) {
|
|
142
137
|
for (const [, parameterSubscriptions] of itemSubscriptions.byParameters) {
|
|
143
|
-
const consumers = parameterSubscriptions.consumers
|
|
144
|
-
.filter((c) => c.completed)
|
|
145
|
-
.map((c) => c.consumer)
|
|
138
|
+
const consumers = parameterSubscriptions.consumers.map((c) => c.consumer)
|
|
146
139
|
|
|
147
140
|
if (consumers.length) {
|
|
148
141
|
result.push([itemName, parameterSubscriptions.parameters, consumers])
|
|
@@ -186,7 +179,6 @@ type ParametersSubscription = {
|
|
|
186
179
|
|
|
187
180
|
type ConsumerSubscription = {
|
|
188
181
|
consumer: (d: unknown) => void
|
|
189
|
-
completed: boolean
|
|
190
182
|
}
|
|
191
183
|
|
|
192
184
|
function getParametersKey(parameters: unknown[]) {
|
|
@@ -128,21 +128,14 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
128
128
|
consumer(cached)
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
//
|
|
131
|
+
// Add subscription before subscribing in case in will be unsubscribed while waiting for a server reply
|
|
132
|
+
// Subscription is added in pending state to not re-subscribe until subscribe response is completed
|
|
132
133
|
this.remoteSubscriptions.addSubscription(itemName, parameters, consumer)
|
|
133
134
|
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
await this.connection.connect()
|
|
135
|
+
// Start connecting, if not already
|
|
136
|
+
void this.connection.connect()
|
|
137
137
|
|
|
138
138
|
try {
|
|
139
|
-
// check if already unsubscribed
|
|
140
|
-
const sub = this.remoteSubscriptions.getConsumerSubscription(itemName, parameters, consumer)
|
|
141
|
-
if (!sub) return
|
|
142
|
-
|
|
143
|
-
// mark as completed - will resubscribe on reconnects
|
|
144
|
-
sub.completed = true
|
|
145
|
-
|
|
146
139
|
this.remoteSubscriptions.pause(itemName, parameters)
|
|
147
140
|
|
|
148
141
|
const data = await this.invoke(
|
|
@@ -158,6 +151,7 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
158
151
|
)
|
|
159
152
|
|
|
160
153
|
this.remoteSubscriptions.unpause(itemName, parameters)
|
|
154
|
+
|
|
161
155
|
this.remoteSubscriptions.consume(itemName, parameters, data)
|
|
162
156
|
this.remoteSubscriptions.flushQueue(itemName, parameters)
|
|
163
157
|
} catch (e) {
|
|
@@ -199,6 +193,7 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
199
193
|
this.remoteSubscriptions.consume(itemName, params, data)
|
|
200
194
|
})
|
|
201
195
|
.catch((e) => {
|
|
196
|
+
// is it a good idea to unsubscribe on errors? What if those errors are network-related?
|
|
202
197
|
for (const consumer of consumers) {
|
|
203
198
|
this.remoteSubscriptions.unsubscribe(itemName, params, consumer)
|
|
204
199
|
}
|
|
@@ -15,10 +15,10 @@ export class WebSocketConnection {
|
|
|
15
15
|
private readonly consume: (
|
|
16
16
|
itemName: string,
|
|
17
17
|
parameters: unknown[],
|
|
18
|
-
data: unknown
|
|
18
|
+
data: unknown,
|
|
19
19
|
) => Promise<unknown>,
|
|
20
20
|
private readonly onConnected: () => void,
|
|
21
|
-
private readonly onDisconnected: () => void
|
|
21
|
+
private readonly onDisconnected: () => void,
|
|
22
22
|
) {
|
|
23
23
|
this.clientId = clientId
|
|
24
24
|
}
|
|
@@ -69,7 +69,7 @@ export class WebSocketConnection {
|
|
|
69
69
|
|
|
70
70
|
// recreate promise so new clients will wait for new connection
|
|
71
71
|
this.waitConnectionPromise = new Promise(
|
|
72
|
-
(resolve) => (resolveConnectionPromise = resolve)
|
|
72
|
+
(resolve) => (resolveConnectionPromise = resolve),
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
resolve()
|
|
@@ -87,7 +87,7 @@ export class WebSocketConnection {
|
|
|
87
87
|
|
|
88
88
|
// 2. ... unable to establish connection
|
|
89
89
|
resolve()
|
|
90
|
-
}
|
|
90
|
+
},
|
|
91
91
|
)
|
|
92
92
|
})
|
|
93
93
|
|
|
@@ -122,6 +122,10 @@ export class WebSocketConnection {
|
|
|
122
122
|
private async establishConnection(onDisconnected: () => void): Promise<void> {
|
|
123
123
|
return new Promise(async (resolve, reject) => {
|
|
124
124
|
try {
|
|
125
|
+
if (testWebSocketConnectionDelay) {
|
|
126
|
+
await adelay(testWebSocketConnectionDelay)
|
|
127
|
+
}
|
|
128
|
+
|
|
125
129
|
const socket = new WebSocket(this.url, this.clientId)
|
|
126
130
|
|
|
127
131
|
let connected = false
|
|
@@ -209,3 +213,9 @@ export class WebSocketConnection {
|
|
|
209
213
|
return this.socket
|
|
210
214
|
}
|
|
211
215
|
}
|
|
216
|
+
|
|
217
|
+
let testWebSocketConnectionDelay = 0
|
|
218
|
+
|
|
219
|
+
export function setTestWebSocketConnectionDelay(ms: number) {
|
|
220
|
+
testWebSocketConnectionDelay = ms
|
|
221
|
+
}
|
|
@@ -8,7 +8,7 @@ export class ConnectionsServer {
|
|
|
8
8
|
server: http.Server,
|
|
9
9
|
options: ConnectionsServerOptions,
|
|
10
10
|
connectionClosed: (clientId: string) => void,
|
|
11
|
-
closeSocketsWithDifferentPath: boolean
|
|
11
|
+
closeSocketsWithDifferentPath: boolean,
|
|
12
12
|
) {
|
|
13
13
|
this.wss = new WebSocketServer({noServer: true})
|
|
14
14
|
|
|
@@ -72,11 +72,17 @@ export class ConnectionsServer {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
isClientSubscribed(clientId: string): boolean {
|
|
76
|
+
return this.clientSockets.has(clientId)
|
|
77
|
+
}
|
|
78
|
+
|
|
75
79
|
private wss: WebSocketServer
|
|
76
80
|
private clientSockets = new Map<string, WebSocket & {alive: boolean}>()
|
|
77
81
|
|
|
78
82
|
async close() {
|
|
79
83
|
return new Promise<void>((resolve, reject) => {
|
|
84
|
+
this.clientSockets.forEach((c) => c.terminate())
|
|
85
|
+
|
|
80
86
|
this.wss.close((err) => {
|
|
81
87
|
if (err) reject(err)
|
|
82
88
|
else resolve()
|
|
@@ -7,7 +7,7 @@ export class LocalSubscriptions {
|
|
|
7
7
|
clientId: string,
|
|
8
8
|
itemName: string,
|
|
9
9
|
parameters: unknown[],
|
|
10
|
-
update: (suppliedData?: unknown) => void
|
|
10
|
+
update: (suppliedData?: unknown) => void,
|
|
11
11
|
) {
|
|
12
12
|
const itemSubscriptions = this.byItem.get(itemName) || {byFilter: new Map()}
|
|
13
13
|
this.byItem.set(itemName, itemSubscriptions)
|
|
@@ -35,7 +35,7 @@ export class LocalSubscriptions {
|
|
|
35
35
|
if (!subscriptions) return
|
|
36
36
|
|
|
37
37
|
subscriptions.subscribedClients = subscriptions.subscribedClients.filter(
|
|
38
|
-
(subscription) => subscription.clientId != clientId
|
|
38
|
+
(subscription) => subscription.clientId != clientId,
|
|
39
39
|
)
|
|
40
40
|
|
|
41
41
|
if (!subscriptions.subscribedClients.length) {
|
|
@@ -51,7 +51,7 @@ export class LocalSubscriptions {
|
|
|
51
51
|
for (const [itemName, itemSubscriptions] of this.byItem.entries()) {
|
|
52
52
|
for (const [filterKey, subscriptions] of itemSubscriptions.byFilter.entries()) {
|
|
53
53
|
subscriptions.subscribedClients = subscriptions.subscribedClients.filter(
|
|
54
|
-
(subscription) => subscription.clientId != clientId
|
|
54
|
+
(subscription) => subscription.clientId != clientId,
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
if (!subscriptions.subscribedClients.length) {
|
|
@@ -129,7 +129,7 @@ type SubscribedClient = {
|
|
|
129
129
|
|
|
130
130
|
function filterContains(
|
|
131
131
|
triggerFilter: Record<string, unknown>,
|
|
132
|
-
subscriptionFilter: Record<string, unknown
|
|
132
|
+
subscriptionFilter: Record<string, unknown>,
|
|
133
133
|
): boolean {
|
|
134
134
|
if (subscriptionFilter == null) return true // subscribe to all data
|
|
135
135
|
if (triggerFilter == null) return true // all data modified
|