cbcore-ts 1.0.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/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/uicore.iml +9 -0
- package/.idea/vcs.xml +6 -0
- package/.jshintrc +4 -0
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/compiledScripts/CBCore.d.ts +54 -0
- package/compiledScripts/CBCore.js +182 -0
- package/compiledScripts/CBCore.js.map +7 -0
- package/compiledScripts/CBDataInterfaces.d.ts +156 -0
- package/compiledScripts/CBDataInterfaces.js +35 -0
- package/compiledScripts/CBDataInterfaces.js.map +7 -0
- package/compiledScripts/CBLanguageService.d.ts +43 -0
- package/compiledScripts/CBLanguageService.js +167 -0
- package/compiledScripts/CBLanguageService.js.map +7 -0
- package/compiledScripts/CBServerClient.d.ts +10 -0
- package/compiledScripts/CBServerClient.js +88 -0
- package/compiledScripts/CBServerClient.js.map +7 -0
- package/compiledScripts/CBSocketCallbackHolder.d.ts +65 -0
- package/compiledScripts/CBSocketCallbackHolder.js +343 -0
- package/compiledScripts/CBSocketCallbackHolder.js.map +7 -0
- package/compiledScripts/CBSocketClient.d.ts +70 -0
- package/compiledScripts/CBSocketClient.js +371 -0
- package/compiledScripts/CBSocketClient.js.map +7 -0
- package/compiledScripts/index.d.ts +6 -0
- package/compiledScripts/index.js +23 -0
- package/compiledScripts/index.js.map +7 -0
- package/etsc.config.mjs +23 -0
- package/package.json +51 -0
- package/rollup.config.js +49 -0
- package/scripts/CBCore.ts +381 -0
- package/scripts/CBDataInterfaces.ts +336 -0
- package/scripts/CBLanguageService.ts +371 -0
- package/scripts/CBServerClient.ts +147 -0
- package/scripts/CBSocketCallbackHolder.ts +872 -0
- package/scripts/CBSocketClient.ts +748 -0
- package/scripts/index.ts +18 -0
- package/tsconfig.json +69 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var CBSocketCallbackHolder_exports = {};
|
|
25
|
+
__export(CBSocketCallbackHolder_exports, {
|
|
26
|
+
CBSocketCallbackHolder: () => CBSocketCallbackHolder
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(CBSocketCallbackHolder_exports);
|
|
29
|
+
var import_object_hash = __toESM(require("object-hash"));
|
|
30
|
+
var import_uicore_ts = require("../../uicore-ts");
|
|
31
|
+
var import_CBSocketClient = require("./CBSocketClient");
|
|
32
|
+
class CBSocketCallbackHolder extends import_uicore_ts.UIObject {
|
|
33
|
+
constructor(socketClient, previousCallbackHolder) {
|
|
34
|
+
super();
|
|
35
|
+
this.messageDescriptors = {};
|
|
36
|
+
this.handlers = {};
|
|
37
|
+
this.onetimeHandlers = {};
|
|
38
|
+
this.keysForIdentifiers = {};
|
|
39
|
+
this.isValid = import_uicore_ts.YES;
|
|
40
|
+
this._verifiedResponseHashesDictionary = {};
|
|
41
|
+
this._socketClient = socketClient;
|
|
42
|
+
if ((0, import_uicore_ts.IS)(previousCallbackHolder)) {
|
|
43
|
+
this.handlers = previousCallbackHolder.handlers;
|
|
44
|
+
this._verifiedResponseHashesDictionary = previousCallbackHolder._verifiedResponseHashesDictionary;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
triggerDisconnectHandlers() {
|
|
48
|
+
this.messageDescriptors.forEach(function(descriptor, key) {
|
|
49
|
+
if (descriptor.mainResponseReceived) {
|
|
50
|
+
descriptor.completionFunction(import_CBSocketClient.CBSocketClient.disconnectionMessage, import_uicore_ts.nil);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
registerHandler(key, handlerFunction) {
|
|
55
|
+
if (!this.handlers[key]) {
|
|
56
|
+
this.handlers[key] = [];
|
|
57
|
+
}
|
|
58
|
+
this.handlers[key].push(handlerFunction);
|
|
59
|
+
}
|
|
60
|
+
registerOnetimeHandler(key, handlerFunction) {
|
|
61
|
+
if (!this.onetimeHandlers[key]) {
|
|
62
|
+
this.onetimeHandlers[key] = [];
|
|
63
|
+
}
|
|
64
|
+
this.onetimeHandlers[key].push(handlerFunction);
|
|
65
|
+
}
|
|
66
|
+
get storedResponseHashesDictionary() {
|
|
67
|
+
if ((0, import_uicore_ts.IS_NOT)(this._storedResponseHashesDictionary)) {
|
|
68
|
+
this._storedResponseHashesDictionary = JSON.parse(localStorage["CBSocketResponseHashesDictionary"] || "{}");
|
|
69
|
+
}
|
|
70
|
+
return this._storedResponseHashesDictionary;
|
|
71
|
+
}
|
|
72
|
+
storedResponseHashObjectForKey(requestKey, requestDataHash) {
|
|
73
|
+
const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash);
|
|
74
|
+
const hashObject = this.storedResponseHashesDictionary[localStorageKey];
|
|
75
|
+
const result = (0, import_uicore_ts.FIRST)(hashObject, {});
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
storedResponseForKey(requestKey, requestDataHash) {
|
|
79
|
+
const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash);
|
|
80
|
+
const storedObject = JSON.parse(localStorage[localStorageKey] || "{}");
|
|
81
|
+
return storedObject.responseMessageData;
|
|
82
|
+
}
|
|
83
|
+
keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash) {
|
|
84
|
+
const result = "_CBSCH_LS_key_" + requestKey + "_" + requestDataHash;
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
storeResponse(requestKey, requestDataHash, responseMessage, responseDataHash) {
|
|
88
|
+
if (!responseMessage.canBeStoredAsResponse || (0, import_uicore_ts.IS_NOT)(responseMessage.messageData) && (0, import_uicore_ts.IS_NOT)(responseMessage.messageDataHash)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash);
|
|
92
|
+
var validityDate;
|
|
93
|
+
if (responseMessage.responseValidityDuration) {
|
|
94
|
+
validityDate = Date.now() + responseMessage.responseValidityDuration;
|
|
95
|
+
}
|
|
96
|
+
const storedResponseHashesDictionary = this.storedResponseHashesDictionary;
|
|
97
|
+
storedResponseHashesDictionary[localStorageKey] = {
|
|
98
|
+
hash: responseDataHash,
|
|
99
|
+
validityDate
|
|
100
|
+
};
|
|
101
|
+
this.saveInLocalStorage(localStorageKey, {
|
|
102
|
+
responseMessageData: responseMessage.messageData,
|
|
103
|
+
responseHash: responseDataHash
|
|
104
|
+
});
|
|
105
|
+
this.saveStoredResponseHashesDictionary(storedResponseHashesDictionary);
|
|
106
|
+
}
|
|
107
|
+
saveStoredResponseHashesDictionary(storedResponseHashesDictionary) {
|
|
108
|
+
this.saveInLocalStorage("CBSocketResponseHashesDictionary", storedResponseHashesDictionary);
|
|
109
|
+
}
|
|
110
|
+
saveInLocalStorage(key, object) {
|
|
111
|
+
const stringToSave = JSON.stringify(object);
|
|
112
|
+
if (stringToSave != localStorage[key]) {
|
|
113
|
+
localStorage[key] = stringToSave;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
socketShouldSendMessage(key, message, completionPolicy, completionFunction) {
|
|
117
|
+
var result = import_uicore_ts.YES;
|
|
118
|
+
var triggerStoredResponseImmediately = import_uicore_ts.NO;
|
|
119
|
+
const messageDataHash = (0, import_object_hash.default)(message.messageData || import_uicore_ts.nil);
|
|
120
|
+
const descriptorKey = "socketMessageDescriptor_" + key + messageDataHash;
|
|
121
|
+
this.messageDescriptors[descriptorKey] = this.messageDescriptors[descriptorKey] || [];
|
|
122
|
+
const hashObject = this.storedResponseHashObjectForKey(key, messageDataHash);
|
|
123
|
+
message.storedResponseHash = hashObject.hash;
|
|
124
|
+
if (completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.first) {
|
|
125
|
+
const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
|
|
126
|
+
const matchingDescriptor = descriptorsForKey.find(function(descriptor, index, array) {
|
|
127
|
+
return descriptor.messageDataHash == messageDataHash;
|
|
128
|
+
});
|
|
129
|
+
if (matchingDescriptor) {
|
|
130
|
+
result = import_uicore_ts.NO;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.storedOrFirst) {
|
|
134
|
+
const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
|
|
135
|
+
const matchingDescriptor = descriptorsForKey.find(function(descriptor, index, array) {
|
|
136
|
+
return descriptor.messageDataHash == messageDataHash;
|
|
137
|
+
});
|
|
138
|
+
const storedResponse = (0, import_uicore_ts.IS)(message.storedResponseHash);
|
|
139
|
+
if (matchingDescriptor || storedResponse && this._verifiedResponseHashesDictionary[message.storedResponseHash]) {
|
|
140
|
+
result = import_uicore_ts.NO;
|
|
141
|
+
triggerStoredResponseImmediately = import_uicore_ts.YES;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstOnly) {
|
|
145
|
+
const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
|
|
146
|
+
const matchingDescriptor = descriptorsForKey.find(function(descriptor, index, array) {
|
|
147
|
+
return descriptor.messageDataHash == messageDataHash;
|
|
148
|
+
});
|
|
149
|
+
if (matchingDescriptor) {
|
|
150
|
+
return import_uicore_ts.NO;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (hashObject && hashObject.hash && hashObject.validityDate && message.storedResponseHash && this._verifiedResponseHashesDictionary[message.storedResponseHash] && hashObject.validityDate > Date.now()) {
|
|
154
|
+
result = import_uicore_ts.NO;
|
|
155
|
+
triggerStoredResponseImmediately = import_uicore_ts.YES;
|
|
156
|
+
}
|
|
157
|
+
if ((0, import_uicore_ts.IS)(completionFunction)) {
|
|
158
|
+
this.messageDescriptors[descriptorKey].push({
|
|
159
|
+
key,
|
|
160
|
+
message: {
|
|
161
|
+
identifier: message.identifier,
|
|
162
|
+
inResponseToIdentifier: message.inResponseToIdentifier,
|
|
163
|
+
keepWaitingForResponses: message.keepWaitingForResponses
|
|
164
|
+
},
|
|
165
|
+
sentAtTime: Date.now(),
|
|
166
|
+
messageDataHash,
|
|
167
|
+
mainResponseReceived: import_uicore_ts.NO,
|
|
168
|
+
anyMainResponseReceived: import_uicore_ts.NO,
|
|
169
|
+
completionPolicy,
|
|
170
|
+
completionFunction
|
|
171
|
+
});
|
|
172
|
+
this.keysForIdentifiers[message.identifier] = descriptorKey;
|
|
173
|
+
}
|
|
174
|
+
if (triggerStoredResponseImmediately) {
|
|
175
|
+
this.socketDidReceiveMessageForKey(
|
|
176
|
+
import_CBSocketClient.CBSocketClient.responseMessageKey,
|
|
177
|
+
{
|
|
178
|
+
identifier: import_uicore_ts.nil,
|
|
179
|
+
messageData: import_uicore_ts.nil,
|
|
180
|
+
inResponseToIdentifier: message.identifier,
|
|
181
|
+
useStoredResponse: import_uicore_ts.YES
|
|
182
|
+
},
|
|
183
|
+
import_uicore_ts.nil
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
static defaultMultipleMessagecompletionFunction(responseMessages, callcompletionFunctions) {
|
|
189
|
+
callcompletionFunctions();
|
|
190
|
+
}
|
|
191
|
+
socketWillSendMultipleMessage(messageToSend, completionFunction = CBSocketCallbackHolder.defaultMultipleMessagecompletionFunction) {
|
|
192
|
+
const key = import_CBSocketClient.CBSocketClient.multipleMessageKey;
|
|
193
|
+
const messageDataHash = (0, import_object_hash.default)(messageToSend.messageData || import_uicore_ts.nil);
|
|
194
|
+
const descriptorKey = "socketMessageDescriptor_" + key + messageDataHash;
|
|
195
|
+
this.messageDescriptors[descriptorKey] = this.messageDescriptors[descriptorKey] || [];
|
|
196
|
+
messageToSend.storedResponseHash = this.storedResponseHashObjectForKey(key, messageDataHash).hash;
|
|
197
|
+
this.messageDescriptors[descriptorKey].push({
|
|
198
|
+
key,
|
|
199
|
+
message: {
|
|
200
|
+
identifier: messageToSend.identifier,
|
|
201
|
+
inResponseToIdentifier: messageToSend.inResponseToIdentifier,
|
|
202
|
+
keepWaitingForResponses: messageToSend.keepWaitingForResponses
|
|
203
|
+
},
|
|
204
|
+
sentAtTime: Date.now(),
|
|
205
|
+
messageDataHash,
|
|
206
|
+
mainResponseReceived: import_uicore_ts.NO,
|
|
207
|
+
anyMainResponseReceived: import_uicore_ts.NO,
|
|
208
|
+
completionPolicy: import_CBSocketClient.CBSocketClient.completionPolicy.directOnly,
|
|
209
|
+
completionFunction: function(responseMessage, respondWithMessage) {
|
|
210
|
+
completionFunction(
|
|
211
|
+
responseMessage.map(function(messageObject, index, array) {
|
|
212
|
+
return messageObject.message.messageData;
|
|
213
|
+
}),
|
|
214
|
+
function() {
|
|
215
|
+
responseMessage.forEach(function(messageObject, index, array) {
|
|
216
|
+
this._socketClient.didReceiveMessageForKey(messageObject.key, messageObject.message);
|
|
217
|
+
}.bind(this));
|
|
218
|
+
}.bind(this)
|
|
219
|
+
);
|
|
220
|
+
}.bind(this)
|
|
221
|
+
});
|
|
222
|
+
this.keysForIdentifiers[messageToSend.identifier] = descriptorKey;
|
|
223
|
+
}
|
|
224
|
+
socketDidReceiveMessageForKey(key, message, sendResponseFunction) {
|
|
225
|
+
if (!this.isValid) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (this.handlers[key]) {
|
|
229
|
+
this.handlers[key].forEach(function(handler, index, array) {
|
|
230
|
+
handler(message.messageData, sendResponseFunction);
|
|
231
|
+
}.bind(this));
|
|
232
|
+
}
|
|
233
|
+
if (this.onetimeHandlers[key]) {
|
|
234
|
+
this.onetimeHandlers[key].forEach(function(handler, index, array) {
|
|
235
|
+
handler(message.messageData, sendResponseFunction);
|
|
236
|
+
}.bind(this));
|
|
237
|
+
delete this.onetimeHandlers[key];
|
|
238
|
+
}
|
|
239
|
+
if (message.inResponseToIdentifier && (import_CBSocketClient.CBSocketClient.responseMessageKey == key || import_CBSocketClient.CBSocketClient.multipleMessageKey == key)) {
|
|
240
|
+
const descriptorKey = this.keysForIdentifiers[message.inResponseToIdentifier];
|
|
241
|
+
const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
|
|
242
|
+
const responseDataHash = message.messageDataHash;
|
|
243
|
+
if (!message.keepWaitingForResponses) {
|
|
244
|
+
delete this.keysForIdentifiers[message.inResponseToIdentifier];
|
|
245
|
+
delete this.messageDescriptors[descriptorKey];
|
|
246
|
+
}
|
|
247
|
+
const callCompletionFunction = (descriptor, storedResponseCondition = import_uicore_ts.NO) => {
|
|
248
|
+
var messageData = message.messageData;
|
|
249
|
+
if (message.useStoredResponse && storedResponseCondition) {
|
|
250
|
+
messageData = this.storedResponseForKey(descriptor.key, descriptor.messageDataHash);
|
|
251
|
+
const responseHash = this.storedResponseHashObjectForKey(
|
|
252
|
+
descriptor.key,
|
|
253
|
+
descriptor.messageDataHash
|
|
254
|
+
).hash;
|
|
255
|
+
const localStorageKey = this.keyForRequestKeyAndRequestDataHash(
|
|
256
|
+
descriptor.key,
|
|
257
|
+
descriptor.messageDataHash
|
|
258
|
+
);
|
|
259
|
+
if (message.responseValidityDuration && this.storedResponseHashesDictionary[localStorageKey]) {
|
|
260
|
+
this.storedResponseHashesDictionary[localStorageKey].validityDate = Date.now() + message.responseValidityDuration;
|
|
261
|
+
this.saveStoredResponseHashesDictionary(this.storedResponseHashesDictionary);
|
|
262
|
+
}
|
|
263
|
+
this._verifiedResponseHashesDictionary[responseHash] = import_uicore_ts.YES;
|
|
264
|
+
console.log("Using stored response.");
|
|
265
|
+
}
|
|
266
|
+
descriptor.completionFunction(messageData, sendResponseFunction);
|
|
267
|
+
descriptor.responseDataHash = responseDataHash;
|
|
268
|
+
};
|
|
269
|
+
descriptorsForKey.copy().forEach(function(descriptor, index, array) {
|
|
270
|
+
if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.directOnly && descriptor.message.identifier == message.inResponseToIdentifier || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.first || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstOnly || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.storedOrFirst) {
|
|
271
|
+
if (!message.keepWaitingForResponses) {
|
|
272
|
+
this.storeResponse(descriptor.key, descriptor.messageDataHash, message, responseDataHash);
|
|
273
|
+
descriptorsForKey.removeElement(descriptor);
|
|
274
|
+
sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
|
|
275
|
+
}
|
|
276
|
+
callCompletionFunction(descriptor, !message.keepWaitingForResponses);
|
|
277
|
+
} else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.all) {
|
|
278
|
+
callCompletionFunction(descriptor, !message.keepWaitingForResponses);
|
|
279
|
+
if (!message.keepWaitingForResponses) {
|
|
280
|
+
if (message.inResponseToIdentifier == descriptor.message.identifier) {
|
|
281
|
+
sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
|
|
282
|
+
descriptor.mainResponseReceived = import_uicore_ts.YES;
|
|
283
|
+
descriptorsForKey.removeElement(descriptor);
|
|
284
|
+
}
|
|
285
|
+
descriptor.anyMainResponseReceived = import_uicore_ts.YES;
|
|
286
|
+
}
|
|
287
|
+
} else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.allDifferent) {
|
|
288
|
+
if (descriptor.responseDataHash != responseDataHash) {
|
|
289
|
+
callCompletionFunction(descriptor, !message.keepWaitingForResponses);
|
|
290
|
+
}
|
|
291
|
+
if (!message.keepWaitingForResponses) {
|
|
292
|
+
if (message.inResponseToIdentifier == descriptor.message.identifier) {
|
|
293
|
+
sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
|
|
294
|
+
descriptor.mainResponseReceived = import_uicore_ts.YES;
|
|
295
|
+
descriptorsForKey.removeElement(descriptor);
|
|
296
|
+
}
|
|
297
|
+
descriptor.anyMainResponseReceived = import_uicore_ts.YES;
|
|
298
|
+
}
|
|
299
|
+
} else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.last && descriptor.message.identifier == message.inResponseToIdentifier) {
|
|
300
|
+
if (!message.keepWaitingForResponses) {
|
|
301
|
+
descriptor.mainResponseReceived = import_uicore_ts.YES;
|
|
302
|
+
descriptor.anyMainResponseReceived = import_uicore_ts.YES;
|
|
303
|
+
sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
|
|
304
|
+
} else {
|
|
305
|
+
descriptor.completionFunction(message.messageData, sendResponseFunction);
|
|
306
|
+
}
|
|
307
|
+
} else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLast || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLastIfDifferent) {
|
|
308
|
+
if (!message.keepWaitingForResponses) {
|
|
309
|
+
if (!descriptor.anyMainResponseReceived) {
|
|
310
|
+
callCompletionFunction(descriptor, !message.keepWaitingForResponses);
|
|
311
|
+
}
|
|
312
|
+
if (descriptor.message.identifier == message.inResponseToIdentifier) {
|
|
313
|
+
descriptor.mainResponseReceived = import_uicore_ts.YES;
|
|
314
|
+
sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
|
|
315
|
+
}
|
|
316
|
+
descriptor.anyMainResponseReceived = import_uicore_ts.YES;
|
|
317
|
+
} else if (descriptor.message.identifier == message.inResponseToIdentifier && message.keepWaitingForResponses) {
|
|
318
|
+
descriptor.completionFunction(message.messageData, sendResponseFunction);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}.bind(this));
|
|
322
|
+
const allResponsesReceived = descriptorsForKey.allMatch(function(descriptorObject, index, array) {
|
|
323
|
+
return descriptorObject.mainResponseReceived;
|
|
324
|
+
});
|
|
325
|
+
descriptorsForKey.copy().forEach(function(descriptor, index, array) {
|
|
326
|
+
if ((descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.last || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLast) && allResponsesReceived && !message.keepWaitingForResponses) {
|
|
327
|
+
callCompletionFunction(descriptor, !message.keepWaitingForResponses);
|
|
328
|
+
descriptorsForKey.removeElement(descriptor);
|
|
329
|
+
} else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLastIfDifferent && allResponsesReceived && !message.keepWaitingForResponses) {
|
|
330
|
+
if (descriptor.responseDataHash != responseDataHash) {
|
|
331
|
+
callCompletionFunction(descriptor, !message.keepWaitingForResponses);
|
|
332
|
+
}
|
|
333
|
+
descriptorsForKey.removeElement(descriptor);
|
|
334
|
+
}
|
|
335
|
+
}.bind(this));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
340
|
+
0 && (module.exports = {
|
|
341
|
+
CBSocketCallbackHolder
|
|
342
|
+
});
|
|
343
|
+
//# sourceMappingURL=CBSocketCallbackHolder.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../scripts/CBSocketCallbackHolder.ts"],
|
|
4
|
+
"sourcesContent": ["import objectHash from \"object-hash\"\nimport { FIRST, IS, IS_NOT, nil, NO, UIObject, YES } from \"../../uicore-ts\"\nimport {\n CBSocketMessage,\n CBSocketMessageCompletionFunction,\n CBSocketMessageHandlerFunction, CBSocketMessageSendResponseFunction, CBSocketMultipleMessage,\n CBSocketMultipleMessagecompletionFunction, CBSocketMultipleMessageObject\n} from \"./CBDataInterfaces\"\nimport { CBSocketClient } from \"./CBSocketClient\"\n\n\n\n\n\ninterface CBSocketCallbackHolderMessageDescriptor {\n \n key: string;\n message: {\n identifier: string;\n inResponseToIdentifier?: string;\n keepWaitingForResponses?: boolean;\n }\n \n \n sentAtTime: number;\n \n //completionTriggered: boolean;\n \n messageDataHash: string;\n \n responseDataHash?: string;\n \n mainResponseReceived: boolean;\n \n anyMainResponseReceived: boolean;\n \n completionPolicy: string;\n completionFunction: CBSocketMessageCompletionFunction;\n \n}\n\n\ninterface CBSocketCallbackHolderStoredResponseObject {\n \n messageKey: string;\n messageData: any;\n messageDataHash: string;\n \n}\n\n\n\n\nexport class CBSocketCallbackHolder extends UIObject {\n \n messageDescriptors: {\n \n [x: string]: CBSocketCallbackHolderMessageDescriptor[]\n \n } = {}\n \n handlers: {\n [x: string]: CBSocketMessageHandlerFunction[]\n } = {}\n \n onetimeHandlers: {\n [x: string]: CBSocketMessageHandlerFunction[]\n } = {}\n \n keysForIdentifiers: {\n \n [x: string]: string\n \n } = {}\n \n \n isValid = YES\n _storeableResponseKeys: string[]\n _storedResponseHashesDictionary: {\n \n [x: string]: {\n \n hash: string,\n validityDate: number\n \n }\n \n }\n _verifiedResponseHashesDictionary: {\n \n [x: string]: boolean\n \n } = {}\n \n _socketClient: CBSocketClient\n \n \n \n \n \n constructor(socketClient: CBSocketClient, previousCallbackHolder?: CBSocketCallbackHolder) {\n \n super()\n \n \n this._socketClient = socketClient\n \n if (IS(previousCallbackHolder)) {\n \n this.handlers = previousCallbackHolder.handlers\n this._verifiedResponseHashesDictionary = previousCallbackHolder._verifiedResponseHashesDictionary\n \n }\n \n \n \n \n \n }\n \n \n \n \n \n triggerDisconnectHandlers() {\n \n this.messageDescriptors.forEach(function (descriptor: CBSocketCallbackHolderMessageDescriptor, key: string) {\n \n if (descriptor.mainResponseReceived) {\n \n descriptor.completionFunction(CBSocketClient.disconnectionMessage, nil)\n \n }\n \n })\n \n }\n \n \n \n \n \n registerHandler(key: string, handlerFunction: CBSocketMessageHandlerFunction) {\n \n \n if (!this.handlers[key]) {\n \n this.handlers[key] = []\n \n }\n \n this.handlers[key].push(handlerFunction)\n \n \n \n }\n \n registerOnetimeHandler(key: string, handlerFunction: CBSocketMessageHandlerFunction) {\n \n \n if (!this.onetimeHandlers[key]) {\n \n this.onetimeHandlers[key] = []\n \n }\n \n this.onetimeHandlers[key].push(handlerFunction)\n \n \n \n }\n \n \n \n \n \n get storedResponseHashesDictionary() {\n \n if (IS_NOT(this._storedResponseHashesDictionary)) {\n \n this._storedResponseHashesDictionary = JSON.parse(localStorage[\"CBSocketResponseHashesDictionary\"] || \"{}\")\n \n }\n \n return this._storedResponseHashesDictionary\n \n }\n \n storedResponseHashObjectForKey(requestKey: string, requestDataHash: string) {\n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash)\n \n const hashObject = this.storedResponseHashesDictionary[localStorageKey]\n \n const result = FIRST(hashObject, {} as any)\n \n \n \n return result\n \n }\n \n storedResponseForKey(requestKey: string, requestDataHash: string) {\n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash)\n \n const storedObject = JSON.parse(localStorage[localStorageKey] || \"{}\")\n \n return storedObject.responseMessageData\n \n }\n \n keyForRequestKeyAndRequestDataHash(requestKey: string, requestDataHash: string) {\n \n const result = \"_CBSCH_LS_key_\" + requestKey + \"_\" + requestDataHash\n \n return result\n \n }\n \n storeResponse(\n requestKey: string,\n requestDataHash: string,\n responseMessage: CBSocketMessage<any>,\n responseDataHash: string\n ) {\n \n \n if (!responseMessage.canBeStoredAsResponse ||\n (IS_NOT(responseMessage.messageData) && IS_NOT(responseMessage.messageDataHash))) {\n \n return\n \n }\n \n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash)\n \n \n var validityDate: number\n \n if (responseMessage.responseValidityDuration) {\n \n validityDate = Date.now() + responseMessage.responseValidityDuration\n \n }\n \n const storedResponseHashesDictionary = this.storedResponseHashesDictionary\n storedResponseHashesDictionary[localStorageKey] = {\n \n hash: responseDataHash,\n validityDate: validityDate\n \n }\n \n this.saveInLocalStorage(localStorageKey, {\n \n responseMessageData: responseMessage.messageData,\n responseHash: responseDataHash\n \n })\n \n \n this.saveStoredResponseHashesDictionary(storedResponseHashesDictionary)\n \n }\n \n \n \n \n \n private saveStoredResponseHashesDictionary(storedResponseHashesDictionary: { [x: string]: { hash: string; validityDate: number; }; }) {\n \n this.saveInLocalStorage(\"CBSocketResponseHashesDictionary\", storedResponseHashesDictionary)\n \n }\n \n saveInLocalStorage(key: string, object: any) {\n \n \n const stringToSave = JSON.stringify(object)\n \n if (stringToSave != localStorage[key]) {\n \n localStorage[key] = stringToSave\n \n }\n \n \n }\n \n \n \n \n \n socketShouldSendMessage(\n key: string,\n message: CBSocketMessage<any>,\n completionPolicy: string,\n completionFunction: CBSocketMessageCompletionFunction\n ) {\n \n \n \n var result = YES\n \n var triggerStoredResponseImmediately = NO\n \n \n const messageDataHash = objectHash(message.messageData || nil)\n \n const descriptorKey = \"socketMessageDescriptor_\" + key + messageDataHash\n \n this.messageDescriptors[descriptorKey] = (this.messageDescriptors[descriptorKey] || [])\n \n \n const hashObject = this.storedResponseHashObjectForKey(key, messageDataHash)\n message.storedResponseHash = hashObject.hash\n \n \n \n if (completionPolicy == CBSocketClient.completionPolicy.first) {\n \n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n const matchingDescriptor = descriptorsForKey.find(function (descriptor, index, array) {\n return (descriptor.messageDataHash == messageDataHash)\n })\n \n if (matchingDescriptor) {\n \n result = NO\n \n }\n \n }\n \n if (completionPolicy == CBSocketClient.completionPolicy.storedOrFirst) {\n \n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n const matchingDescriptor = descriptorsForKey.find(function (descriptor, index, array) {\n return (descriptor.messageDataHash == messageDataHash)\n })\n \n const storedResponse = IS(message.storedResponseHash)\n \n if (matchingDescriptor ||\n (storedResponse && this._verifiedResponseHashesDictionary[message.storedResponseHash])) {\n \n result = NO\n \n triggerStoredResponseImmediately = YES\n \n }\n \n }\n \n if (completionPolicy == CBSocketClient.completionPolicy.firstOnly) {\n \n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n const matchingDescriptor = descriptorsForKey.find(function (descriptor, index, array) {\n return (descriptor.messageDataHash == messageDataHash)\n })\n \n if (matchingDescriptor) {\n \n return NO\n \n }\n \n }\n \n \n if (hashObject && hashObject.hash && hashObject.validityDate && message.storedResponseHash &&\n this._verifiedResponseHashesDictionary[message.storedResponseHash] && hashObject.validityDate >\n Date.now()) {\n \n result = NO\n \n triggerStoredResponseImmediately = YES\n \n }\n \n \n if (IS(completionFunction)) {\n \n this.messageDescriptors[descriptorKey].push({\n \n key: key,\n message: {\n \n identifier: message.identifier,\n inResponseToIdentifier: message.inResponseToIdentifier,\n keepWaitingForResponses: message.keepWaitingForResponses\n \n },\n \n sentAtTime: Date.now(),\n \n //completionTriggered: NO,\n \n \n messageDataHash: messageDataHash,\n \n mainResponseReceived: NO,\n anyMainResponseReceived: NO,\n \n \n completionPolicy: completionPolicy,\n completionFunction: completionFunction\n \n })\n \n this.keysForIdentifiers[message.identifier] = descriptorKey\n \n }\n \n \n if (triggerStoredResponseImmediately) {\n \n this.socketDidReceiveMessageForKey(\n CBSocketClient.responseMessageKey,\n {\n \n identifier: nil,\n messageData: nil,\n \n inResponseToIdentifier: message.identifier,\n \n useStoredResponse: YES\n \n },\n nil\n )\n \n }\n \n \n return result\n \n \n }\n \n \n \n \n \n static defaultMultipleMessagecompletionFunction(responseMessages: any[], callcompletionFunctions: () => void) {\n callcompletionFunctions()\n }\n \n \n socketWillSendMultipleMessage(\n messageToSend: CBSocketMultipleMessage,\n completionFunction: CBSocketMultipleMessagecompletionFunction = CBSocketCallbackHolder.defaultMultipleMessagecompletionFunction\n ) {\n \n \n \n const key = CBSocketClient.multipleMessageKey\n \n \n const messageDataHash = objectHash(messageToSend.messageData || nil)\n \n const descriptorKey = \"socketMessageDescriptor_\" + key + messageDataHash\n \n this.messageDescriptors[descriptorKey] = (this.messageDescriptors[descriptorKey] || [])\n \n \n messageToSend.storedResponseHash = this.storedResponseHashObjectForKey(key, messageDataHash).hash\n \n \n \n \n \n this.messageDescriptors[descriptorKey].push({\n \n key: key,\n message: {\n \n identifier: messageToSend.identifier,\n inResponseToIdentifier: messageToSend.inResponseToIdentifier,\n keepWaitingForResponses: messageToSend.keepWaitingForResponses\n \n },\n \n sentAtTime: Date.now(),\n \n //completionTriggered: NO,\n \n \n messageDataHash: messageDataHash,\n \n mainResponseReceived: NO,\n anyMainResponseReceived: NO,\n \n \n completionPolicy: CBSocketClient.completionPolicy.directOnly,\n completionFunction: function (\n this: CBSocketCallbackHolder,\n responseMessage: CBSocketMultipleMessageObject[],\n respondWithMessage\n ) {\n \n completionFunction(\n responseMessage.map(function (messageObject, index, array) {\n \n return messageObject.message.messageData\n \n }),\n function (this: CBSocketCallbackHolder) {\n \n //console.log(\"Received multiple message response with length of \" + responseMessage.length + \".\");\n \n // Call all completion functions\n responseMessage.forEach(function (\n this: CBSocketCallbackHolder,\n messageObject: CBSocketMultipleMessageObject,\n index: number,\n array: CBSocketMultipleMessageObject[]\n ) {\n \n this._socketClient.didReceiveMessageForKey(messageObject.key, messageObject.message)\n \n }.bind(this))\n \n }.bind(this)\n )\n \n }.bind(this)\n \n })\n \n this.keysForIdentifiers[messageToSend.identifier] = descriptorKey\n \n \n }\n \n \n \n \n \n socketDidReceiveMessageForKey(\n key: string,\n message: CBSocketMessage<any>,\n sendResponseFunction: CBSocketMessageSendResponseFunction\n ) {\n \n \n if (!this.isValid) {\n \n return\n \n }\n \n \n // Call static handlers\n if (this.handlers[key]) {\n \n this.handlers[key].forEach(function (\n this: CBSocketCallbackHolder,\n handler: CBSocketMessageHandlerFunction,\n index,\n array\n ) {\n \n handler(message.messageData, sendResponseFunction)\n \n }.bind(this))\n \n }\n \n if (this.onetimeHandlers[key]) {\n \n this.onetimeHandlers[key].forEach(function (\n this: CBSocketCallbackHolder,\n handler: CBSocketMessageHandlerFunction,\n index,\n array\n ) {\n \n handler(message.messageData, sendResponseFunction)\n \n }.bind(this))\n \n delete this.onetimeHandlers[key]\n \n }\n \n \n \n // Temporary response handlers are evaluated here\n if (message.inResponseToIdentifier &&\n (CBSocketClient.responseMessageKey == key || CBSocketClient.multipleMessageKey == key)) {\n \n // Find descriptors for the key of the message that is being responded to\n const descriptorKey = this.keysForIdentifiers[message.inResponseToIdentifier]\n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n // Find response data hash to check for differences\n const responseDataHash = message.messageDataHash\n \n // Remove identifier from dictionary\n if (!message.keepWaitingForResponses) {\n \n delete this.keysForIdentifiers[message.inResponseToIdentifier]\n \n delete this.messageDescriptors[descriptorKey]\n \n }\n \n \n // Function to call completion function\n const callCompletionFunction = (descriptor, storedResponseCondition = NO) => {\n \n var messageData = message.messageData\n \n if (message.useStoredResponse && storedResponseCondition) {\n \n messageData = this.storedResponseForKey(descriptor.key, descriptor.messageDataHash)\n \n const responseHash = this.storedResponseHashObjectForKey(\n descriptor.key,\n descriptor.messageDataHash\n ).hash\n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(\n descriptor.key,\n descriptor.messageDataHash\n )\n \n if (message.responseValidityDuration && this.storedResponseHashesDictionary[localStorageKey]) {\n \n this.storedResponseHashesDictionary[localStorageKey].validityDate = Date.now() +\n message.responseValidityDuration\n \n this.saveStoredResponseHashesDictionary(this.storedResponseHashesDictionary)\n \n }\n \n this._verifiedResponseHashesDictionary[responseHash] = YES\n \n console.log(\"Using stored response.\")\n \n }\n \n // Call completionFunction and set response data hash\n descriptor.completionFunction(messageData, sendResponseFunction)\n descriptor.responseDataHash = responseDataHash\n \n }\n \n \n descriptorsForKey.copy().forEach(function (\n this: CBSocketCallbackHolder,\n descriptor: CBSocketCallbackHolderMessageDescriptor,\n index: number,\n array: CBSocketCallbackHolderMessageDescriptor[]\n ) {\n \n \n if ((descriptor.completionPolicy == CBSocketClient.completionPolicy.directOnly &&\n descriptor.message.identifier == message.inResponseToIdentifier) || descriptor.completionPolicy ==\n CBSocketClient.completionPolicy.first || descriptor.completionPolicy ==\n CBSocketClient.completionPolicy.firstOnly || descriptor.completionPolicy ==\n CBSocketClient.completionPolicy.storedOrFirst) {\n \n // Calling completion function and removing descriptor\n \n if (!message.keepWaitingForResponses) {\n \n this.storeResponse(descriptor.key, descriptor.messageDataHash, message, responseDataHash)\n \n descriptorsForKey.removeElement(descriptor)\n \n sendResponseFunction.respondingToMainResponse = YES\n \n }\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.all) {\n \n // Calling completion function\n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n // Marking descriptor as having been responded to\n if (!message.keepWaitingForResponses) {\n \n if (message.inResponseToIdentifier == descriptor.message.identifier) {\n \n sendResponseFunction.respondingToMainResponse = YES\n descriptor.mainResponseReceived = YES\n descriptorsForKey.removeElement(descriptor)\n \n }\n \n descriptor.anyMainResponseReceived = YES\n \n }\n \n \n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.allDifferent) {\n \n // Calling completionFunction if messageData is different from previous\n if (descriptor.responseDataHash != responseDataHash) {\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n \n // Marking descriptor as having been responded to\n if (!message.keepWaitingForResponses) {\n \n if (message.inResponseToIdentifier == descriptor.message.identifier) {\n \n sendResponseFunction.respondingToMainResponse = YES\n descriptor.mainResponseReceived = YES\n descriptorsForKey.removeElement(descriptor)\n \n }\n \n descriptor.anyMainResponseReceived = YES\n \n }\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.last &&\n descriptor.message.identifier == message.inResponseToIdentifier) {\n \n if (!message.keepWaitingForResponses) {\n \n // Marking descriptor as having been responded to\n descriptor.mainResponseReceived = YES\n descriptor.anyMainResponseReceived = YES\n \n sendResponseFunction.respondingToMainResponse = YES\n \n }\n else {\n \n descriptor.completionFunction(message.messageData, sendResponseFunction)\n \n }\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLast ||\n descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLastIfDifferent) {\n \n if (!message.keepWaitingForResponses) {\n \n // Only calling completionFunction once as a first response call\n if (!descriptor.anyMainResponseReceived) {\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n \n // Marking descriptor as having been responded to\n if (descriptor.message.identifier == message.inResponseToIdentifier) {\n \n descriptor.mainResponseReceived = YES\n sendResponseFunction.respondingToMainResponse = YES\n \n }\n \n descriptor.anyMainResponseReceived = YES\n \n }\n else if (descriptor.message.identifier == message.inResponseToIdentifier &&\n message.keepWaitingForResponses) {\n \n descriptor.completionFunction(message.messageData, sendResponseFunction)\n \n }\n \n }\n \n }.bind(this))\n \n \n \n \n \n // Last message completion policies\n \n const allResponsesReceived = descriptorsForKey.allMatch(function (descriptorObject, index, array) {\n return descriptorObject.mainResponseReceived\n })\n \n descriptorsForKey.copy().forEach(function (\n this: CBSocketCallbackHolder,\n descriptor: CBSocketCallbackHolderMessageDescriptor,\n index: number,\n array: CBSocketCallbackHolderMessageDescriptor[]\n ) {\n \n if ((descriptor.completionPolicy == CBSocketClient.completionPolicy.last ||\n descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLast) &&\n allResponsesReceived && !message.keepWaitingForResponses) {\n \n // Calling completionFunction\n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n // Cleaning up\n descriptorsForKey.removeElement(descriptor)\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLastIfDifferent &&\n allResponsesReceived && !message.keepWaitingForResponses) {\n \n // Calling completionFunction if needed\n if (descriptor.responseDataHash != responseDataHash) {\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n \n // Cleaning up\n descriptorsForKey.removeElement(descriptor)\n \n }\n \n }.bind(this))\n \n \n }\n \n \n \n \n \n }\n \n \n \n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["objectHash"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Socket } from "socket.io-client";
|
|
2
|
+
import { UIObject } from "../../uicore-ts";
|
|
3
|
+
import { CBCore } from "./CBCore";
|
|
4
|
+
import { CBSocketMessage, CBSocketMessageCompletionFunction, CBSocketMessageHandlerFunction, CBSocketMessageSendResponseFunction, CBSocketMultipleMessagecompletionFunction, SocketClientInterface } from "./CBDataInterfaces";
|
|
5
|
+
import { CBSocketCallbackHolder } from "./CBSocketCallbackHolder";
|
|
6
|
+
declare interface CBSocketClientMessageToBeSent {
|
|
7
|
+
key: string;
|
|
8
|
+
message: any;
|
|
9
|
+
inResponseToMessage: CBSocketMessage<any>;
|
|
10
|
+
keepWaitingForResponses: boolean;
|
|
11
|
+
isBoundToUserWithID: string;
|
|
12
|
+
completionPolicy: string;
|
|
13
|
+
didSendFunction?: () => void;
|
|
14
|
+
completion: CBSocketMessageCompletionFunction;
|
|
15
|
+
}
|
|
16
|
+
declare interface CBSocketClientErrorMessage {
|
|
17
|
+
_isCBSocketErrorMessage: boolean;
|
|
18
|
+
messageData: any;
|
|
19
|
+
}
|
|
20
|
+
export declare function IS_SOCKET_ERROR(object: any): object is CBSocketClientErrorMessage;
|
|
21
|
+
export declare function IS_NOT_SOCKET_ERROR(object: any): boolean;
|
|
22
|
+
export declare class CBSocketClient extends UIObject {
|
|
23
|
+
_socket: Socket;
|
|
24
|
+
_isConnectionEstablished: boolean;
|
|
25
|
+
_collectMessagesToSendLater: boolean;
|
|
26
|
+
_messagesToBeSent: CBSocketClientMessageToBeSent[];
|
|
27
|
+
static _sharedInstance: CBSocketClient;
|
|
28
|
+
_core: CBCore;
|
|
29
|
+
_subscribedKeys: {
|
|
30
|
+
[x: string]: boolean;
|
|
31
|
+
};
|
|
32
|
+
_callbackHolder: CBSocketCallbackHolder;
|
|
33
|
+
static responseMessageKey: string;
|
|
34
|
+
static multipleMessageKey: string;
|
|
35
|
+
static disconnectionMessage: CBSocketClientErrorMessage;
|
|
36
|
+
constructor(core: CBCore);
|
|
37
|
+
get socket(): Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap>;
|
|
38
|
+
cancelUnsentMessages(messagesToCancel: CBSocketClientMessageToBeSent[]): void;
|
|
39
|
+
sendUnsentMessages(receiveResponsesTogether?: boolean, completion?: CBSocketMultipleMessagecompletionFunction): void;
|
|
40
|
+
static completionPolicy: {
|
|
41
|
+
all: string;
|
|
42
|
+
allDifferent: string;
|
|
43
|
+
first: string;
|
|
44
|
+
last: string;
|
|
45
|
+
firstAndLast: string;
|
|
46
|
+
firstAndLastIfDifferent: string;
|
|
47
|
+
directOnly: string;
|
|
48
|
+
firstOnly: string;
|
|
49
|
+
storedOrFirst: string;
|
|
50
|
+
};
|
|
51
|
+
sendUserBoundMessageForKeyWithPolicy(key: keyof SocketClientInterface, message: any, completionPolicy: keyof typeof CBSocketClient.completionPolicy, completion?: CBSocketMessageCompletionFunction): void;
|
|
52
|
+
sendUserBoundMessageForKey(key: keyof SocketClientInterface, message: any, completion?: CBSocketMessageCompletionFunction): void;
|
|
53
|
+
sendMessageForKeyWithPolicy(key: keyof SocketClientInterface, message: any, completionPolicy: keyof typeof CBSocketClient.completionPolicy, completion?: CBSocketMessageCompletionFunction): void;
|
|
54
|
+
sendMessageForKey(key: keyof SocketClientInterface, message: any, completion?: CBSocketMessageCompletionFunction): void;
|
|
55
|
+
resultForMessageForKey(key: keyof SocketClientInterface, message: any, completionPolicy?: keyof typeof CBSocketClient.completionPolicy, isUserBound?: boolean): Promise<{
|
|
56
|
+
responseMessage: any;
|
|
57
|
+
result: any;
|
|
58
|
+
errorResult: any;
|
|
59
|
+
respondWithMessage: CBSocketMessageSendResponseFunction;
|
|
60
|
+
}>;
|
|
61
|
+
_sendMessageForKey(key: string, message: any, inResponseToMessage?: CBSocketMessage<any>, keepMessageConnectionOpen?: boolean, completionPolicy?: string, isUserBound?: boolean, didSendFunction?: () => void, completion?: CBSocketMessageCompletionFunction): CBSocketClientMessageToBeSent;
|
|
62
|
+
sendMessagesAsGroup<FunctionReturnType extends object>(functionToCall: () => FunctionReturnType): FunctionReturnType;
|
|
63
|
+
sendAndReceiveMessagesAsGroup<FunctionReturnType extends object>(functionToCall: () => FunctionReturnType, completion?: CBSocketMultipleMessagecompletionFunction): FunctionReturnType;
|
|
64
|
+
didReceiveMessageForKey(key: string, message: CBSocketMessage<any>): void;
|
|
65
|
+
addTargetForMessagesForKeys(keys: string[], handlerFunction: CBSocketMessageHandlerFunction): void;
|
|
66
|
+
addTargetForMessagesForKey(key: string, handlerFunction: CBSocketMessageHandlerFunction): void;
|
|
67
|
+
addTargetForOneMessageForKey(key: string, handlerFunction: CBSocketMessageHandlerFunction): void;
|
|
68
|
+
}
|
|
69
|
+
export declare const SocketClient: SocketClientInterface;
|
|
70
|
+
export {};
|