stagelinq 3.2.0 → 3.3.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/README.md +5 -1
- package/dist/network/StageLinqDevices.d.ts +11 -0
- package/dist/network/StageLinqDevices.js +66 -10
- package/dist/network/StageLinqDevices.js.map +1 -1
- package/dist/services/FileTransfer.d.ts +41 -0
- package/dist/services/FileTransfer.js +134 -44
- package/dist/services/FileTransfer.js.map +1 -1
- package/dist/services/Service.d.ts +13 -0
- package/dist/services/Service.js +65 -53
- package/dist/services/Service.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -225,9 +225,13 @@ This library incorporates code and ideas from other StageLinq implementations:
|
|
|
225
225
|
## Related Packages
|
|
226
226
|
|
|
227
227
|
- [alphatheta-connect](https://github.com/chrisle/alphatheta-connect) — Pioneer Pro DJ Link integration
|
|
228
|
+
- [djay-connect](https://github.com/chrisle/djay-connect) — djay Pro track change events from NowPlaying.txt
|
|
228
229
|
- [metadata-connect](https://github.com/chrisle/metadata-connect) — Audio metadata extraction with partial file reads
|
|
230
|
+
- [onelibrary-connect](https://github.com/chrisle/onelibrary-connect) — Rekordbox OneLibrary (exportLibrary.db) database access
|
|
229
231
|
- [rekordbox-connect](https://github.com/chrisle/rekordbox-connect) — Rekordbox database integration
|
|
230
|
-
- [serato-connect](https://github.com/chrisle/serato-connect) — Serato DJ
|
|
232
|
+
- [serato-connect](https://github.com/chrisle/serato-connect) — Serato DJ history, cues, beatgrids, crates, and library
|
|
233
|
+
- [traktor-connect](https://github.com/chrisle/traktor-connect) — Traktor Pro track metadata via OGG Vorbis broadcast
|
|
234
|
+
- [virtualdj-connect](https://github.com/chrisle/virtualdj-connect) — VirtualDJ track change events from M3U history
|
|
231
235
|
|
|
232
236
|
These libraries power [Now Playing](https://nowplayingapp.com) — a real-time track display app for DJs and streamers.
|
|
233
237
|
|
|
@@ -21,6 +21,10 @@ export declare class StageLinqDevices extends EventEmitter {
|
|
|
21
21
|
private _databases;
|
|
22
22
|
private devices;
|
|
23
23
|
private discoveryStatus;
|
|
24
|
+
/** When each FAILED device last failed, for the retry cooldown. */
|
|
25
|
+
private failedAt;
|
|
26
|
+
/** Ignored mixers we have already warned about, so the log fires once each. */
|
|
27
|
+
private loggedIgnoredMixers;
|
|
24
28
|
private options;
|
|
25
29
|
private logger;
|
|
26
30
|
private deviceWatchTimeout;
|
|
@@ -96,6 +100,13 @@ export declare class StageLinqDevices extends EventEmitter {
|
|
|
96
100
|
private deviceId;
|
|
97
101
|
private isConnecting;
|
|
98
102
|
private isConnected;
|
|
103
|
+
/**
|
|
104
|
+
* True while a device is in its post-failure cooldown.
|
|
105
|
+
*
|
|
106
|
+
* FAILED used to be terminal, which meant one unreachable moment at startup
|
|
107
|
+
* removed a device for the whole session. Once the cooldown expires we drop
|
|
108
|
+
* the status so the next discovery message reconnects it.
|
|
109
|
+
*/
|
|
99
110
|
private isFailed;
|
|
100
111
|
private isIgnored;
|
|
101
112
|
private isDeviceSeen;
|
|
@@ -21,6 +21,14 @@ var ConnectionStatus;
|
|
|
21
21
|
const WAIT_FOR_DEVICES_INITIAL_MS = 3000;
|
|
22
22
|
// Max poll interval after backoff when no devices are found
|
|
23
23
|
const WAIT_FOR_DEVICES_MAX_MS = 30000;
|
|
24
|
+
// Base linear backoff between device connection attempts (attempt N waits
|
|
25
|
+
// N * this). A device that is still booting needs real time between tries.
|
|
26
|
+
const RETRY_BACKOFF_MS = 500;
|
|
27
|
+
// How long a device stays in FAILED before a fresh discovery message is
|
|
28
|
+
// allowed to retry it. Without this a device that is briefly unreachable at
|
|
29
|
+
// startup is ignored for the entire session, so its channel faders never
|
|
30
|
+
// reach the mix processor and the overlay stops respecting them (NP3-310).
|
|
31
|
+
const RETRY_AFTER_FAILURE_MS = 10000;
|
|
24
32
|
//////////////////////////////////////////////////////////////////////////////
|
|
25
33
|
/**
|
|
26
34
|
* Handle connecting and disconnecting from discovered devices on the
|
|
@@ -31,6 +39,10 @@ class StageLinqDevices extends events_1.EventEmitter {
|
|
|
31
39
|
super();
|
|
32
40
|
this.devices = new Map();
|
|
33
41
|
this.discoveryStatus = new Map();
|
|
42
|
+
/** When each FAILED device last failed, for the retry cooldown. */
|
|
43
|
+
this.failedAt = new Map();
|
|
44
|
+
/** Ignored mixers we have already warned about, so the log fires once each. */
|
|
45
|
+
this.loggedIgnoredMixers = new Set();
|
|
34
46
|
this.deviceWatchTimeout = null;
|
|
35
47
|
this.deviceWatchInterval = WAIT_FOR_DEVICES_INITIAL_MS;
|
|
36
48
|
this.stateMapCallback = [];
|
|
@@ -54,7 +66,13 @@ class StageLinqDevices extends events_1.EventEmitter {
|
|
|
54
66
|
|| this.isFailed(connectionInfo)
|
|
55
67
|
|| this.isIgnored(connectionInfo))
|
|
56
68
|
return;
|
|
57
|
-
|
|
69
|
+
// Deliberately not awaited — discovery must stay responsive — but the
|
|
70
|
+
// rejection has to be handled here or a failed connection surfaces as an
|
|
71
|
+
// unhandled promise rejection instead of a logged, recoverable failure.
|
|
72
|
+
void this.connectToDevice(connectionInfo).catch((e) => {
|
|
73
|
+
this.logger.warn(`Giving up on ${this.deviceId(connectionInfo)} for now ` +
|
|
74
|
+
`(retry in ${RETRY_AFTER_FAILURE_MS / 1000}s): ${e}`);
|
|
75
|
+
});
|
|
58
76
|
}
|
|
59
77
|
/**
|
|
60
78
|
* Disconnect from all connected devices
|
|
@@ -170,12 +188,13 @@ class StageLinqDevices extends events_1.EventEmitter {
|
|
|
170
188
|
async connectToDevice(connectionInfo) {
|
|
171
189
|
// Mark this device as connecting.
|
|
172
190
|
this.discoveryStatus.set(this.deviceId(connectionInfo), ConnectionStatus.CONNECTING);
|
|
191
|
+
const maxRetries = this.options.maxRetries ?? 3;
|
|
173
192
|
let attempt = 1;
|
|
174
|
-
while (attempt
|
|
193
|
+
while (attempt <= maxRetries) {
|
|
175
194
|
try {
|
|
176
195
|
// Connect to the device.
|
|
177
196
|
this.logger.info(`Connecting to ${this.deviceId(connectionInfo)}. ` +
|
|
178
|
-
`Attempt ${attempt}/${
|
|
197
|
+
`Attempt ${attempt}/${maxRetries}`);
|
|
179
198
|
const networkDevice = new _1.NetworkDevice(connectionInfo, this.logger);
|
|
180
199
|
await networkDevice.connect();
|
|
181
200
|
// Setup file transfer service
|
|
@@ -197,15 +216,22 @@ class StageLinqDevices extends events_1.EventEmitter {
|
|
|
197
216
|
return; // Don't forget to return!
|
|
198
217
|
}
|
|
199
218
|
catch (e) {
|
|
200
|
-
// Failed connection. Sleep then retry.
|
|
219
|
+
// Failed connection. Sleep then retry. The await matters: without it
|
|
220
|
+
// the backoff is a no-op and every attempt fires in the same tick, so
|
|
221
|
+
// a device that just needs a moment to settle burns all its retries in
|
|
222
|
+
// microseconds and is marked FAILED.
|
|
201
223
|
this.logger.warn(`Could not connect to ${this.deviceId(connectionInfo)} ` +
|
|
202
|
-
`(${attempt}/${
|
|
224
|
+
`(${attempt}/${maxRetries}): ${e}`);
|
|
203
225
|
attempt += 1;
|
|
204
|
-
(
|
|
226
|
+
if (attempt <= maxRetries) {
|
|
227
|
+
await (0, utils_1.sleep)(RETRY_BACKOFF_MS * (attempt - 1));
|
|
228
|
+
}
|
|
205
229
|
}
|
|
206
230
|
}
|
|
207
|
-
//
|
|
231
|
+
// Every attempt failed. Mark it and stamp the time so the cooldown in
|
|
232
|
+
// isFailed() can let a later discovery message retry the device.
|
|
208
233
|
this.discoveryStatus.set(this.deviceId(connectionInfo), ConnectionStatus.FAILED);
|
|
234
|
+
this.failedAt.set(this.deviceId(connectionInfo), Date.now());
|
|
209
235
|
throw new Error(`Could not connect to ${this.deviceId(connectionInfo)}`);
|
|
210
236
|
}
|
|
211
237
|
async setupFileTransferService(networkDevice, connectionInfo) {
|
|
@@ -293,16 +319,46 @@ class StageLinqDevices extends events_1.EventEmitter {
|
|
|
293
319
|
return this.discoveryStatus.get(this.deviceId(device))
|
|
294
320
|
=== ConnectionStatus.CONNECTED;
|
|
295
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* True while a device is in its post-failure cooldown.
|
|
324
|
+
*
|
|
325
|
+
* FAILED used to be terminal, which meant one unreachable moment at startup
|
|
326
|
+
* removed a device for the whole session. Once the cooldown expires we drop
|
|
327
|
+
* the status so the next discovery message reconnects it.
|
|
328
|
+
*/
|
|
296
329
|
isFailed(device) {
|
|
297
|
-
|
|
298
|
-
|
|
330
|
+
const id = this.deviceId(device);
|
|
331
|
+
if (this.discoveryStatus.get(id) !== ConnectionStatus.FAILED)
|
|
332
|
+
return false;
|
|
333
|
+
const failedAt = this.failedAt.get(id) ?? 0;
|
|
334
|
+
if (Date.now() - failedAt < RETRY_AFTER_FAILURE_MS)
|
|
335
|
+
return true;
|
|
336
|
+
this.logger.info(`Retrying previously failed device ${id}`);
|
|
337
|
+
this.discoveryStatus.delete(id);
|
|
338
|
+
this.failedAt.delete(id);
|
|
339
|
+
return false;
|
|
299
340
|
}
|
|
300
341
|
isIgnored(device) {
|
|
342
|
+
// X1800/X1850 mixers (software.name JM08) are ignored. On an SC-players +
|
|
343
|
+
// X1850 rig this mixer is the ONLY device carrying channel faders, so
|
|
344
|
+
// ignoring it may be why such a rig's fader is not respected in the overlay
|
|
345
|
+
// (NP3-333 — an unverified suspicion; needs Denon hardware to confirm).
|
|
346
|
+
// Behaviour is unchanged for now, but we surface each ignored mixer once so
|
|
347
|
+
// a real user of this hardware shows up in telemetry instead of silently
|
|
348
|
+
// degrading. Do NOT remove the ignore without checking why JM08 was added.
|
|
349
|
+
if (device.software.name === 'JM08') {
|
|
350
|
+
const id = this.deviceId(device);
|
|
351
|
+
if (!this.loggedIgnoredMixers.has(id)) {
|
|
352
|
+
this.loggedIgnoredMixers.add(id);
|
|
353
|
+
this.logger.warn(`Ignoring StageLinQ mixer ${id} (X1800/X1850). If this rig relies on ` +
|
|
354
|
+
`the mixer for channel faders, the overlay may not respect them (NP3-333).`);
|
|
355
|
+
}
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
301
358
|
return (device.source === this.options.actingAs?.source
|
|
302
359
|
|| device.software.name === 'OfflineAnalyzer'
|
|
303
360
|
|| /^SoundSwitch/i.test(device.software.name)
|
|
304
361
|
|| /^Resolume/i.test(device.software.name)
|
|
305
|
-
|| device.software.name === 'JM08' // Ignore X1800/X1850 mixers
|
|
306
362
|
|| device.software.name === 'SSS0' // Ignore SoundSwitchEmbedded on players
|
|
307
363
|
);
|
|
308
364
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageLinqDevices.js","sourceRoot":"","sources":["../../network/StageLinqDevices.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StageLinqDevices.js","sourceRoot":"","sources":["../../network/StageLinqDevices.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { ReadContext } from '../utils/ReadContext';
|
|
2
2
|
import { Service } from './Service';
|
|
3
3
|
import type { ServiceMessage, Source } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Chunk size assumed before the device tells us otherwise.
|
|
6
|
+
*
|
|
7
|
+
* The firmware picks the real chunk size, not us. Engine OS 5.x uses something
|
|
8
|
+
* larger than this, so treat it strictly as a starting guess: it is only ever
|
|
9
|
+
* used for a read that starts at byte 0 (chunk 0 is chunk 0 at any chunk size),
|
|
10
|
+
* and is replaced by the measured value as soon as a chunk arrives.
|
|
11
|
+
*/
|
|
4
12
|
export declare const CHUNK_SIZE = 4096;
|
|
5
13
|
type FileTransferData = any;
|
|
6
14
|
interface FileTransferProgress {
|
|
@@ -15,7 +23,22 @@ export declare interface FileTransfer {
|
|
|
15
23
|
export declare class FileTransfer extends Service<FileTransferData> {
|
|
16
24
|
private receivedFile;
|
|
17
25
|
private _available;
|
|
26
|
+
/**
|
|
27
|
+
* The device's real chunk size, measured from the wire. Null until a chunk
|
|
28
|
+
* that is provably not a file's final chunk has been seen. The firmware
|
|
29
|
+
* cannot change this mid-connection, so it is cached for the life of the
|
|
30
|
+
* service.
|
|
31
|
+
*/
|
|
32
|
+
private deviceChunkSize;
|
|
18
33
|
init(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Record the device's chunk size from an observed chunk.
|
|
36
|
+
*
|
|
37
|
+
* Only a chunk that is *not* the last chunk of its file carries the true
|
|
38
|
+
* size — a final chunk is short, and a file smaller than one chunk arrives
|
|
39
|
+
* whole. Those cases teach us nothing and are ignored rather than guessed at.
|
|
40
|
+
*/
|
|
41
|
+
private noteChunkSize;
|
|
19
42
|
protected parseData(p_ctx: ReadContext): ServiceMessage<FileTransferData>;
|
|
20
43
|
protected messageHandler(p_data: ServiceMessage<FileTransferData>): void;
|
|
21
44
|
getFile(p_location: string): Promise<Uint8Array>;
|
|
@@ -34,6 +57,24 @@ export declare class FileTransfer extends Service<FileTransferData> {
|
|
|
34
57
|
* @returns Buffer containing the requested bytes
|
|
35
58
|
*/
|
|
36
59
|
getFileRange(p_location: string, offset: number, length: number): Promise<Buffer>;
|
|
60
|
+
/**
|
|
61
|
+
* Measure the device's chunk size with a self-contained transfer that pulls
|
|
62
|
+
* only chunk 0 of `p_location`.
|
|
63
|
+
*
|
|
64
|
+
* Leaves `deviceChunkSize` unset when the file is smaller than a single chunk,
|
|
65
|
+
* since that chunk says nothing about the device's size. Callers must already
|
|
66
|
+
* hold the availability lock.
|
|
67
|
+
*/
|
|
68
|
+
private learnChunkSize;
|
|
69
|
+
/**
|
|
70
|
+
* Request chunks `p_startChunk`..`p_endChunk` and concatenate them in arrival
|
|
71
|
+
* order.
|
|
72
|
+
*
|
|
73
|
+
* Completion is decided on bytes, not on a chunk count: a count would hang
|
|
74
|
+
* whenever the requested range was computed with a smaller chunk size than
|
|
75
|
+
* the device actually uses, because fewer chunks then cover the same bytes.
|
|
76
|
+
*/
|
|
77
|
+
private receiveChunks;
|
|
37
78
|
private requestStat;
|
|
38
79
|
private requestSources;
|
|
39
80
|
private requestFileTransferId;
|
|
@@ -7,6 +7,14 @@ const sleep_1 = require("../utils/sleep");
|
|
|
7
7
|
const assert_1 = require("assert");
|
|
8
8
|
const WriteContext_1 = require("../utils/WriteContext");
|
|
9
9
|
const MAGIC_MARKER = 'fltx';
|
|
10
|
+
/**
|
|
11
|
+
* Chunk size assumed before the device tells us otherwise.
|
|
12
|
+
*
|
|
13
|
+
* The firmware picks the real chunk size, not us. Engine OS 5.x uses something
|
|
14
|
+
* larger than this, so treat it strictly as a starting guess: it is only ever
|
|
15
|
+
* used for a read that starts at byte 0 (chunk 0 is chunk 0 at any chunk size),
|
|
16
|
+
* and is replaced by the measured value as soon as a chunk arrives.
|
|
17
|
+
*/
|
|
10
18
|
exports.CHUNK_SIZE = 4096;
|
|
11
19
|
var MessageId;
|
|
12
20
|
(function (MessageId) {
|
|
@@ -24,8 +32,30 @@ class FileTransfer extends Service_1.Service {
|
|
|
24
32
|
super(...arguments);
|
|
25
33
|
this.receivedFile = null;
|
|
26
34
|
this._available = true;
|
|
35
|
+
/**
|
|
36
|
+
* The device's real chunk size, measured from the wire. Null until a chunk
|
|
37
|
+
* that is provably not a file's final chunk has been seen. The firmware
|
|
38
|
+
* cannot change this mid-connection, so it is cached for the life of the
|
|
39
|
+
* service.
|
|
40
|
+
*/
|
|
41
|
+
this.deviceChunkSize = null;
|
|
27
42
|
}
|
|
28
43
|
async init() { }
|
|
44
|
+
/**
|
|
45
|
+
* Record the device's chunk size from an observed chunk.
|
|
46
|
+
*
|
|
47
|
+
* Only a chunk that is *not* the last chunk of its file carries the true
|
|
48
|
+
* size — a final chunk is short, and a file smaller than one chunk arrives
|
|
49
|
+
* whole. Those cases teach us nothing and are ignored rather than guessed at.
|
|
50
|
+
*/
|
|
51
|
+
noteChunkSize(byteStart, chunkLength, fileSize) {
|
|
52
|
+
if (byteStart + chunkLength >= fileSize)
|
|
53
|
+
return;
|
|
54
|
+
if (this.deviceChunkSize === chunkLength)
|
|
55
|
+
return;
|
|
56
|
+
this.logger.debug(`Device chunk size measured as ${chunkLength} bytes`);
|
|
57
|
+
this.deviceChunkSize = chunkLength;
|
|
58
|
+
}
|
|
29
59
|
parseData(p_ctx) {
|
|
30
60
|
const check = p_ctx.getString(4);
|
|
31
61
|
(0, assert_1.strict)(check === MAGIC_MARKER);
|
|
@@ -102,8 +132,10 @@ class FileTransfer extends Service_1.Service {
|
|
|
102
132
|
(0, assert_1.strict)(p_ctx.readUInt32() === 0x0);
|
|
103
133
|
const offset = p_ctx.readUInt32();
|
|
104
134
|
const chunksize = p_ctx.readUInt32();
|
|
135
|
+
// The declared size must match what actually arrived. That is the real
|
|
136
|
+
// integrity check; there is deliberately no upper bound on it, because
|
|
137
|
+
// the device chooses the chunk size and Engine OS 5.x exceeds 4096.
|
|
105
138
|
(0, assert_1.strict)(chunksize === p_ctx.sizeLeft());
|
|
106
|
-
(0, assert_1.strict)(p_ctx.sizeLeft() <= exports.CHUNK_SIZE);
|
|
107
139
|
return {
|
|
108
140
|
id: messageId,
|
|
109
141
|
message: {
|
|
@@ -120,7 +152,7 @@ class FileTransfer extends Service_1.Service {
|
|
|
120
152
|
};
|
|
121
153
|
}
|
|
122
154
|
case MessageId.ServiceDisconnect: {
|
|
123
|
-
//This message is received when the player that FileTransfer is connected to shuts down
|
|
155
|
+
//This message is received when the player that FileTransfer is connected to shuts down
|
|
124
156
|
this.disconnect();
|
|
125
157
|
return {
|
|
126
158
|
id: messageId,
|
|
@@ -136,8 +168,18 @@ class FileTransfer extends Service_1.Service {
|
|
|
136
168
|
}
|
|
137
169
|
messageHandler(p_data) {
|
|
138
170
|
if (p_data.id === MessageId.FileTransferChunk && this.receivedFile) {
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
const room = this.receivedFile.sizeLeft();
|
|
172
|
+
if (room <= 0)
|
|
173
|
+
return;
|
|
174
|
+
const chunk = p_data.message.data;
|
|
175
|
+
const fileSize = this.receivedFile.tell() + room;
|
|
176
|
+
this.noteChunkSize(this.receivedFile.tell(), chunk.byteLength, fileSize);
|
|
177
|
+
// Write only what still fits. A device may overrun the declared file size
|
|
178
|
+
// on the final chunk, and WriteContext is autoGrow by default — letting it
|
|
179
|
+
// resize would push the buffer past `size`, so isEOF() would never become
|
|
180
|
+
// true and getFile() would spin until DOWNLOAD_TIMEOUT. Slicing keeps the
|
|
181
|
+
// write position landing exactly on the end of the file.
|
|
182
|
+
this.receivedFile.write(room < chunk.byteLength ? chunk.subarray(0, room) : chunk);
|
|
141
183
|
}
|
|
142
184
|
else {
|
|
143
185
|
// Logger.log(p_data);
|
|
@@ -152,7 +194,10 @@ class FileTransfer extends Service_1.Service {
|
|
|
152
194
|
const txinfo = await this.waitForMessage(MessageId.FileTransferId);
|
|
153
195
|
if (txinfo) {
|
|
154
196
|
this.receivedFile = new WriteContext_1.WriteContext({ size: txinfo.size });
|
|
155
|
-
|
|
197
|
+
// Over-requesting is harmless (the device stops at EOF) but requesting
|
|
198
|
+
// too few chunks would leave the write buffer short of isEOF() and hang,
|
|
199
|
+
// so fall back to the smaller assumed size until the real one is known.
|
|
200
|
+
const totalChunks = Math.ceil(txinfo.size / (this.deviceChunkSize ?? exports.CHUNK_SIZE));
|
|
156
201
|
const total = parseInt(txinfo.size);
|
|
157
202
|
if (total === 0) {
|
|
158
203
|
this.logger.warn(`${p_location} doesn't exist or is a streaming file`);
|
|
@@ -171,7 +216,7 @@ class FileTransfer extends Service_1.Service {
|
|
|
171
216
|
sizeLeft: this.receivedFile?.sizeLeft() ?? 0,
|
|
172
217
|
total: txinfo.size,
|
|
173
218
|
bytesDownloaded: bytesDownloaded,
|
|
174
|
-
percentComplete: percentComplete
|
|
219
|
+
percentComplete: percentComplete,
|
|
175
220
|
});
|
|
176
221
|
this.logger.debug(`Reading ${p_location} progressComplete=${Math.ceil(percentComplete)}% ${bytesDownloaded}/${total}`);
|
|
177
222
|
await (0, sleep_1.sleep)(200);
|
|
@@ -241,6 +286,14 @@ class FileTransfer extends Service_1.Service {
|
|
|
241
286
|
await this.waitTillAvailable();
|
|
242
287
|
this._available = false;
|
|
243
288
|
try {
|
|
289
|
+
// `requestChunkRange` speaks in chunk indices, so a read that does not
|
|
290
|
+
// start at byte 0 cannot be turned into a request until the device's
|
|
291
|
+
// chunk size is known. In practice every parser reads the file header
|
|
292
|
+
// first (offset 0), which is chunk 0 at any chunk size and measures the
|
|
293
|
+
// size for free — so this probe is a rarely-taken fallback.
|
|
294
|
+
if (this.deviceChunkSize === null && offset > 0) {
|
|
295
|
+
await this.learnChunkSize(p_location);
|
|
296
|
+
}
|
|
244
297
|
// Request file transfer ID to get file size and txid
|
|
245
298
|
await this.requestFileTransferId(p_location);
|
|
246
299
|
const txinfo = await this.waitForMessage(MessageId.FileTransferId);
|
|
@@ -256,51 +309,88 @@ class FileTransfer extends Service_1.Service {
|
|
|
256
309
|
await this.signalTransferComplete();
|
|
257
310
|
return Buffer.alloc(0);
|
|
258
311
|
}
|
|
259
|
-
|
|
260
|
-
const startChunk = Math.floor(offset /
|
|
261
|
-
const endChunk = Math.floor((endOffset - 1) /
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
const chunkPromise = new Promise((resolve, reject) => {
|
|
268
|
-
const timeout = setTimeout(() => {
|
|
269
|
-
this.removeListener('message', chunkListener);
|
|
270
|
-
reject(new Error(`Timeout reading range from '${p_location}'`));
|
|
271
|
-
}, types_1.DOWNLOAD_TIMEOUT);
|
|
272
|
-
const chunkListener = (p_message) => {
|
|
273
|
-
if (p_message.id === MessageId.FileTransferChunk) {
|
|
274
|
-
const chunkOffset = p_message.message.offset;
|
|
275
|
-
const chunkIndex = Math.floor(chunkOffset / exports.CHUNK_SIZE) - startChunk;
|
|
276
|
-
if (chunkIndex >= 0 && chunkIndex < totalChunks) {
|
|
277
|
-
const bufferOffset = chunkIndex * exports.CHUNK_SIZE;
|
|
278
|
-
p_message.message.data.copy(chunkBuffer, bufferOffset);
|
|
279
|
-
chunksReceived++;
|
|
280
|
-
if (chunksReceived >= totalChunks) {
|
|
281
|
-
clearTimeout(timeout);
|
|
282
|
-
this.removeListener('message', chunkListener);
|
|
283
|
-
resolve();
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
};
|
|
288
|
-
this.addListener('message', chunkListener);
|
|
312
|
+
const chunkSize = this.deviceChunkSize ?? exports.CHUNK_SIZE;
|
|
313
|
+
const startChunk = Math.floor(offset / chunkSize);
|
|
314
|
+
const endChunk = Math.floor((endOffset - 1) / chunkSize);
|
|
315
|
+
const firstByteStart = startChunk * chunkSize;
|
|
316
|
+
const received = await this.receiveChunks(p_location, txinfo.txid, startChunk, endChunk, {
|
|
317
|
+
firstByteStart,
|
|
318
|
+
fileSize,
|
|
319
|
+
targetBytes: endOffset - firstByteStart,
|
|
289
320
|
});
|
|
290
|
-
// Request the specific chunk range
|
|
291
|
-
await this.requestChunkRange(txinfo.txid, startChunk, endChunk);
|
|
292
|
-
// Wait for all chunks
|
|
293
|
-
await chunkPromise;
|
|
294
|
-
// Signal transfer complete
|
|
295
321
|
await this.signalTransferComplete();
|
|
296
|
-
// Extract the exact bytes requested
|
|
297
|
-
|
|
298
|
-
|
|
322
|
+
// Extract the exact bytes requested. Chunks are concatenated in arrival
|
|
323
|
+
// order rather than placed by their reported offset: the device answers a
|
|
324
|
+
// contiguous range sequentially over TCP, which is the same property
|
|
325
|
+
// getFile() has always relied on.
|
|
326
|
+
const startInBuffer = offset - firstByteStart;
|
|
327
|
+
return received.subarray(startInBuffer, startInBuffer + actualLength);
|
|
299
328
|
}
|
|
300
329
|
finally {
|
|
301
330
|
this._available = true;
|
|
302
331
|
}
|
|
303
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* Measure the device's chunk size with a self-contained transfer that pulls
|
|
335
|
+
* only chunk 0 of `p_location`.
|
|
336
|
+
*
|
|
337
|
+
* Leaves `deviceChunkSize` unset when the file is smaller than a single chunk,
|
|
338
|
+
* since that chunk says nothing about the device's size. Callers must already
|
|
339
|
+
* hold the availability lock.
|
|
340
|
+
*/
|
|
341
|
+
async learnChunkSize(p_location) {
|
|
342
|
+
await this.requestFileTransferId(p_location);
|
|
343
|
+
const txinfo = await this.waitForMessage(MessageId.FileTransferId);
|
|
344
|
+
if (!txinfo || txinfo.size === 0)
|
|
345
|
+
return;
|
|
346
|
+
// `targetBytes: 1` resolves on the first chunk, whatever its size.
|
|
347
|
+
await this.receiveChunks(p_location, txinfo.txid, 0, 0, {
|
|
348
|
+
firstByteStart: 0,
|
|
349
|
+
fileSize: txinfo.size,
|
|
350
|
+
targetBytes: 1,
|
|
351
|
+
});
|
|
352
|
+
await this.signalTransferComplete();
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Request chunks `p_startChunk`..`p_endChunk` and concatenate them in arrival
|
|
356
|
+
* order.
|
|
357
|
+
*
|
|
358
|
+
* Completion is decided on bytes, not on a chunk count: a count would hang
|
|
359
|
+
* whenever the requested range was computed with a smaller chunk size than
|
|
360
|
+
* the device actually uses, because fewer chunks then cover the same bytes.
|
|
361
|
+
*/
|
|
362
|
+
async receiveChunks(p_location, p_txid, p_startChunk, p_endChunk, p_range) {
|
|
363
|
+
const chunks = [];
|
|
364
|
+
let total = 0;
|
|
365
|
+
const chunkPromise = new Promise((resolve, reject) => {
|
|
366
|
+
const timeout = setTimeout(() => {
|
|
367
|
+
this.removeListener('message', chunkListener);
|
|
368
|
+
reject(new Error(`Timeout reading range from '${p_location}'`));
|
|
369
|
+
}, types_1.DOWNLOAD_TIMEOUT);
|
|
370
|
+
const finish = () => {
|
|
371
|
+
clearTimeout(timeout);
|
|
372
|
+
this.removeListener('message', chunkListener);
|
|
373
|
+
resolve();
|
|
374
|
+
};
|
|
375
|
+
const chunkListener = (p_message) => {
|
|
376
|
+
if (p_message.id !== MessageId.FileTransferChunk)
|
|
377
|
+
return;
|
|
378
|
+
const data = p_message.message.data;
|
|
379
|
+
this.noteChunkSize(p_range.firstByteStart + total, data.byteLength, p_range.fileSize);
|
|
380
|
+
chunks.push(data);
|
|
381
|
+
total += data.byteLength;
|
|
382
|
+
// Either the requested bytes are covered, or the file ran out first
|
|
383
|
+
// (which happens whenever the range was over-requested past EOF).
|
|
384
|
+
if (total >= p_range.targetBytes || p_range.firstByteStart + total >= p_range.fileSize) {
|
|
385
|
+
finish();
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
this.addListener('message', chunkListener);
|
|
389
|
+
});
|
|
390
|
+
await this.requestChunkRange(p_txid, p_startChunk, p_endChunk);
|
|
391
|
+
await chunkPromise;
|
|
392
|
+
return Buffer.concat(chunks);
|
|
393
|
+
}
|
|
304
394
|
///////////////////////////////////////////////////////////////////////////
|
|
305
395
|
// Private methods
|
|
306
396
|
async requestStat(p_filepath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileTransfer.js","sourceRoot":"","sources":["../../services/FileTransfer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileTransfer.js","sourceRoot":"","sources":["../../services/FileTransfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,20 @@ export declare abstract class Service<T> extends EventEmitter {
|
|
|
12
12
|
protected controller: NetworkDevice;
|
|
13
13
|
protected connection: tcp.Connection | null;
|
|
14
14
|
protected logger: Logger;
|
|
15
|
+
/** Trailing bytes of a partially-received message, held for the next read. */
|
|
16
|
+
private queue;
|
|
15
17
|
constructor(p_address: string, p_port: number, p_controller: NetworkDevice, logger?: Logger);
|
|
18
|
+
/**
|
|
19
|
+
* Split one TCP read into length-prefixed messages and dispatch each.
|
|
20
|
+
*
|
|
21
|
+
* Any trailing partial message is held in `queue` and prepended to the next
|
|
22
|
+
* read. Parsing a single message is isolated so that one malformed or
|
|
23
|
+
* unsupported message costs only itself — previously a throw unwound past
|
|
24
|
+
* the framing loop, discarding every later message in the same read *and*
|
|
25
|
+
* the pending `queue`, which corrupted reassembly rather than skipping a
|
|
26
|
+
* message.
|
|
27
|
+
*/
|
|
28
|
+
protected handleData(p_data: Buffer): void;
|
|
16
29
|
connect(): Promise<void>;
|
|
17
30
|
disconnect(): void;
|
|
18
31
|
waitForMessage(p_messageId: number): Promise<T>;
|
package/dist/services/Service.js
CHANGED
|
@@ -46,68 +46,80 @@ class Service extends events_1.EventEmitter {
|
|
|
46
46
|
constructor(p_address, p_port, p_controller, logger = logger_1.noopLogger) {
|
|
47
47
|
super();
|
|
48
48
|
this.connection = null;
|
|
49
|
+
/** Trailing bytes of a partially-received message, held for the next read. */
|
|
50
|
+
this.queue = null;
|
|
49
51
|
this.address = p_address;
|
|
50
52
|
this.port = p_port;
|
|
51
53
|
this.name = this.constructor.name;
|
|
52
54
|
this.controller = p_controller;
|
|
53
55
|
this.logger = logger;
|
|
54
56
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
break;
|
|
57
|
+
/**
|
|
58
|
+
* Split one TCP read into length-prefixed messages and dispatch each.
|
|
59
|
+
*
|
|
60
|
+
* Any trailing partial message is held in `queue` and prepended to the next
|
|
61
|
+
* read. Parsing a single message is isolated so that one malformed or
|
|
62
|
+
* unsupported message costs only itself — previously a throw unwound past
|
|
63
|
+
* the framing loop, discarding every later message in the same read *and*
|
|
64
|
+
* the pending `queue`, which corrupted reassembly rather than skipping a
|
|
65
|
+
* message.
|
|
66
|
+
*/
|
|
67
|
+
handleData(p_data) {
|
|
68
|
+
const buffer = this.queue && this.queue.length > 0 ? Buffer.concat([this.queue, p_data]) : p_data;
|
|
69
|
+
// FIXME: Clean up this arraybuffer confusion mess
|
|
70
|
+
const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
|
|
71
|
+
const ctx = new ReadContext_1.ReadContext(arrayBuffer, false);
|
|
72
|
+
this.queue = null;
|
|
73
|
+
try {
|
|
74
|
+
while (ctx.isEOF() === false) {
|
|
75
|
+
if (ctx.sizeLeft() < 4) {
|
|
76
|
+
this.queue = ctx.readRemainingAsNewBuffer();
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
const length = ctx.readUInt32();
|
|
80
|
+
if (length > ctx.sizeLeft()) {
|
|
81
|
+
ctx.seek(-4); // Rewind 4 bytes to include the length again
|
|
82
|
+
this.queue = ctx.readRemainingAsNewBuffer();
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
const message = ctx.read(length);
|
|
86
|
+
// Use slice to get an actual copy of the message instead of working on the shared underlying ArrayBuffer
|
|
87
|
+
const data = message.buffer.slice(message.byteOffset, message.byteOffset + length);
|
|
88
|
+
const networkTap = (0, config_1.getConfig)().networkTap;
|
|
89
|
+
if (networkTap) {
|
|
90
|
+
networkTap({
|
|
91
|
+
direction: 'recv',
|
|
92
|
+
service: this.name,
|
|
93
|
+
address: this.address,
|
|
94
|
+
port: this.port,
|
|
95
|
+
data: message,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const parsedData = this.parseData(new ReadContext_1.ReadContext(data, false));
|
|
100
|
+
// Forward parsed data to message handler
|
|
101
|
+
if (parsedData) {
|
|
102
|
+
this.messageHandler(parsedData);
|
|
103
|
+
this.emit('message', parsedData);
|
|
103
104
|
}
|
|
104
105
|
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
// Skip this message only; framing and `queue` are outside this catch.
|
|
108
|
+
this.logger.error(err instanceof Error ? err.message : String(err));
|
|
109
|
+
}
|
|
105
110
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
// Framing itself failed — the read is unusable, so drop it rather than
|
|
114
|
+
// letting the throw escape into the socket's 'data' handler.
|
|
115
|
+
this.logger.error(err instanceof Error ? err.message : String(err));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async connect() {
|
|
119
|
+
(0, assert_1.strict)(!this.connection);
|
|
120
|
+
this.connection = await tcp.connect(this.address, this.port);
|
|
121
|
+
this.queue = null;
|
|
122
|
+
this.connection.socket.on('data', (p_data) => this.handleData(p_data));
|
|
111
123
|
// FIXME: Is this required for all Services?
|
|
112
124
|
const ctx = new WriteContext_1.WriteContext();
|
|
113
125
|
ctx.writeUInt32(types_1.MessageId.ServicesAnnouncement);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../services/Service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAsC;AAEtC,4CAA6C;AAC7C,oCAA8D;AAE9D,sDAAmD;AACnD,mCAA0C;AAC1C,wDAAqD;AACrD,kDAAoC;AAEpC,sCAAsC;AAEtC,MAAsB,OAAW,SAAQ,qBAAY;
|
|
1
|
+
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../services/Service.ts"],"names":[],"mappings":"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"}
|