From 95b62bd6bf3b10254efc292c9a1d5956cfdb4841 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 14:33:05 -0800 Subject: [PATCH 01/44] initial implementation of loading the dictionary in a shared worker --- .webpack/webpack.common.js | 3 ++ .webpack/webpack.dev.js | 5 +++ .webpack/webpack.prod.js | 5 +++ src/providers/object-provider.js | 60 +++++++++++++++++++++++++++++--- src/providers/objectWorker.js | 57 ++++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 src/providers/objectWorker.js diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index e42d7574..ed302847 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -28,6 +28,9 @@ const WEBPACK_COMMON_CONFIG = { performance: { hints: false }, + entry: { + objectWorker: './src/providers/objectWorker.js', + }, resolve: { alias: { saveAs: "file-saver/src/FileSaver.js", diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index 236f8d3e..39efac10 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -33,6 +33,11 @@ module.exports = merge(common, { entry: { 'openmct-yamcs-example': path.resolve(projectRootDir, 'example/index.js') }, + plugins: [ + new webpack.DefinePlugin({ + __OPENMCT_YAMCS_ROOT_RELATIVE__: '"dist/"' + }) + ], devServer: { compress: true, port: 9000, diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index dd7b39a6..20b90930 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -32,5 +32,10 @@ module.exports = merge(common, { entry: { 'openmct-yamcs': path.resolve(projectRootDir, 'src/plugin.js') }, + plugins: [ + new webpack.DefinePlugin({ + __OPENMCT_YAMCS_ROOT_RELATIVE__: '""' + }) + ], devtool: 'source-map' }); diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index ed538e79..03ca197d 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -55,11 +55,13 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; + this.objectWorker = new SharedWorker(`${__OPENMCT_YAMCS_ROOT_RELATIVE__}object-worker.js`, 'YAMCS Object Worker'); this.#initialize(); } #initialize() { + this.#startWorker(); this.#createRootObject(); const eventsObject = createEventsObject(this.openmct, this.key, this.namespace); const commandsObject = createCommandsObject(this.openmct, this.key, this.namespace); @@ -73,6 +75,23 @@ export default class YamcsObjectProvider { this.openmct.on('destroy', this.#unsubscribeFromAll); } + #startWorker() { + this.objectWorker.port.onmessage = (e) => { + const { action, dictionary } = e.data; + + if (action === "dictionaryData") { + this.dictionary = dictionary; + this.#completeDictionaryLoading(); + } else if (action === "dictionaryNotLoaded") { + this.#loadAndStoreDictionary(); + } else if (action === "dictionaryLoading") { + this.#waitForDictionary(); + } + }; + + this.objectWorker.port.start(); + } + #createRootObject() { this.rootObject = { identifier: { @@ -180,10 +199,13 @@ export default class YamcsObjectProvider { #getTelemetryDictionary() { if (!this.dictionaryPromise) { - this.dictionaryPromise = this.#loadTelemetryDictionary(this.url, this.instance, this.folderName) - .finally(() => { - this.roleStatusTelemetry.dictionaryLoadComplete(); - }); + this.dictionaryPromise = new Promise((resolve, reject) => { + this.dictionaryResolve = resolve; + this.dictionaryReject = reject; + this.myWorker.port.postMessage({ action: "requestDictionary" }); + }).finally(() => { + this.roleStatusTelemetry.dictionaryLoadComplete(); + }); } return this.dictionaryPromise; @@ -219,6 +241,36 @@ export default class YamcsObjectProvider { return this.dictionary; } + async #loadAndStoreDictionary() { + this.dictionary = await this.#loadTelemetryDictionary(); + + // Send the loaded dictionary to the Object Worker + this.myWorker.port.postMessage({ action: "updateDictionary", data: this.dictionary }); + + if (this.dictionaryResolve) { + this.dictionaryResolve(this.dictionary); + } + } + + #completeDictionaryLoading() { + this.roleStatusTelemetry.dictionaryLoadComplete(); + + if (this.dictionaryResolve) { + this.dictionaryResolve(this.dictionary); + } + } + + #waitForDictionary() { + const checkInterval = setInterval(() => { + this.myWorker.port.postMessage({ action: "requestDictionary" }); + + if (this.dictionary) { + clearInterval(checkInterval); + this.#completeDictionaryLoading(); + } + }, 500); + } + #getMdbUrl(operation, name = '') { return this.url + 'api/mdb/' + this.instance + '/' + operation + name; } diff --git a/src/providers/objectWorker.js b/src/providers/objectWorker.js new file mode 100644 index 00000000..e2285737 --- /dev/null +++ b/src/providers/objectWorker.js @@ -0,0 +1,57 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2023, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ + +(function () { + let dictionary = null; + let isDictionaryLoading = false; + + self.onconnect = (e) => { + const port = e.ports[0]; + + port.onmessage = (event) => { + const { action, data } = event.data; + + if (action === 'requestDictionary') { + if (dictionary) { + port.postMessage({ + action: 'dictionaryData', + dictionary + }); + } else if (isDictionaryLoading) { + port.postMessage({ + action: 'dictionaryLoading' + }); + } else { + isDictionaryLoading = true; + port.postMessage({ + action: 'dictionaryNotLoaded' + }); + } + } else if (action === 'updateDictionary') { + dictionary = data; + isDictionaryLoading = false; + } + }; + + port.start(); + }; +}()); From f448e892b92ec20dc8acf995d4c63ab4b109b1fe Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 14:39:39 -0800 Subject: [PATCH 02/44] importing webpack --- .webpack/webpack.dev.js | 1 + .webpack/webpack.prod.js | 1 + 2 files changed, 2 insertions(+) diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index 39efac10..93fb1e94 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -21,6 +21,7 @@ *****************************************************************************/ const path = require('path'); +const webpack = require('webpack'); const { merge } = require('webpack-merge'); const common = require('./webpack.common'); const projectRootDir = path.resolve(__dirname, '..'); diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index 20b90930..1b4e360b 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -21,6 +21,7 @@ *****************************************************************************/ const path = require('path'); +const webpack = require('webpack'); const { merge } = require('webpack-merge'); const common = require('./webpack.common'); From fbecf3861a15598e316bd5d5cdeba649e031ffd3 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 14:55:23 -0800 Subject: [PATCH 03/44] update names --- src/providers/object-provider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 03ca197d..b008f0c0 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -202,7 +202,7 @@ export default class YamcsObjectProvider { this.dictionaryPromise = new Promise((resolve, reject) => { this.dictionaryResolve = resolve; this.dictionaryReject = reject; - this.myWorker.port.postMessage({ action: "requestDictionary" }); + this.objectWorker.port.postMessage({ action: "requestDictionary" }); }).finally(() => { this.roleStatusTelemetry.dictionaryLoadComplete(); }); @@ -245,7 +245,7 @@ export default class YamcsObjectProvider { this.dictionary = await this.#loadTelemetryDictionary(); // Send the loaded dictionary to the Object Worker - this.myWorker.port.postMessage({ action: "updateDictionary", data: this.dictionary }); + this.objectWorker.port.postMessage({ action: "updateDictionary", data: this.dictionary }); if (this.dictionaryResolve) { this.dictionaryResolve(this.dictionary); @@ -262,7 +262,7 @@ export default class YamcsObjectProvider { #waitForDictionary() { const checkInterval = setInterval(() => { - this.myWorker.port.postMessage({ action: "requestDictionary" }); + this.objectWorker.port.postMessage({ action: "requestDictionary" }); if (this.dictionary) { clearInterval(checkInterval); From 45d5588ceb36a113d64b3a001ab0babeb6edd6cd Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 15:04:32 -0800 Subject: [PATCH 04/44] debuggin --- src/providers/object-provider.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index b008f0c0..ddf05667 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -55,6 +55,8 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; + console.log(__OPENMCT_YAMCS_ROOT_RELATIVE__); + // eslint-disable-next-line no-undef this.objectWorker = new SharedWorker(`${__OPENMCT_YAMCS_ROOT_RELATIVE__}object-worker.js`, 'YAMCS Object Worker'); this.#initialize(); From 6855ec2117e5ed11a75005cee7fb7f208462dc49 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 15:45:14 -0800 Subject: [PATCH 05/44] wrong path possibly --- .webpack/webpack.common.js | 2 +- src/providers/object-provider.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index ed302847..b7398f0e 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -29,7 +29,7 @@ const WEBPACK_COMMON_CONFIG = { hints: false }, entry: { - objectWorker: './src/providers/objectWorker.js', + objectWorker: '../src/providers/objectWorker.js', }, resolve: { alias: { diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index ddf05667..401440d4 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -55,7 +55,6 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; - console.log(__OPENMCT_YAMCS_ROOT_RELATIVE__); // eslint-disable-next-line no-undef this.objectWorker = new SharedWorker(`${__OPENMCT_YAMCS_ROOT_RELATIVE__}object-worker.js`, 'YAMCS Object Worker'); From b09d390f7695f670f8cc7e174ac3afe713cea096 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 15:53:30 -0800 Subject: [PATCH 06/44] nope --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index b7398f0e..ed302847 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -29,7 +29,7 @@ const WEBPACK_COMMON_CONFIG = { hints: false }, entry: { - objectWorker: '../src/providers/objectWorker.js', + objectWorker: './src/providers/objectWorker.js', }, resolve: { alias: { From d8cc3f0aa62b216fd8259af099a4155956676d33 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:11:26 -0800 Subject: [PATCH 07/44] using worker-loader --- .webpack/webpack.common.js | 6 +++++- src/providers/object-provider.js | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index ed302847..c1b5b50b 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -38,11 +38,15 @@ const WEBPACK_COMMON_CONFIG = { }, module: { rules: [ + { + Wtest: /\.Worker\.js$/, + use: { type: 'javascript/auto', loader: 'worker-loader' } + }, { test: /\.js$/, enforce: "pre", use: ["source-map-loader"] - } + }, ] }, output: { diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 401440d4..3617a32d 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -27,6 +27,7 @@ import { getLimitOverrides } from '../utils.js'; +import ObjectWorker from './objectWorker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; @@ -55,8 +56,7 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; - // eslint-disable-next-line no-undef - this.objectWorker = new SharedWorker(`${__OPENMCT_YAMCS_ROOT_RELATIVE__}object-worker.js`, 'YAMCS Object Worker'); + this.objectWorker = new ObjectWorker(); this.#initialize(); } From 70dd206524f71e41b9024bfc58cbcc963ced4ddc Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:15:29 -0800 Subject: [PATCH 08/44] bad formatting --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index c1b5b50b..bf9ea0ff 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -40,7 +40,7 @@ const WEBPACK_COMMON_CONFIG = { rules: [ { Wtest: /\.Worker\.js$/, - use: { type: 'javascript/auto', loader: 'worker-loader' } + use: ['worker-loader'] }, { test: /\.js$/, From 4a1d44bb8808da589375042a70cf5dcb0c852c61 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:33:27 -0800 Subject: [PATCH 09/44] bad formatting --- .webpack/webpack.common.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index bf9ea0ff..dee4b1ee 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -39,8 +39,8 @@ const WEBPACK_COMMON_CONFIG = { module: { rules: [ { - Wtest: /\.Worker\.js$/, - use: ['worker-loader'] + test: /\.Worker\.js$/, + use: { type: 'javascript/auto', loader: 'worker-loader' } }, { test: /\.js$/, From 8a0774dc64a1af2108850be3863ea408c2ed19aa Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:35:01 -0800 Subject: [PATCH 10/44] bad formatting --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index dee4b1ee..05225d86 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -40,7 +40,7 @@ const WEBPACK_COMMON_CONFIG = { rules: [ { test: /\.Worker\.js$/, - use: { type: 'javascript/auto', loader: 'worker-loader' } + use: ['worker-loader'] }, { test: /\.js$/, From d71be20c0f0fa96847432efa1436bd1d54006311 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:43:34 -0800 Subject: [PATCH 11/44] bad formatting --- src/providers/object-provider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 3617a32d..2a8bab3d 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -27,7 +27,7 @@ import { getLimitOverrides } from '../utils.js'; -import ObjectWorker from './objectWorker.js'; +import ObjectWorker from 'worker-loader!./objectWorker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; @@ -56,7 +56,7 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; - this.objectWorker = new ObjectWorker(); + this.objectWorker = ObjectWorker(); this.#initialize(); } From 35942a237b612a3dfb845452c270841efa275620 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:48:34 -0800 Subject: [PATCH 12/44] bad formatting --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 05225d86..194673d8 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -40,7 +40,7 @@ const WEBPACK_COMMON_CONFIG = { rules: [ { test: /\.Worker\.js$/, - use: ['worker-loader'] + use: { loader: 'worker-loader' } }, { test: /\.js$/, From f640d4b57d8e4242732342053932e89d13f80cf1 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 1 Dec 2023 16:56:14 -0800 Subject: [PATCH 13/44] dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index bc62d90d..1b8cb58d 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "webpack": "5.88.2", "webpack-cli": "5.0.1", "webpack-dev-server": "4.11.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.8.0", + "worker-loader": "^3.0.8" } } From 7fa1d86515aef7b3018e8c20950851314e107740 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Tue, 5 Dec 2023 15:54:29 -0800 Subject: [PATCH 14/44] another way --- .webpack/webpack.common.js | 4 ---- src/providers/object-provider.js | 39 +++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 194673d8..832090bc 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -38,10 +38,6 @@ const WEBPACK_COMMON_CONFIG = { }, module: { rules: [ - { - test: /\.Worker\.js$/, - use: { loader: 'worker-loader' } - }, { test: /\.js$/, enforce: "pre", diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 2a8bab3d..813d11c2 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -20,6 +20,43 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +const workerScript = ` + let dictionary = null; + let isDictionaryLoading = false; + + onconnect = (e) => { + const port = e.ports[0]; + + port.onmessage = (event) => { + const { action, data } = event.data; + + if (action === 'requestDictionary') { + if (dictionary) { + port.postMessage({ + action: 'dictionaryData', + dictionary + }); + } else if (isDictionaryLoading) { + port.postMessage({ + action: 'dictionaryLoading' + }); + } else { + isDictionaryLoading = true; + port.postMessage({ + action: 'dictionaryNotLoaded' + }); + } + } else if (action === 'updateDictionary') { + dictionary = data; + isDictionaryLoading = false; + } + }; + }; +`; + +const workerBlob = new Blob([workerScript], { type: 'application/javascript' }); +const ObjectWorker = new SharedWorker(URL.createObjectURL(workerBlob)); + import { qualifiedNameToId, accumulateResults, @@ -27,7 +64,7 @@ import { getLimitOverrides } from '../utils.js'; -import ObjectWorker from 'worker-loader!./objectWorker.js'; +// import ObjectWorker from 'worker-loader!./objectWorker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; From 1c010cd99ffcbfdbeecafc063408f0c39ae6cf74 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Tue, 5 Dec 2023 16:00:06 -0800 Subject: [PATCH 15/44] not a function --- src/providers/object-provider.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 813d11c2..50c70453 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -64,7 +64,6 @@ import { getLimitOverrides } from '../utils.js'; -// import ObjectWorker from 'worker-loader!./objectWorker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; @@ -93,7 +92,7 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; - this.objectWorker = ObjectWorker(); + this.objectWorker = ObjectWorker; this.#initialize(); } From 1adb54a20f378719a1f5ec70f377ae96e5085bd0 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 14:18:27 -0800 Subject: [PATCH 16/44] tryin other ways --- .webpack/webpack.dev.js | 2 +- .webpack/webpack.prod.js | 2 +- src/providers/object-provider.js | 43 ++++---------------------------- 3 files changed, 7 insertions(+), 40 deletions(-) diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index 93fb1e94..2aba6744 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -36,7 +36,7 @@ module.exports = merge(common, { }, plugins: [ new webpack.DefinePlugin({ - __OPENMCT_YAMCS_ROOT_RELATIVE__: '"dist/"' + __OPENMCT_YAMCS_ROOT_RELATIVE__: `"${projectRootDir}/dist/"` }) ], devServer: { diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index 1b4e360b..a8e76568 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -35,7 +35,7 @@ module.exports = merge(common, { }, plugins: [ new webpack.DefinePlugin({ - __OPENMCT_YAMCS_ROOT_RELATIVE__: '""' + __OPENMCT_YAMCS_ROOT_RELATIVE__: `"${projectRootDir}"` }) ], devtool: 'source-map' diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 50c70453..66d028ba 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -20,43 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -const workerScript = ` - let dictionary = null; - let isDictionaryLoading = false; - - onconnect = (e) => { - const port = e.ports[0]; - - port.onmessage = (event) => { - const { action, data } = event.data; - - if (action === 'requestDictionary') { - if (dictionary) { - port.postMessage({ - action: 'dictionaryData', - dictionary - }); - } else if (isDictionaryLoading) { - port.postMessage({ - action: 'dictionaryLoading' - }); - } else { - isDictionaryLoading = true; - port.postMessage({ - action: 'dictionaryNotLoaded' - }); - } - } else if (action === 'updateDictionary') { - dictionary = data; - isDictionaryLoading = false; - } - }; - }; -`; - -const workerBlob = new Blob([workerScript], { type: 'application/javascript' }); -const ObjectWorker = new SharedWorker(URL.createObjectURL(workerBlob)); - import { qualifiedNameToId, accumulateResults, @@ -92,7 +55,11 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; - this.objectWorker = ObjectWorker; + + // eslint-disable-next-line no-undef + const sharedWorkerURL = `${__OPENMCT_YAMCS_ROOT_RELATIVE__}src/providers/objectWorker.js`; + console.log(sharedWorkerURL, `${this.openmct.getAssetPath()}${__OPENMCT_YAMCS_ROOT_RELATIVE__}src/providers/objectWorker.js`); + this.objectWorker = new SharedWorker(sharedWorkerURL, 'Object Worker'); this.#initialize(); } From 1a3c4d132bca8f03c05867adaf47abf2f59d4a48 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 14:48:31 -0800 Subject: [PATCH 17/44] trying to get this dang path right --- .webpack/webpack.common.js | 2 +- .webpack/webpack.dev.js | 2 +- .webpack/webpack.prod.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 832090bc..6bd59013 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -29,7 +29,7 @@ const WEBPACK_COMMON_CONFIG = { hints: false }, entry: { - objectWorker: './src/providers/objectWorker.js', + objectWorker: path.resolve(projectRootDir, '/src/providers/objectWorker.js'), }, resolve: { alias: { diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index 2aba6744..6c915de5 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -36,7 +36,7 @@ module.exports = merge(common, { }, plugins: [ new webpack.DefinePlugin({ - __OPENMCT_YAMCS_ROOT_RELATIVE__: `"${projectRootDir}/dist/"` + __OPENMCT_YAMCS_ROOT_RELATIVE__: `"dist/"` }) ], devServer: { diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index a8e76568..044ac9c3 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -35,7 +35,7 @@ module.exports = merge(common, { }, plugins: [ new webpack.DefinePlugin({ - __OPENMCT_YAMCS_ROOT_RELATIVE__: `"${projectRootDir}"` + __OPENMCT_YAMCS_ROOT_RELATIVE__: `""` }) ], devtool: 'source-map' From 2861ea90f4eb94f3b4331b66a2997d7d0c9ed8cb Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 14:59:50 -0800 Subject: [PATCH 18/44] trying to get this dang path right --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 6bd59013..6e40556d 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -29,7 +29,7 @@ const WEBPACK_COMMON_CONFIG = { hints: false }, entry: { - objectWorker: path.resolve(projectRootDir, '/src/providers/objectWorker.js'), + objectWorker: path.resolve(projectRootDir, 'src/providers/objectWorker.js'), }, resolve: { alias: { From de63f3125b068f613996f4595ac3af8b9bf12b22 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 15:26:34 -0800 Subject: [PATCH 19/44] must have been overwritten? --- .webpack/webpack.dev.js | 1 + .webpack/webpack.prod.js | 1 + 2 files changed, 2 insertions(+) diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index 6c915de5..a21f429d 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -32,6 +32,7 @@ module.exports = merge(common, { mode: 'development', devtool: 'eval-source-map', entry: { + ...common.entry, 'openmct-yamcs-example': path.resolve(projectRootDir, 'example/index.js') }, plugins: [ diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index 044ac9c3..9d41123c 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -31,6 +31,7 @@ module.exports = merge(common, { context: projectRootDir, mode: 'production', entry: { + ...common.entry, 'openmct-yamcs': path.resolve(projectRootDir, 'src/plugin.js') }, plugins: [ From 852c3b3f46207d8d811ebadf7381c4f4fc1f21bc Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 15:31:55 -0800 Subject: [PATCH 20/44] straws --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 6e40556d..bc35ceae 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -22,7 +22,7 @@ const path = require('path'); const projectRootDir = path.resolve(__dirname, '..'); - +console.log('wtf mate... wtf', path.resolve(projectRootDir, 'src/providers/objectWorker.js')); // eslint-disable no-undef const WEBPACK_COMMON_CONFIG = { performance: { From 0b7bafd6dd3c5330ae055c7bb2b8da0c7f9fe3ab Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 16:04:37 -0800 Subject: [PATCH 21/44] trying worker-loader again --- .webpack/webpack.common.js | 9 +-- .webpack/webpack.dev.js | 6 -- .webpack/webpack.prod.js | 1 - src/providers/object-provider.js | 7 +-- .../{objectWorker.js => object.worker.js} | 58 +++++++++---------- 5 files changed, 35 insertions(+), 46 deletions(-) rename src/providers/{objectWorker.js => object.worker.js} (54%) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index bc35ceae..4e0b3d03 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -22,15 +22,12 @@ const path = require('path'); const projectRootDir = path.resolve(__dirname, '..'); -console.log('wtf mate... wtf', path.resolve(projectRootDir, 'src/providers/objectWorker.js')); + // eslint-disable no-undef const WEBPACK_COMMON_CONFIG = { performance: { hints: false }, - entry: { - objectWorker: path.resolve(projectRootDir, 'src/providers/objectWorker.js'), - }, resolve: { alias: { saveAs: "file-saver/src/FileSaver.js", @@ -38,6 +35,10 @@ const WEBPACK_COMMON_CONFIG = { }, module: { rules: [ + { + test: /\.worker\.js$/, + use: { loader: 'worker-loader' }, + }, { test: /\.js$/, enforce: "pre", diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index a21f429d..11718abf 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -32,14 +32,8 @@ module.exports = merge(common, { mode: 'development', devtool: 'eval-source-map', entry: { - ...common.entry, 'openmct-yamcs-example': path.resolve(projectRootDir, 'example/index.js') }, - plugins: [ - new webpack.DefinePlugin({ - __OPENMCT_YAMCS_ROOT_RELATIVE__: `"dist/"` - }) - ], devServer: { compress: true, port: 9000, diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index 9d41123c..044ac9c3 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -31,7 +31,6 @@ module.exports = merge(common, { context: projectRootDir, mode: 'production', entry: { - ...common.entry, 'openmct-yamcs': path.resolve(projectRootDir, 'src/plugin.js') }, plugins: [ diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 66d028ba..c2b59a34 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -27,6 +27,7 @@ import { getLimitOverrides } from '../utils.js'; +import ObjectWorker from 'worker-loader!./object.worker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; @@ -55,11 +56,7 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry = roleStatusTelemetry; this.pollQuestionParameter = pollQuestionParameter; this.pollQuestionTelemetry = pollQuestionTelemetry; - - // eslint-disable-next-line no-undef - const sharedWorkerURL = `${__OPENMCT_YAMCS_ROOT_RELATIVE__}src/providers/objectWorker.js`; - console.log(sharedWorkerURL, `${this.openmct.getAssetPath()}${__OPENMCT_YAMCS_ROOT_RELATIVE__}src/providers/objectWorker.js`); - this.objectWorker = new SharedWorker(sharedWorkerURL, 'Object Worker'); + this.objectWorker = new ObjectWorker(); this.#initialize(); } diff --git a/src/providers/objectWorker.js b/src/providers/object.worker.js similarity index 54% rename from src/providers/objectWorker.js rename to src/providers/object.worker.js index e2285737..e75ba53e 100644 --- a/src/providers/objectWorker.js +++ b/src/providers/object.worker.js @@ -20,38 +20,36 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -(function () { - let dictionary = null; - let isDictionaryLoading = false; +let dictionary = null; +let isDictionaryLoading = false; - self.onconnect = (e) => { - const port = e.ports[0]; +self.onconnect = (e) => { + const port = e.ports[0]; - port.onmessage = (event) => { - const { action, data } = event.data; + port.onmessage = (event) => { + const { action, data } = event.data; - if (action === 'requestDictionary') { - if (dictionary) { - port.postMessage({ - action: 'dictionaryData', - dictionary - }); - } else if (isDictionaryLoading) { - port.postMessage({ - action: 'dictionaryLoading' - }); - } else { - isDictionaryLoading = true; - port.postMessage({ - action: 'dictionaryNotLoaded' - }); - } - } else if (action === 'updateDictionary') { - dictionary = data; - isDictionaryLoading = false; + if (action === 'requestDictionary') { + if (dictionary) { + port.postMessage({ + action: 'dictionaryData', + dictionary + }); + } else if (isDictionaryLoading) { + port.postMessage({ + action: 'dictionaryLoading' + }); + } else { + isDictionaryLoading = true; + port.postMessage({ + action: 'dictionaryNotLoaded' + }); } - }; - - port.start(); + } else if (action === 'updateDictionary') { + dictionary = data; + isDictionaryLoading = false; + } }; -}()); + + port.start(); +}; From b3574a6973fe6c767637c97ba7fc8188036603fe Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 16:17:14 -0800 Subject: [PATCH 22/44] proper config --- .webpack/webpack.common.js | 5 ++++- src/providers/object-provider.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 4e0b3d03..1ca6c5d4 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -37,7 +37,10 @@ const WEBPACK_COMMON_CONFIG = { rules: [ { test: /\.worker\.js$/, - use: { loader: 'worker-loader' }, + loader: 'worker-loader', + options: { + worker: "SharedWorker", + }, }, { test: /\.js$/, diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index c2b59a34..90931329 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -27,7 +27,7 @@ import { getLimitOverrides } from '../utils.js'; -import ObjectWorker from 'worker-loader!./object.worker.js'; +import ObjectWorker from './object.worker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; From 10f9b69232fd6f8f02af5cf24f054a06aca88ad2 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 16:23:23 -0800 Subject: [PATCH 23/44] proper config --- .webpack/webpack.common.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 1ca6c5d4..13b2f5c3 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -39,7 +39,8 @@ const WEBPACK_COMMON_CONFIG = { test: /\.worker\.js$/, loader: 'worker-loader', options: { - worker: "SharedWorker", + filename: '[name].js' + worker: 'SharedWorker', }, }, { From c0d02fd7b9e953ec6839804bdee37eb69014449d Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 16:23:57 -0800 Subject: [PATCH 24/44] proper config --- .webpack/webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js index 13b2f5c3..2180f706 100644 --- a/.webpack/webpack.common.js +++ b/.webpack/webpack.common.js @@ -39,7 +39,7 @@ const WEBPACK_COMMON_CONFIG = { test: /\.worker\.js$/, loader: 'worker-loader', options: { - filename: '[name].js' + filename: '[name].js', worker: 'SharedWorker', }, }, From 58d77941f6d84e9ef2700737c9ccf2da73d6e3fe Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 16:56:08 -0800 Subject: [PATCH 25/44] proper config --- src/providers/object-provider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 90931329..c2b59a34 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -27,7 +27,7 @@ import { getLimitOverrides } from '../utils.js'; -import ObjectWorker from './object.worker.js'; +import ObjectWorker from 'worker-loader!./object.worker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; From 179dc9e67b922f8f0c76feb12de4dfefc50dad39 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Wed, 6 Dec 2023 17:03:57 -0800 Subject: [PATCH 26/44] proper conf --- src/providers/object-provider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index c2b59a34..90931329 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -27,7 +27,7 @@ import { getLimitOverrides } from '../utils.js'; -import ObjectWorker from 'worker-loader!./object.worker.js'; +import ObjectWorker from './object.worker.js'; import { OBJECT_TYPES, NAMESPACE } from '../const'; import OperatorStatusParameter from './user/operator-status-parameter.js'; import { createCommandsObject } from './commands.js'; From 28a38ea2ff60d2f37cbdd29defd53953abaef51b Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 8 Dec 2023 13:17:30 -0800 Subject: [PATCH 27/44] debugging race condition --- src/providers/object-provider.js | 4 ++++ src/providers/object.worker.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 90931329..20160d68 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -243,6 +243,7 @@ export default class YamcsObjectProvider { } async #loadAndStoreDictionary() { + console.log('load and store dictionary'); this.dictionary = await this.#loadTelemetryDictionary(); // Send the loaded dictionary to the Object Worker @@ -254,6 +255,7 @@ export default class YamcsObjectProvider { } #completeDictionaryLoading() { + console.log('complete dictionary loading'); this.roleStatusTelemetry.dictionaryLoadComplete(); if (this.dictionaryResolve) { @@ -262,7 +264,9 @@ export default class YamcsObjectProvider { } #waitForDictionary() { + console.log('wait for dictionary'); const checkInterval = setInterval(() => { + console.log('interval func'); this.objectWorker.port.postMessage({ action: "requestDictionary" }); if (this.dictionary) { diff --git a/src/providers/object.worker.js b/src/providers/object.worker.js index e75ba53e..e7ff44fa 100644 --- a/src/providers/object.worker.js +++ b/src/providers/object.worker.js @@ -28,7 +28,7 @@ self.onconnect = (e) => { port.onmessage = (event) => { const { action, data } = event.data; - + console.log('worker message', action, data); if (action === 'requestDictionary') { if (dictionary) { port.postMessage({ From 6802d86ead68aba122c5bb2348a384ba3dc3c169 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 8 Dec 2023 14:32:48 -0800 Subject: [PATCH 28/44] debugging race condition --- src/providers/object-provider.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 20160d68..238922d1 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -247,7 +247,10 @@ export default class YamcsObjectProvider { this.dictionary = await this.#loadTelemetryDictionary(); // Send the loaded dictionary to the Object Worker - this.objectWorker.port.postMessage({ action: "updateDictionary", data: this.dictionary }); + this.objectWorker.port.postMessage({ + action: "updateDictionary", + data: this.dictionary + }); if (this.dictionaryResolve) { this.dictionaryResolve(this.dictionary); @@ -270,6 +273,7 @@ export default class YamcsObjectProvider { this.objectWorker.port.postMessage({ action: "requestDictionary" }); if (this.dictionary) { + console.log('got the dictionary', this.dictionary); clearInterval(checkInterval); this.#completeDictionaryLoading(); } From 69baaa7ecff60ce0116245f31cae3a512ff0bd75 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 8 Dec 2023 15:15:43 -0800 Subject: [PATCH 29/44] immediately resolve dictionary if it exists --- src/providers/object-provider.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 238922d1..2cb4f63d 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -199,6 +199,10 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { + if (this.dictionary) { + return Promise.resolve(this.dictionary); + } + if (!this.dictionaryPromise) { this.dictionaryPromise = new Promise((resolve, reject) => { this.dictionaryResolve = resolve; From a6db3eee6c376a9653a4d6d06020f6c7bc79f39c Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 8 Dec 2023 15:24:08 -0800 Subject: [PATCH 30/44] immediately resolve dictionary if it exists --- src/providers/object-provider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 2cb4f63d..2421d08f 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -199,7 +199,7 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - if (this.dictionary) { + if (Object.keys(this.dictionary).length !== 0) { return Promise.resolve(this.dictionary); } From 1d37ee09d1f894dcf8e32315aabb79d412e7718f Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 8 Dec 2023 15:40:30 -0800 Subject: [PATCH 31/44] immediately resolve dictionary if it exists --- src/providers/object-provider.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 2421d08f..afc10e8e 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -199,7 +199,7 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - if (Object.keys(this.dictionary).length !== 0) { + if (this.dictonaryDoneLoading) { return Promise.resolve(this.dictionary); } @@ -265,9 +265,7 @@ export default class YamcsObjectProvider { console.log('complete dictionary loading'); this.roleStatusTelemetry.dictionaryLoadComplete(); - if (this.dictionaryResolve) { - this.dictionaryResolve(this.dictionary); - } + this.dictionaryLoadComplete = true; } #waitForDictionary() { From 0fa2e6065fc38bd4e1ab1be164ab2959cae2bb19 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Fri, 8 Dec 2023 15:49:05 -0800 Subject: [PATCH 32/44] immediately resolve dictionary if it exists --- src/providers/object-provider.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index afc10e8e..fee9c5e1 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -249,6 +249,7 @@ export default class YamcsObjectProvider { async #loadAndStoreDictionary() { console.log('load and store dictionary'); this.dictionary = await this.#loadTelemetryDictionary(); + this.dictionaryLoadComplete = true; // Send the loaded dictionary to the Object Worker this.objectWorker.port.postMessage({ @@ -266,6 +267,10 @@ export default class YamcsObjectProvider { this.roleStatusTelemetry.dictionaryLoadComplete(); this.dictionaryLoadComplete = true; + + if (this.dictionaryResolve) { + this.dictionaryResolve(this.dictionary); + } } #waitForDictionary() { From 5cc485169a2a82524e162ba5f0ac5fb947937cef Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 12:59:45 -0800 Subject: [PATCH 33/44] immediately resolve dictionary if it exists --- src/providers/object-provider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index fee9c5e1..6e9e08c8 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -199,7 +199,7 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - if (this.dictonaryDoneLoading) { + if (this.dictionaryLoadComplete) { return Promise.resolve(this.dictionary); } From b644f93b10c539e2f94854e633145bba5ca1dfd6 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 13:54:02 -0800 Subject: [PATCH 34/44] immediately resolve dictionary if it exists --- src/providers/object-provider.js | 58 ++++++++++++++------------------ src/providers/object.worker.js | 13 ++++--- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 6e9e08c8..2e18f121 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -80,13 +80,13 @@ export default class YamcsObjectProvider { this.objectWorker.port.onmessage = (e) => { const { action, dictionary } = e.data; - if (action === "dictionaryData") { + if (action === 'dictionaryData') { this.dictionary = dictionary; this.#completeDictionaryLoading(); - } else if (action === "dictionaryNotLoaded") { + } else if (action === 'dictionaryNotLoaded') { this.#loadAndStoreDictionary(); - } else if (action === "dictionaryLoading") { - this.#waitForDictionary(); + } else if (action === 'dictionaryLoading') { + // wait to act on 'dictionaryData' message } }; @@ -199,17 +199,17 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - if (this.dictionaryLoadComplete) { + if (this.dictionaryLoaded) { return Promise.resolve(this.dictionary); } if (!this.dictionaryPromise) { this.dictionaryPromise = new Promise((resolve, reject) => { this.dictionaryResolve = resolve; - this.dictionaryReject = reject; - this.objectWorker.port.postMessage({ action: "requestDictionary" }); - }).finally(() => { - this.roleStatusTelemetry.dictionaryLoadComplete(); + + this.objectWorker.port.postMessage({ + action: 'requestDictionary' + }); }); } @@ -247,45 +247,39 @@ export default class YamcsObjectProvider { } async #loadAndStoreDictionary() { - console.log('load and store dictionary'); this.dictionary = await this.#loadTelemetryDictionary(); - this.dictionaryLoadComplete = true; // Send the loaded dictionary to the Object Worker this.objectWorker.port.postMessage({ - action: "updateDictionary", + action: 'updateDictionary', data: this.dictionary }); - - if (this.dictionaryResolve) { - this.dictionaryResolve(this.dictionary); - } } #completeDictionaryLoading() { - console.log('complete dictionary loading'); + this.dictionaryLoaded = true; this.roleStatusTelemetry.dictionaryLoadComplete(); - this.dictionaryLoadComplete = true; - if (this.dictionaryResolve) { this.dictionaryResolve(this.dictionary); } } - #waitForDictionary() { - console.log('wait for dictionary'); - const checkInterval = setInterval(() => { - console.log('interval func'); - this.objectWorker.port.postMessage({ action: "requestDictionary" }); - - if (this.dictionary) { - console.log('got the dictionary', this.dictionary); - clearInterval(checkInterval); - this.#completeDictionaryLoading(); - } - }, 500); - } + // #waitForDictionary() { + // console.log('wait for dictionary'); + // const checkInterval = setInterval(() => { + // console.log('interval func'); + // this.objectWorker.port.postMessage({ + // action: 'requestDictionary' + // }); + + // if (this.dictionary) { + // console.log('got the dictionary', this.dictionary); + // clearInterval(checkInterval); + // this.#completeDictionaryLoading(); + // } + // }, 500); + // } #getMdbUrl(operation, name = '') { return this.url + 'api/mdb/' + this.instance + '/' + operation + name; diff --git a/src/providers/object.worker.js b/src/providers/object.worker.js index e7ff44fa..9c9e7720 100644 --- a/src/providers/object.worker.js +++ b/src/providers/object.worker.js @@ -31,10 +31,7 @@ self.onconnect = (e) => { console.log('worker message', action, data); if (action === 'requestDictionary') { if (dictionary) { - port.postMessage({ - action: 'dictionaryData', - dictionary - }); + postDictionary(); } else if (isDictionaryLoading) { port.postMessage({ action: 'dictionaryLoading' @@ -48,8 +45,16 @@ self.onconnect = (e) => { } else if (action === 'updateDictionary') { dictionary = data; isDictionaryLoading = false; + postDictionary(); } }; + function postDictionary() { + port.postMessage({ + action: 'dictionaryData', + dictionary + }); + } + port.start(); }; From 0aa9170dea4e919a3e07a00a07e69cb0c9efc14e Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 14:03:12 -0800 Subject: [PATCH 35/44] debug --- src/providers/object-provider.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 2e18f121..2da7ae70 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -81,12 +81,14 @@ export default class YamcsObjectProvider { const { action, dictionary } = e.data; if (action === 'dictionaryData') { + console.log('dictionary data!') this.dictionary = dictionary; this.#completeDictionaryLoading(); } else if (action === 'dictionaryNotLoaded') { + console.log('NO dictionary data!') this.#loadAndStoreDictionary(); } else if (action === 'dictionaryLoading') { - // wait to act on 'dictionaryData' message + console.log('LOADING dictionary data!') } }; From 9dbad107b90f42610c13b9b8b0026e5eabd1ac53 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 14:11:01 -0800 Subject: [PATCH 36/44] debug --- src/providers/object-provider.js | 6 ++---- src/providers/object.worker.js | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 2da7ae70..d9e94613 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -79,16 +79,14 @@ export default class YamcsObjectProvider { #startWorker() { this.objectWorker.port.onmessage = (e) => { const { action, dictionary } = e.data; - + console.log('message from worker', action, dictionary); if (action === 'dictionaryData') { - console.log('dictionary data!') this.dictionary = dictionary; this.#completeDictionaryLoading(); } else if (action === 'dictionaryNotLoaded') { - console.log('NO dictionary data!') this.#loadAndStoreDictionary(); } else if (action === 'dictionaryLoading') { - console.log('LOADING dictionary data!') + // wait for it } }; diff --git a/src/providers/object.worker.js b/src/providers/object.worker.js index 9c9e7720..586d17a4 100644 --- a/src/providers/object.worker.js +++ b/src/providers/object.worker.js @@ -50,6 +50,7 @@ self.onconnect = (e) => { }; function postDictionary() { + console.log('worker posting dictionary data') port.postMessage({ action: 'dictionaryData', dictionary From adc06671987a6c178ed0932b19b05bb3f7dd6ccd Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 14:26:34 -0800 Subject: [PATCH 37/44] posting to all ports when dictionary received, ignoring in provider if we have it already --- src/providers/object.worker.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/providers/object.worker.js b/src/providers/object.worker.js index 586d17a4..9b3d52a0 100644 --- a/src/providers/object.worker.js +++ b/src/providers/object.worker.js @@ -22,9 +22,11 @@ let dictionary = null; let isDictionaryLoading = false; +let ports = []; self.onconnect = (e) => { const port = e.ports[0]; + ports.push(port); port.onmessage = (event) => { const { action, data } = event.data; @@ -59,3 +61,13 @@ self.onconnect = (e) => { port.start(); }; + +function postDictionaryToAll() { + console.log('worker posting dictionary data to all ports'); + ports.forEach(port => { + port.postMessage({ + action: 'dictionaryData', + dictionary + }); + }); +} From 1bf03749811dfe85dfc6c21e380f22f9728db218 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 14:31:59 -0800 Subject: [PATCH 38/44] posting to all ports when dictionary received, ignoring in provider if we have it already --- src/providers/object.worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/object.worker.js b/src/providers/object.worker.js index 9b3d52a0..740c01a2 100644 --- a/src/providers/object.worker.js +++ b/src/providers/object.worker.js @@ -47,7 +47,7 @@ self.onconnect = (e) => { } else if (action === 'updateDictionary') { dictionary = data; isDictionaryLoading = false; - postDictionary(); + postDictionaryToAll(); } }; From 968f52a517d776256900ef90df061ac53341db54 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 14:48:35 -0800 Subject: [PATCH 39/44] cleaning up --- src/providers/object-provider.js | 26 +++++-------------------- src/providers/object.worker.js | 33 ++++++++++++-------------------- 2 files changed, 17 insertions(+), 42 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index d9e94613..4876d583 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -80,7 +80,7 @@ export default class YamcsObjectProvider { this.objectWorker.port.onmessage = (e) => { const { action, dictionary } = e.data; console.log('message from worker', action, dictionary); - if (action === 'dictionaryData') { + if (action === 'dictionaryData' && !this.dictionary) { this.dictionary = dictionary; this.#completeDictionaryLoading(); } else if (action === 'dictionaryNotLoaded') { @@ -199,9 +199,9 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - if (this.dictionaryLoaded) { - return Promise.resolve(this.dictionary); - } + // if (this.dictionaryLoaded) { + // return Promise.resolve(this.dictionary); + // } if (!this.dictionaryPromise) { this.dictionaryPromise = new Promise((resolve, reject) => { @@ -257,7 +257,7 @@ export default class YamcsObjectProvider { } #completeDictionaryLoading() { - this.dictionaryLoaded = true; + // this.dictionaryLoaded = true; this.roleStatusTelemetry.dictionaryLoadComplete(); if (this.dictionaryResolve) { @@ -265,22 +265,6 @@ export default class YamcsObjectProvider { } } - // #waitForDictionary() { - // console.log('wait for dictionary'); - // const checkInterval = setInterval(() => { - // console.log('interval func'); - // this.objectWorker.port.postMessage({ - // action: 'requestDictionary' - // }); - - // if (this.dictionary) { - // console.log('got the dictionary', this.dictionary); - // clearInterval(checkInterval); - // this.#completeDictionaryLoading(); - // } - // }, 500); - // } - #getMdbUrl(operation, name = '') { return this.url + 'api/mdb/' + this.instance + '/' + operation + name; } diff --git a/src/providers/object.worker.js b/src/providers/object.worker.js index 740c01a2..5c9ef371 100644 --- a/src/providers/object.worker.js +++ b/src/providers/object.worker.js @@ -30,10 +30,13 @@ self.onconnect = (e) => { port.onmessage = (event) => { const { action, data } = event.data; - console.log('worker message', action, data); + if (action === 'requestDictionary') { if (dictionary) { - postDictionary(); + port.postMessage({ + action: 'dictionaryData', + dictionary + }); } else if (isDictionaryLoading) { port.postMessage({ action: 'dictionaryLoading' @@ -47,27 +50,15 @@ self.onconnect = (e) => { } else if (action === 'updateDictionary') { dictionary = data; isDictionaryLoading = false; - postDictionaryToAll(); + + ports.forEach(p => { + p.postMessage({ + action: 'dictionaryData', + dictionary + }); + }); } }; - function postDictionary() { - console.log('worker posting dictionary data') - port.postMessage({ - action: 'dictionaryData', - dictionary - }); - } - port.start(); }; - -function postDictionaryToAll() { - console.log('worker posting dictionary data to all ports'); - ports.forEach(port => { - port.postMessage({ - action: 'dictionaryData', - dictionary - }); - }); -} From 087c7bf35668238213b0af1b1b9659e0075f2ace Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 14:54:06 -0800 Subject: [PATCH 40/44] cleaning up --- src/providers/object-provider.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 4876d583..3dca77f1 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -199,9 +199,9 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - // if (this.dictionaryLoaded) { - // return Promise.resolve(this.dictionary); - // } + if (this.dictionaryLoaded) { + return Promise.resolve(this.dictionary); + } if (!this.dictionaryPromise) { this.dictionaryPromise = new Promise((resolve, reject) => { @@ -257,7 +257,7 @@ export default class YamcsObjectProvider { } #completeDictionaryLoading() { - // this.dictionaryLoaded = true; + this.dictionaryLoaded = true; this.roleStatusTelemetry.dictionaryLoadComplete(); if (this.dictionaryResolve) { From e3109cc5f159fd472a1d12f82e49a80fe6bbef9b Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 15:32:48 -0800 Subject: [PATCH 41/44] cleaning up --- src/providers/object-provider.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index 3dca77f1..cce762f1 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -80,7 +80,7 @@ export default class YamcsObjectProvider { this.objectWorker.port.onmessage = (e) => { const { action, dictionary } = e.data; console.log('message from worker', action, dictionary); - if (action === 'dictionaryData' && !this.dictionary) { + if (action === 'dictionaryData') { this.dictionary = dictionary; this.#completeDictionaryLoading(); } else if (action === 'dictionaryNotLoaded') { @@ -199,10 +199,6 @@ export default class YamcsObjectProvider { } #getTelemetryDictionary() { - if (this.dictionaryLoaded) { - return Promise.resolve(this.dictionary); - } - if (!this.dictionaryPromise) { this.dictionaryPromise = new Promise((resolve, reject) => { this.dictionaryResolve = resolve; @@ -257,7 +253,6 @@ export default class YamcsObjectProvider { } #completeDictionaryLoading() { - this.dictionaryLoaded = true; this.roleStatusTelemetry.dictionaryLoadComplete(); if (this.dictionaryResolve) { From 4eaf1729f5fd7802b82434c789e26e8a5575b9db Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 15:51:09 -0800 Subject: [PATCH 42/44] cleaning up --- src/providers/object-provider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/object-provider.js b/src/providers/object-provider.js index cce762f1..0ae8f0ae 100644 --- a/src/providers/object-provider.js +++ b/src/providers/object-provider.js @@ -79,7 +79,7 @@ export default class YamcsObjectProvider { #startWorker() { this.objectWorker.port.onmessage = (e) => { const { action, dictionary } = e.data; - console.log('message from worker', action, dictionary); + if (action === 'dictionaryData') { this.dictionary = dictionary; this.#completeDictionaryLoading(); From 6dc7c16a5e7daff72e92ce73de3425e9975ac748 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 15:54:51 -0800 Subject: [PATCH 43/44] cleaning up --- .webpack/webpack.prod.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.webpack/webpack.prod.js b/.webpack/webpack.prod.js index 044ac9c3..dd7b39a6 100644 --- a/.webpack/webpack.prod.js +++ b/.webpack/webpack.prod.js @@ -21,7 +21,6 @@ *****************************************************************************/ const path = require('path'); -const webpack = require('webpack'); const { merge } = require('webpack-merge'); const common = require('./webpack.common'); @@ -33,10 +32,5 @@ module.exports = merge(common, { entry: { 'openmct-yamcs': path.resolve(projectRootDir, 'src/plugin.js') }, - plugins: [ - new webpack.DefinePlugin({ - __OPENMCT_YAMCS_ROOT_RELATIVE__: `""` - }) - ], devtool: 'source-map' }); From e001145eae43804dbaf038ce648708c09e6b2160 Mon Sep 17 00:00:00 2001 From: Jamie V Date: Mon, 11 Dec 2023 15:55:17 -0800 Subject: [PATCH 44/44] cleaning up --- .webpack/webpack.dev.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.webpack/webpack.dev.js b/.webpack/webpack.dev.js index 11718abf..236f8d3e 100644 --- a/.webpack/webpack.dev.js +++ b/.webpack/webpack.dev.js @@ -21,7 +21,6 @@ *****************************************************************************/ const path = require('path'); -const webpack = require('webpack'); const { merge } = require('webpack-merge'); const common = require('./webpack.common'); const projectRootDir = path.resolve(__dirname, '..');