stagelinq 3.0.1 → 3.1.1
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 +11 -2
- package/dist/Databases/Databases.d.ts +3 -1
- package/dist/Databases/Databases.js +12 -10
- package/dist/Databases/Databases.js.map +1 -1
- package/dist/Databases/DbConnection.d.ts +3 -1
- package/dist/Databases/DbConnection.js +11 -6
- package/dist/Databases/DbConnection.js.map +1 -1
- package/dist/StageLinq/index.d.ts +1 -1
- package/dist/StageLinq/index.js +9 -8
- package/dist/StageLinq/index.js.map +1 -1
- package/dist/devices/Player.d.ts +3 -0
- package/dist/devices/Player.js +23 -9
- package/dist/devices/Player.js.map +1 -1
- package/dist/devices/PlayerMessageQueue.js +3 -1
- package/dist/devices/PlayerMessageQueue.js.map +1 -1
- package/dist/eaas/beacon.d.ts +3 -1
- package/dist/eaas/beacon.js +10 -9
- package/dist/eaas/beacon.js.map +1 -1
- package/dist/eaas/discoverer.d.ts +3 -1
- package/dist/eaas/discoverer.js +16 -12
- package/dist/eaas/discoverer.js.map +1 -1
- package/dist/eaas/engine-library-client.d.ts +3 -1
- package/dist/eaas/engine-library-client.js +7 -6
- package/dist/eaas/engine-library-client.js.map +1 -1
- package/dist/eaas/http-client.d.ts +3 -1
- package/dist/eaas/http-client.js +5 -4
- package/dist/eaas/http-client.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata/index.d.ts +26 -0
- package/dist/metadata/index.js +53 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/reader.d.ts +11 -0
- package/dist/metadata/reader.js +20 -0
- package/dist/metadata/reader.js.map +1 -0
- package/dist/network/ConnectionHealth.d.ts +3 -1
- package/dist/network/ConnectionHealth.js +13 -12
- package/dist/network/ConnectionHealth.js.map +1 -1
- package/dist/network/NetworkDevice.d.ts +5 -3
- package/dist/network/NetworkDevice.js +17 -12
- package/dist/network/NetworkDevice.js.map +1 -1
- package/dist/network/StageLinqDevices.d.ts +12 -2
- package/dist/network/StageLinqDevices.js +64 -26
- package/dist/network/StageLinqDevices.js.map +1 -1
- package/dist/network/StageLinqListener.d.ts +5 -0
- package/dist/network/StageLinqListener.js +15 -1
- package/dist/network/StageLinqListener.js.map +1 -1
- package/dist/network/announce.d.ts +3 -2
- package/dist/network/announce.js +40 -15
- package/dist/network/announce.js.map +1 -1
- package/dist/services/BeatInfo.d.ts +1 -1
- package/dist/services/Broadcast.d.ts +1 -1
- package/dist/services/FileTransfer.d.ts +14 -0
- package/dist/services/FileTransfer.js +91 -11
- package/dist/services/FileTransfer.js.map +1 -1
- package/dist/services/Service.d.ts +5 -3
- package/dist/services/Service.js +13 -10
- package/dist/services/Service.js.map +1 -1
- package/dist/services/StateMap.d.ts +1 -1
- package/dist/services/StateMap.js +0 -1
- package/dist/services/StateMap.js.map +1 -1
- package/dist/services/TimeSync.d.ts +1 -1
- package/dist/services/TimeSync.js +2 -3
- package/dist/services/TimeSync.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/logger.d.ts +13 -0
- package/dist/types/logger.js +11 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/utils/ReadContext.js +8 -8
- package/dist/utils/ReadContext.js.map +1 -1
- package/dist/utils/WriteContext.js +2 -1
- package/dist/utils/WriteContext.js.map +1 -1
- package/dist/utils/tcp.d.ts +2 -1
- package/dist/utils/tcp.js +3 -3
- package/dist/utils/tcp.js.map +1 -1
- package/package.json +7 -3
- package/dist/LogEmitter/index.d.ts +0 -20
- package/dist/LogEmitter/index.js +0 -35
- package/dist/LogEmitter/index.js.map +0 -1
- package/dist/cli/beatinfo.d.ts +0 -11
- package/dist/cli/beatinfo.js +0 -84
- package/dist/cli/beatinfo.js.map +0 -1
- package/dist/cli/discover.d.ts +0 -9
- package/dist/cli/discover.js +0 -97
- package/dist/cli/discover.js.map +0 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +0 -197
- package/dist/cli/index.js.map +0 -1
- package/dist/utils/log.d.ts +0 -0
- package/dist/utils/log.js +0 -2
- package/dist/utils/log.js.map +0 -1
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ await stagelinq.connect();
|
|
|
28
28
|
|
|
29
29
|
## Features
|
|
30
30
|
|
|
31
|
-
| Feature | Go | Python |
|
|
31
|
+
| Feature | Go | Python | This repo |
|
|
32
32
|
|---------|:--:|:------:|:-----:|
|
|
33
33
|
| Device Discovery | ✅ | ✅ | ✅ |
|
|
34
34
|
| StateMap Service | ✅ | ✅ | ✅ |
|
|
@@ -222,6 +222,15 @@ This library incorporates code and ideas from other StageLinq implementations:
|
|
|
222
222
|
- **[PyStageLinQ](https://github.com/Jaxc/PyStageLinQ)** by Jaxc - Wireshark dissector, protocol documentation
|
|
223
223
|
- **[kyleawayan/StageLinq](https://github.com/kyleawayan/StageLinq)** by Kyle Awayan - Track path resolution fixes
|
|
224
224
|
|
|
225
|
+
## Related Packages
|
|
226
|
+
|
|
227
|
+
- [alphatheta-connect](https://github.com/chrisle/alphatheta-connect) — Pioneer Pro DJ Link integration
|
|
228
|
+
- [metadata-connect](https://github.com/chrisle/metadata-connect) — Audio metadata extraction with partial file reads
|
|
229
|
+
- [rekordbox-connect](https://github.com/chrisle/rekordbox-connect) — Rekordbox database integration
|
|
230
|
+
- [serato-connect](https://github.com/chrisle/serato-connect) — Serato DJ integration
|
|
231
|
+
|
|
232
|
+
These libraries power [Now Playing](https://nowplayingapp.com) — a real-time track display app for DJs and streamers.
|
|
233
|
+
|
|
225
234
|
## License
|
|
226
235
|
|
|
227
|
-
|
|
236
|
+
MIT
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ConnectionInfo, Source } from '../types';
|
|
2
2
|
import { EventEmitter } from 'stream';
|
|
3
3
|
import { FileTransfer } from '../services';
|
|
4
|
+
import type { Logger } from '../types/logger';
|
|
4
5
|
import { NetworkDevice } from '../network';
|
|
5
6
|
export declare interface Databases {
|
|
6
7
|
on(event: 'dbDownloaded', listener: (sourceName: string, dbPath: string) => void): this;
|
|
@@ -9,7 +10,8 @@ export declare interface Databases {
|
|
|
9
10
|
}
|
|
10
11
|
export declare class Databases extends EventEmitter {
|
|
11
12
|
sources: Map<string, string>;
|
|
12
|
-
|
|
13
|
+
private logger;
|
|
14
|
+
constructor(logger?: Logger);
|
|
13
15
|
downloadSourcesFromDevice(connectionInfo: ConnectionInfo, networkDevice: NetworkDevice): Promise<string[]>;
|
|
14
16
|
/**
|
|
15
17
|
* Download databases from this network source.
|
|
@@ -37,24 +37,26 @@ exports.Databases = void 0;
|
|
|
37
37
|
const stream_1 = require("stream");
|
|
38
38
|
const services_1 = require("../services");
|
|
39
39
|
const utils_1 = require("../utils");
|
|
40
|
-
const
|
|
40
|
+
const logger_1 = require("../types/logger");
|
|
41
41
|
const fs = __importStar(require("fs"));
|
|
42
42
|
class Databases extends stream_1.EventEmitter {
|
|
43
|
-
constructor() {
|
|
43
|
+
constructor(logger = logger_1.noopLogger) {
|
|
44
44
|
super();
|
|
45
45
|
this.sources = new Map();
|
|
46
|
+
this.logger = logger;
|
|
46
47
|
}
|
|
47
48
|
async downloadSourcesFromDevice(connectionInfo, networkDevice) {
|
|
48
49
|
const service = await networkDevice.connectToService(services_1.FileTransfer);
|
|
49
50
|
const sources = await service.getSources();
|
|
50
51
|
const output = [];
|
|
51
52
|
for (const source of sources) {
|
|
52
|
-
const
|
|
53
|
-
.exec(Buffer.from(connectionInfo.token).toString('hex'))
|
|
53
|
+
const match = /(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})/i
|
|
54
|
+
.exec(Buffer.from(connectionInfo.token).toString('hex'));
|
|
55
|
+
const deviceId = match ? match.slice(1).join('-') : 'unknown';
|
|
54
56
|
const dbConnectionName = `net://${deviceId}/${source.name}`;
|
|
55
|
-
|
|
57
|
+
this.logger.debug(`DB network path: ${dbConnectionName}`);
|
|
56
58
|
if (this.sources.has(dbConnectionName)) {
|
|
57
|
-
|
|
59
|
+
this.logger.debug(`Already seen ${source} on ${connectionInfo.address}:${connectionInfo.port}`);
|
|
58
60
|
}
|
|
59
61
|
else {
|
|
60
62
|
await this.downloadDb(dbConnectionName, service, source);
|
|
@@ -69,7 +71,7 @@ class Databases extends stream_1.EventEmitter {
|
|
|
69
71
|
async downloadDb(sourceId, service, source) {
|
|
70
72
|
const dbPath = (0, utils_1.getTempFilePath)(`${sourceId}/m.db`);
|
|
71
73
|
// Read database from source
|
|
72
|
-
|
|
74
|
+
this.logger.debug(`Reading database ${sourceId}`);
|
|
73
75
|
this.emit('dbDownloading', sourceId, dbPath);
|
|
74
76
|
service.on('fileTransferProgress', (progress) => {
|
|
75
77
|
this.emit('dbProgress', sourceId, progress.total, progress.bytesDownloaded, progress.percentComplete);
|
|
@@ -77,10 +79,10 @@ class Databases extends stream_1.EventEmitter {
|
|
|
77
79
|
// Save database to a file
|
|
78
80
|
await service.waitTillAvailable();
|
|
79
81
|
const file = await service.getFile(source.database.location);
|
|
80
|
-
|
|
82
|
+
this.logger.debug(`Saving ${sourceId} to ${dbPath}`);
|
|
81
83
|
fs.writeFileSync(dbPath, Buffer.from(file));
|
|
82
84
|
this.sources.set(sourceId, dbPath);
|
|
83
|
-
|
|
85
|
+
this.logger.debug(`Downloaded ${sourceId} to ${dbPath}`);
|
|
84
86
|
this.emit('dbDownloaded', sourceId, dbPath);
|
|
85
87
|
}
|
|
86
88
|
getDbPath(dbSourceName) {
|
|
@@ -92,7 +94,7 @@ class Databases extends stream_1.EventEmitter {
|
|
|
92
94
|
// return the first internal database we find.
|
|
93
95
|
for (const entry of Array.from(this.sources.entries())) {
|
|
94
96
|
if (/\(Internal\)/.test(entry[0])) {
|
|
95
|
-
|
|
97
|
+
this.logger.debug(`Returning copy of internal database`);
|
|
96
98
|
return this.sources.get(entry[0]);
|
|
97
99
|
}
|
|
98
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Databases.js","sourceRoot":"","sources":["../../Databases/Databases.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mCAAsC;AACtC,0CAA2C;AAC3C,oCAA2C;
|
|
1
|
+
{"version":3,"file":"Databases.js","sourceRoot":"","sources":["../../Databases/Databases.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mCAAsC;AACtC,0CAA2C;AAC3C,oCAA2C;AAE3C,4CAA6C;AAE7C,uCAAyB;AAQzB,MAAa,SAAU,SAAQ,qBAAY;IAKzC,YAAY,SAAiB,mBAAU;QACrC,KAAK,EAAE,CAAC;QAJV,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;QAKvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,cAA8B,EAAE,aAA4B;QAC1F,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,uBAAY,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,uCAAuC;iBAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,MAAM,gBAAgB,GAAG,SAAS,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,OAAO,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YAClG,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,OAAqB,EAAE,MAAc;QACtE,MAAM,MAAM,GAAG,IAAA,uBAAe,EAAC,GAAG,QAAQ,OAAO,CAAC,CAAC;QAEnD,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE7C,OAAO,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;QACxG,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,QAAQ,OAAO,MAAM,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,QAAQ,OAAO,MAAM,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,YAAqB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAE1D,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAErD,mEAAmE;YACnE,iEAAiE;YACjE,8CAA8C;YAC9C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACvD,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBACzD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,4BAA4B;YAC5B,MAAM,IAAI,KAAK,CAAC,gBAAgB,YAAY,kBAAkB,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;CAEF;AA9ED,8BA8EC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Track } from '../types';
|
|
2
|
+
import type { Logger } from '../types/logger';
|
|
2
3
|
export declare class DbConnection {
|
|
3
4
|
private db;
|
|
4
5
|
private dbPath;
|
|
5
|
-
|
|
6
|
+
private logger;
|
|
7
|
+
constructor(dbPath: string, logger?: Logger);
|
|
6
8
|
/**
|
|
7
9
|
* Execute a SQL query.
|
|
8
10
|
*
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.DbConnection = void 0;
|
|
4
|
-
const
|
|
7
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
8
|
+
const logger_1 = require("../types/logger");
|
|
5
9
|
class DbConnection {
|
|
6
|
-
constructor(dbPath) {
|
|
10
|
+
constructor(dbPath, logger = logger_1.noopLogger) {
|
|
7
11
|
this.dbPath = dbPath;
|
|
8
|
-
|
|
9
|
-
this.
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
this.logger.debug(`Opening ${this.dbPath}`);
|
|
14
|
+
this.db = new better_sqlite3_1.default(this.dbPath);
|
|
10
15
|
}
|
|
11
16
|
/**
|
|
12
17
|
* Execute a SQL query.
|
|
@@ -16,7 +21,7 @@ class DbConnection {
|
|
|
16
21
|
* @returns
|
|
17
22
|
*/
|
|
18
23
|
querySource(query, ...params) {
|
|
19
|
-
|
|
24
|
+
this.logger.debug(`Querying ${this.dbPath}: ${query} (${params.join(', ')})`);
|
|
20
25
|
const result = this.db.prepare(query);
|
|
21
26
|
// @ts-ignore
|
|
22
27
|
return result.all(params);
|
|
@@ -40,7 +45,7 @@ class DbConnection {
|
|
|
40
45
|
return result[0];
|
|
41
46
|
}
|
|
42
47
|
close() {
|
|
43
|
-
|
|
48
|
+
this.logger.debug(`Closing ${this.dbPath}`);
|
|
44
49
|
this.db.close();
|
|
45
50
|
}
|
|
46
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbConnection.js","sourceRoot":"","sources":["../../Databases/DbConnection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DbConnection.js","sourceRoot":"","sources":["../../Databases/DbConnection.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AAGtC,4CAA6C;AAG7C,MAAa,YAAY;IAMvB,YAAY,MAAc,EAAE,SAAiB,mBAAU;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAI,KAAa,EAAE,GAAG,MAAa;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,MAAM,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,aAAa;QACb,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,SAAiB;QAC5B,IAAI,MAAe,CAAC;QACpB,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,6CAA6C,EAAE,SAAS,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,8CAA8C,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,eAAe,CAAC,CAAC;QAChF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CAEF;AAjDD,oCAiDC"}
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { EventEmitter } from 'events';
|
|
17
17
|
import { StageLinqDevices } from '../network/StageLinqDevices';
|
|
18
|
-
import { Logger } from '../LogEmitter';
|
|
19
18
|
import { StageLinqOptions } from '../types';
|
|
19
|
+
import type { Logger } from '../types/logger';
|
|
20
20
|
/**
|
|
21
21
|
* StageLinq instance class.
|
|
22
22
|
* Use this for multiple instances or when you need full control.
|
package/dist/StageLinq/index.js
CHANGED
|
@@ -19,8 +19,8 @@ exports.StageLinq = exports.StageLinqInstance = void 0;
|
|
|
19
19
|
const network_1 = require("../network");
|
|
20
20
|
const events_1 = require("events");
|
|
21
21
|
const StageLinqDevices_1 = require("../network/StageLinqDevices");
|
|
22
|
-
const LogEmitter_1 = require("../LogEmitter");
|
|
23
22
|
const types_1 = require("../types");
|
|
23
|
+
const logger_1 = require("../types/logger");
|
|
24
24
|
const config_1 = require("../config");
|
|
25
25
|
const DEFAULT_OPTIONS = {
|
|
26
26
|
maxRetries: 3,
|
|
@@ -35,14 +35,14 @@ const DEFAULT_OPTIONS = {
|
|
|
35
35
|
class StageLinqInstance extends events_1.EventEmitter {
|
|
36
36
|
constructor(options) {
|
|
37
37
|
super();
|
|
38
|
-
this.instanceLogger = LogEmitter_1.Logger.instance;
|
|
39
38
|
this._isConnected = false;
|
|
40
39
|
this.instanceOptions = { ...DEFAULT_OPTIONS, ...options };
|
|
40
|
+
this.instanceLogger = options?.logger ?? logger_1.noopLogger;
|
|
41
41
|
// Apply global config from options
|
|
42
42
|
if (this.instanceOptions.networkTap) {
|
|
43
43
|
(0, config_1.setConfig)({ networkTap: this.instanceOptions.networkTap });
|
|
44
44
|
}
|
|
45
|
-
this.devices = new StageLinqDevices_1.StageLinqDevices(this.instanceOptions);
|
|
45
|
+
this.devices = new StageLinqDevices_1.StageLinqDevices(this.instanceOptions, this.instanceLogger);
|
|
46
46
|
// Forward device events to this instance
|
|
47
47
|
this.devices.on('connected', (info) => this.emit('connected', info));
|
|
48
48
|
this.devices.on('ready', () => this.emit('ready'));
|
|
@@ -74,12 +74,12 @@ class StageLinqInstance extends events_1.EventEmitter {
|
|
|
74
74
|
*/
|
|
75
75
|
async connect() {
|
|
76
76
|
if (this._isConnected) {
|
|
77
|
-
|
|
77
|
+
this.instanceLogger.warn('Already connected');
|
|
78
78
|
return;
|
|
79
79
|
}
|
|
80
80
|
this.listener = new network_1.StageLinqListener();
|
|
81
81
|
const msg = (0, network_1.createDiscoveryMessage)(types_1.Action.Login, this.instanceOptions.actingAs);
|
|
82
|
-
await (0, network_1.announce)(msg);
|
|
82
|
+
await (0, network_1.announce)(msg, this.instanceLogger);
|
|
83
83
|
this.listener.listenForDevices(async (connectionInfo) => {
|
|
84
84
|
await this.devices.handleDevice(connectionInfo);
|
|
85
85
|
});
|
|
@@ -91,13 +91,14 @@ class StageLinqInstance extends events_1.EventEmitter {
|
|
|
91
91
|
*/
|
|
92
92
|
async disconnect() {
|
|
93
93
|
if (!this._isConnected) {
|
|
94
|
-
|
|
94
|
+
this.instanceLogger.warn('Not connected');
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
97
|
try {
|
|
98
98
|
this.devices.disconnectAll();
|
|
99
|
+
this.listener?.stop();
|
|
99
100
|
const msg = (0, network_1.createDiscoveryMessage)(types_1.Action.Logout, this.instanceOptions.actingAs);
|
|
100
|
-
await (0, network_1.unannounce)(msg);
|
|
101
|
+
await (0, network_1.unannounce)(msg, this.instanceLogger);
|
|
101
102
|
this._isConnected = false;
|
|
102
103
|
this.emit('disconnected');
|
|
103
104
|
}
|
|
@@ -223,7 +224,7 @@ class StageLinq {
|
|
|
223
224
|
static reset() {
|
|
224
225
|
if (this._instance) {
|
|
225
226
|
if (this._instance.isConnected) {
|
|
226
|
-
|
|
227
|
+
this._instance.instanceLogger.warn('Cannot reset while connected. Call disconnect() first.');
|
|
227
228
|
return;
|
|
228
229
|
}
|
|
229
230
|
this._instance = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../StageLinq/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,wCAA6F;AAC7F,mCAAsC;AACtC,kEAA+D;AAC/D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../StageLinq/index.ts"],"names":[],"mappings":"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"}
|
package/dist/devices/Player.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import { PlayerStatus } from '../types';
|
|
3
3
|
import { StateMap } from '../services';
|
|
4
|
+
import type { Logger } from '../types/logger';
|
|
4
5
|
export declare interface Player {
|
|
5
6
|
on(event: 'trackLoaded', listener: (status: PlayerStatus) => void): this;
|
|
6
7
|
on(event: 'stateChanged', listener: (status: PlayerStatus) => void): this;
|
|
@@ -11,6 +12,7 @@ interface PlayerOptions {
|
|
|
11
12
|
address: string;
|
|
12
13
|
port: number;
|
|
13
14
|
deviceId: string;
|
|
15
|
+
logger?: Logger;
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* A player represents a device on the StageLinq network.
|
|
@@ -38,6 +40,7 @@ export declare class Player extends EventEmitter {
|
|
|
38
40
|
private lastTrackNetworkPath;
|
|
39
41
|
private queue;
|
|
40
42
|
private deviceId;
|
|
43
|
+
private logger;
|
|
41
44
|
/**
|
|
42
45
|
* Initialize a player device.
|
|
43
46
|
*
|
package/dist/devices/Player.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Player = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
5
|
const PlayerMessageQueue_1 = require("./PlayerMessageQueue");
|
|
6
|
-
const
|
|
6
|
+
const logger_1 = require("../types/logger");
|
|
7
7
|
/**
|
|
8
8
|
* A player represents a device on the StageLinq network.
|
|
9
9
|
*
|
|
@@ -29,9 +29,13 @@ class Player extends events_1.EventEmitter {
|
|
|
29
29
|
*/
|
|
30
30
|
constructor(options) {
|
|
31
31
|
super();
|
|
32
|
+
this.player = 0; // Player number as reported by the device.
|
|
33
|
+
this.masterTempo = 0; // Current master tempo BPM
|
|
34
|
+
this.masterStatus = false; // If this device has the master tempo
|
|
32
35
|
this.decks = new Map();
|
|
33
36
|
this.lastTrackNetworkPath = new Map();
|
|
34
37
|
this.queue = {};
|
|
38
|
+
this.logger = options.logger ?? logger_1.noopLogger;
|
|
35
39
|
options.stateMap.on('message', this.messageHandler.bind(this));
|
|
36
40
|
this.address = options.address;
|
|
37
41
|
this.port = options.port;
|
|
@@ -88,7 +92,7 @@ class Player extends events_1.EventEmitter {
|
|
|
88
92
|
: (/Play$/.test(name)) ? { play: json.state }
|
|
89
93
|
: (/PlayerJogColor[A-D]$/.test(name)) ? { jogColor: json.color }
|
|
90
94
|
: null;
|
|
91
|
-
if (cueData) {
|
|
95
|
+
if (cueData && deck) {
|
|
92
96
|
this.queue[deck].push({ layer: deck, ...cueData });
|
|
93
97
|
}
|
|
94
98
|
}
|
|
@@ -97,7 +101,7 @@ class Player extends events_1.EventEmitter {
|
|
|
97
101
|
* @param data
|
|
98
102
|
*/
|
|
99
103
|
handleUpdate(data) {
|
|
100
|
-
|
|
104
|
+
this.logger.debug(`data: ${JSON.stringify(data, null, 2)}`);
|
|
101
105
|
const layer = data.layer;
|
|
102
106
|
// A new song my be loading onto a layer but not yet fully downloaded.
|
|
103
107
|
// For example streaming a song from Beatport Link.
|
|
@@ -108,21 +112,27 @@ class Player extends events_1.EventEmitter {
|
|
|
108
112
|
isNewTrack = false;
|
|
109
113
|
}
|
|
110
114
|
}
|
|
111
|
-
this.lastTrackNetworkPath.set(layer, data.trackNetworkPath);
|
|
115
|
+
this.lastTrackNetworkPath.set(layer, data.trackNetworkPath ?? '');
|
|
112
116
|
// This will be true once a song has been fully downloaded / loaded.
|
|
113
117
|
const isSongLoaded = data.hasOwnProperty('songLoaded');
|
|
118
|
+
// Capture previous play state before merging
|
|
119
|
+
const previousState = this.decks.get(layer);
|
|
120
|
+
const wasPlaying = previousState?.playState === true;
|
|
114
121
|
// If a new song is loaded drop all the previous track data.
|
|
115
122
|
if (isNewTrack && isSongLoaded) {
|
|
116
|
-
|
|
123
|
+
this.logger.debug(`Replacing state ${layer}`);
|
|
117
124
|
this.decks.set(layer, data);
|
|
118
125
|
}
|
|
119
126
|
else {
|
|
120
|
-
|
|
127
|
+
this.logger.debug(`Updating state ${layer}`);
|
|
121
128
|
this.decks.set(layer, { ...this.decks.get(layer), ...data });
|
|
122
129
|
}
|
|
123
130
|
const result = this.decks.get(layer);
|
|
131
|
+
if (!result)
|
|
132
|
+
return;
|
|
124
133
|
const deck = `${this.player}${result.layer}`;
|
|
125
134
|
const output = {
|
|
135
|
+
...result,
|
|
126
136
|
deck: deck,
|
|
127
137
|
player: this.player,
|
|
128
138
|
layer: layer,
|
|
@@ -131,7 +141,6 @@ class Player extends events_1.EventEmitter {
|
|
|
131
141
|
masterTempo: this.masterTempo,
|
|
132
142
|
masterStatus: this.masterStatus,
|
|
133
143
|
deviceId: `net://${this.deviceId}`,
|
|
134
|
-
...result
|
|
135
144
|
};
|
|
136
145
|
// We're casting here because we originally built it up piecemeal.
|
|
137
146
|
const currentState = output;
|
|
@@ -150,8 +159,13 @@ class Player extends events_1.EventEmitter {
|
|
|
150
159
|
// If a song is loaded and we have a location emit the trackLoaded event.
|
|
151
160
|
if (isSongLoaded && currentState.trackNetworkPath)
|
|
152
161
|
this.emit('trackLoaded', currentState);
|
|
153
|
-
//
|
|
154
|
-
|
|
162
|
+
// Only emit nowPlaying when play state transitions to true, or when a new
|
|
163
|
+
// track starts playing. Previously this fired on every state update
|
|
164
|
+
// (fader moves, BPM changes, etc.) which caused track duplication.
|
|
165
|
+
const isNowPlaying = result?.playState === true;
|
|
166
|
+
const playJustStarted = isNowPlaying && !wasPlaying;
|
|
167
|
+
const newTrackWhilePlaying = isNowPlaying && isNewTrack && isSongLoaded;
|
|
168
|
+
if (playJustStarted || newTrackWhilePlaying)
|
|
155
169
|
this.emit('nowPlaying', currentState);
|
|
156
170
|
// Emit that the state has changed.
|
|
157
171
|
this.emit('stateChanged', currentState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.js","sourceRoot":"","sources":["../../devices/Player.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAEtC,6DAA0D;
|
|
1
|
+
{"version":3,"file":"Player.js","sourceRoot":"","sources":["../../devices/Player.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ exports.UPDATE_RATE_MS = 1500;
|
|
|
17
17
|
*/
|
|
18
18
|
class PlayerMessageQueue {
|
|
19
19
|
constructor(layer) {
|
|
20
|
+
this.callback = () => { };
|
|
20
21
|
this.data = [];
|
|
21
22
|
this.timeout = null;
|
|
22
23
|
this.layer = layer;
|
|
@@ -38,7 +39,8 @@ class PlayerMessageQueue {
|
|
|
38
39
|
let output = { layer: this.layer };
|
|
39
40
|
this.data.map(d => { output = { ...output, ...d }; });
|
|
40
41
|
this.data = [];
|
|
41
|
-
|
|
42
|
+
if (this.timeout)
|
|
43
|
+
clearTimeout(this.timeout);
|
|
42
44
|
this.timeout = null;
|
|
43
45
|
this.callback(output);
|
|
44
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerMessageQueue.js","sourceRoot":"","sources":["../../devices/PlayerMessageQueue.ts"],"names":[],"mappings":";;;AAEA,+EAA+E;AAC/E,yDAAyD;AAC5C,QAAA,cAAc,GAAG,IAAI,CAAC;AAInC;;;;;;;;;;GAUG;AACH,MAAa,kBAAkB;IAO7B,YAAY,KAAa;
|
|
1
|
+
{"version":3,"file":"PlayerMessageQueue.js","sourceRoot":"","sources":["../../devices/PlayerMessageQueue.ts"],"names":[],"mappings":";;;AAEA,+EAA+E;AAC/E,yDAAyD;AAC5C,QAAA,cAAc,GAAG,IAAI,CAAC;AAInC;;;;;;;;;;GAUG;AACH,MAAa,kBAAkB;IAO7B,YAAY,KAAa;QALjB,aAAQ,GAAsB,GAAG,EAAE,GAAE,CAAC,CAAC;QACvC,SAAI,GAAuB,EAAE,CAAC;QAC9B,YAAO,GAAyC,IAAI,CAAC;QAI3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAAsB;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,sBAAc,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,MAAM,GAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,OAAO;YAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,MAA0B,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA3CD,gDA2CC"}
|
package/dist/eaas/beacon.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* License: MIT
|
|
10
10
|
*/
|
|
11
11
|
import { EventEmitter } from 'events';
|
|
12
|
+
import type { Logger } from '../types/logger';
|
|
12
13
|
import { EAASBeaconOptions } from './types';
|
|
13
14
|
export declare interface EAASBeacon {
|
|
14
15
|
on(event: 'request', listener: (address: string, port: number) => void): this;
|
|
@@ -40,7 +41,8 @@ export declare class EAASBeacon extends EventEmitter {
|
|
|
40
41
|
private options;
|
|
41
42
|
private socket;
|
|
42
43
|
private responseMessage;
|
|
43
|
-
|
|
44
|
+
private logger;
|
|
45
|
+
constructor(options: EAASBeaconOptions, logger?: Logger);
|
|
44
46
|
/**
|
|
45
47
|
* Get the beacon's token.
|
|
46
48
|
*/
|
package/dist/eaas/beacon.js
CHANGED
|
@@ -14,7 +14,7 @@ exports.EAASBeacon = void 0;
|
|
|
14
14
|
const dgram_1 = require("dgram");
|
|
15
15
|
const events_1 = require("events");
|
|
16
16
|
const os_1 = require("os");
|
|
17
|
-
const
|
|
17
|
+
const logger_1 = require("../types/logger");
|
|
18
18
|
const token_1 = require("../utils/token");
|
|
19
19
|
const types_1 = require("./types");
|
|
20
20
|
const messages_1 = require("./messages");
|
|
@@ -41,9 +41,10 @@ const messages_1 = require("./messages");
|
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
class EAASBeacon extends events_1.EventEmitter {
|
|
44
|
-
constructor(options) {
|
|
44
|
+
constructor(options, logger = logger_1.noopLogger) {
|
|
45
45
|
super();
|
|
46
46
|
this.socket = null;
|
|
47
|
+
this.logger = logger;
|
|
47
48
|
// Generate token if not provided
|
|
48
49
|
const token = options.token ?? (0, token_1.generateToken)();
|
|
49
50
|
this.options = {
|
|
@@ -79,14 +80,14 @@ class EAASBeacon extends events_1.EventEmitter {
|
|
|
79
80
|
*/
|
|
80
81
|
async start() {
|
|
81
82
|
if (this.socket) {
|
|
82
|
-
|
|
83
|
+
this.logger.warn('EAAS Beacon: Already started');
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
86
|
return new Promise((resolve, reject) => {
|
|
86
87
|
try {
|
|
87
88
|
this.socket = (0, dgram_1.createSocket)({ type: 'udp4', reuseAddr: true });
|
|
88
89
|
this.socket.on('error', (err) => {
|
|
89
|
-
|
|
90
|
+
this.logger.error(`EAAS Beacon socket error: ${err}`);
|
|
90
91
|
this.emit('error', err);
|
|
91
92
|
});
|
|
92
93
|
this.socket.on('message', (msg, rinfo) => {
|
|
@@ -94,7 +95,7 @@ class EAASBeacon extends events_1.EventEmitter {
|
|
|
94
95
|
});
|
|
95
96
|
this.socket.on('listening', () => {
|
|
96
97
|
const addr = this.socket.address();
|
|
97
|
-
|
|
98
|
+
this.logger.info(`EAAS Beacon: Listening on ${addr.address}:${addr.port}`);
|
|
98
99
|
// Build response message with correct host
|
|
99
100
|
const host = this.options.grpcHost || this.getLocalIP();
|
|
100
101
|
const url = `${host}:${this.options.grpcPort}`;
|
|
@@ -118,10 +119,10 @@ class EAASBeacon extends events_1.EventEmitter {
|
|
|
118
119
|
this.socket.close();
|
|
119
120
|
}
|
|
120
121
|
catch (err) {
|
|
121
|
-
|
|
122
|
+
this.logger.warn(`EAAS Beacon: Error closing socket: ${err}`);
|
|
122
123
|
}
|
|
123
124
|
this.socket = null;
|
|
124
|
-
|
|
125
|
+
this.logger.info('EAAS Beacon: Stopped');
|
|
125
126
|
}
|
|
126
127
|
}
|
|
127
128
|
/**
|
|
@@ -131,12 +132,12 @@ class EAASBeacon extends events_1.EventEmitter {
|
|
|
131
132
|
if (!(0, messages_1.isDiscoveryRequest)(data)) {
|
|
132
133
|
return; // Not a discovery request
|
|
133
134
|
}
|
|
134
|
-
|
|
135
|
+
this.logger.debug(`EAAS Beacon: Discovery request from ${rinfo.address}:${rinfo.port}`);
|
|
135
136
|
this.emit('request', rinfo.address, rinfo.port);
|
|
136
137
|
// Send response
|
|
137
138
|
this.socket?.send(this.responseMessage, rinfo.port, rinfo.address, (err) => {
|
|
138
139
|
if (err) {
|
|
139
|
-
|
|
140
|
+
this.logger.warn(`EAAS Beacon: Failed to send response to ${rinfo.address}: ${err}`);
|
|
140
141
|
}
|
|
141
142
|
});
|
|
142
143
|
}
|
package/dist/eaas/beacon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beacon.js","sourceRoot":"","sources":["../../eaas/beacon.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,iCAAsE;AACtE,mCAAsC;AACtC,2BAAuC;
|
|
1
|
+
{"version":3,"file":"beacon.js","sourceRoot":"","sources":["../../eaas/beacon.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* License: MIT
|
|
10
10
|
*/
|
|
11
11
|
import { EventEmitter } from 'events';
|
|
12
|
+
import type { Logger } from '../types/logger';
|
|
12
13
|
import { EAASDevice, EAASDiscovererOptions } from './types';
|
|
13
14
|
export declare interface EAASDiscoverer {
|
|
14
15
|
on(event: 'discovered', listener: (device: EAASDevice) => void): this;
|
|
@@ -42,7 +43,8 @@ export declare class EAASDiscoverer extends EventEmitter {
|
|
|
42
43
|
private socket;
|
|
43
44
|
private scanTimer;
|
|
44
45
|
private discoveredDevices;
|
|
45
|
-
|
|
46
|
+
private logger;
|
|
47
|
+
constructor(options?: EAASDiscovererOptions, logger?: Logger);
|
|
46
48
|
/**
|
|
47
49
|
* Perform a one-time discovery scan.
|
|
48
50
|
*
|