diff --git a/package-lock.json b/package-lock.json index 5b032157273a231574f175f8621d0e3aaadb8526..e9b37333452f49bd17ee3b46dec3ecabf28d71f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11634,9 +11634,9 @@ } }, "nrp-jsproto": { - "version": "1.1.1-alpha.10", - "resolved": "https://registry.npmjs.org/nrp-jsproto/-/nrp-jsproto-1.1.1-alpha.10.tgz", - "integrity": "sha512-KFe2AQuhtx4wD76PIzxlhKFXtWYeUtyqSkONA8nYvIV9HfG67q09Qcnzhl745jZHZHZMC03xj9QVEr0x5so8Cg==" + "version": "1.1.1-alpha.20", + "resolved": "https://registry.npmjs.org/nrp-jsproto/-/nrp-jsproto-1.1.1-alpha.20.tgz", + "integrity": "sha512-n39H3PBdhA+ojWIRe43ZcSJEZeogGZ91o5beHKrLdbbjNGcduOAzUS75AYE2hQ0YbOWtGwNVDQL9LGHK0LZugQ==" }, "nth-check": { "version": "1.0.2", diff --git a/package.json b/package.json index 23c65b4108e39e1201851ae0671e51a9ba4f1900..c992410e816558c807d4fb1748a5f1f9c65d4960 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "jquery": "3.6.0", "jszip": "3.2.0", "mqtt": "4.3.5", - "nrp-jsproto": "1.1.1-alpha.10", + "nrp-jsproto": "1.1.1-alpha.20", "protobufjs": "6.11.2", "react": "^17.0.1", "react-bootstrap": "1.4.0", diff --git a/src/components/nrp-core-dashboard/nrp-core-dashboard.js b/src/components/nrp-core-dashboard/nrp-core-dashboard.js index ee0b7adb3ded787acf89a330c583f9dc723552a0..f2072310ab9c0215a39203ca798d10f01a68dee6 100644 --- a/src/components/nrp-core-dashboard/nrp-core-dashboard.js +++ b/src/components/nrp-core-dashboard/nrp-core-dashboard.js @@ -1,6 +1,8 @@ +import { DomainDisabledOutlined } from '@material-ui/icons'; import React from 'react'; import MqttClientService from '../../services/mqtt-client-service'; +import ExperimentStorageService from '../../services/experiments/files/experiment-storage-service'; export default class NrpCoreDashboard extends React.Component { constructor(props) { @@ -22,10 +24,18 @@ export default class NrpCoreDashboard extends React.Component { }); } + async triggerProxyScanStorage() { + let result = await ExperimentStorageService.instance.scanStorage(); + console.info('triggerProxyScanStorage:'); + console.info(result); + } + render() { return ( <div> {this.mqttBrokerUrl} + <br /> + <button onClick={this.triggerProxyScanStorage}>Proxy Scan Storage</button> </div> ); } diff --git a/src/services/experiments/files/experiment-storage-service.js b/src/services/experiments/files/experiment-storage-service.js index ac20e1a442fb67f751a645406d7390bc3425e2f0..d2957fcc8a01084ff32654d2e0bf5a21aae88e9b 100644 --- a/src/services/experiments/files/experiment-storage-service.js +++ b/src/services/experiments/files/experiment-storage-service.js @@ -5,8 +5,11 @@ import endpoints from '../../proxy/data/endpoints.json'; import config from '../../../config.json'; import DialogService from '../../dialog-service.js'; -const storageURL = `${config.api.proxy.url}${endpoints.proxy.storage.url}`; -const storageExperimentsURL = `${config.api.proxy.url}${endpoints.proxy.storage.experiments.url}`; +const PROXY_URL = config.api.proxy.url; +const SCAN_STORAGE_URL = `${PROXY_URL}${endpoints.proxy.storage.scanStorage.url}`; +const storageURL = `${PROXY_URL}${endpoints.proxy.storage.url}`; +const storageExperimentsURL = `${PROXY_URL}${endpoints.proxy.storage.experiments.url}`; + let _instance = null; const SINGLETON_ENFORCER = Symbol(); @@ -71,6 +74,7 @@ class ExperimentStorageService extends HttpService { if (!this.experiments || forceUpdate) { try { let experimentList = await (await this.httpRequestGET(storageExperimentsURL)).json(); + console.info(['ExperimentStorageService.getExperiments()', experimentList]); // filter out experiments with incomplete configuration (probably storage corruption) experimentList = experimentList.filter(experiment => experiment.configuration.experimentFile); this.sortExperiments(experimentList); @@ -275,6 +279,14 @@ class ExperimentStorageService extends HttpService { 'please make sure that the contentType and the body type match.'); } } + + /** + * Trigger proxy to scan storage. + * @returns {promise} Result + */ + async scanStorage() { + return await (await this.httpRequestPOST(SCAN_STORAGE_URL)).json(); + } } ExperimentStorageService.EVENTS = Object.freeze({ diff --git a/src/services/mqtt-client-service.js b/src/services/mqtt-client-service.js index 890bb0c8045ea1ebf377c5ab4c1e4e9fb6145259..ce09aa079385307634bda4ffd27c9d99c588cdaf 100644 --- a/src/services/mqtt-client-service.js +++ b/src/services/mqtt-client-service.js @@ -1,7 +1,7 @@ import mqtt from 'mqtt'; import { EventEmitter } from 'events'; -import * as proto from 'nrp-jsproto/nrp-engine_msgs-protobufjs'; +//import * as proto from 'nrp-jsproto/engine_grpc_pb'; let _instance = null; const SINGLETON_ENFORCER = Symbol(); @@ -16,7 +16,7 @@ export default class MqttClientService extends EventEmitter { throw new Error('Use ' + this.constructor.name + '.instance'); } - console.info(proto); + //console.info(proto); } static get instance() { @@ -47,20 +47,9 @@ export default class MqttClientService extends EventEmitter { console.info('MQTT message: [topic, payload, packet]'); console.info([topic, payload, packet]); - try { - if (topic.endsWith('/type')) { - let msg = String(payload); - console.info('"' + topic + '" message format = ' + msg); - } - else { - let msg = proto.Engine.DataPackMessage.decode(payload); - console.info('DataPackMessage'); - console.info(msg); - } - } - catch (error) { - console.error(error); - } + // step 0: deserialize the payload => messageData + // step 1: pick subs based on topic => subs + // step 2: foreach(sub) {sub.callback(messageData, topic);} } }