diff --git a/package-lock.json b/package-lock.json index 987f269b7b6aaf27fa70d070a8892c440a3caa51..5b032157273a231574f175f8621d0e3aaadb8526 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2055,6 +2055,60 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.2.tgz", "integrity": "sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==" }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, "@restart/context": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", @@ -2565,6 +2619,11 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, "@types/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", @@ -7489,11 +7548,6 @@ "slash": "^3.0.0" } }, - "google-closure-library": { - "version": "20220104.0.0", - "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20220104.0.0.tgz", - "integrity": "sha512-gHrIxIKcnn9pR/8sVwCLH6C4urmAekSYZKYzTawKG72HQsRnadXOCuRTA+kf6nagDCbsu6HzhSWA2rMBb2L1Aw==" - }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", @@ -10711,6 +10765,11 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13332,6 +13391,26 @@ "warning": "^4.0.0" } }, + "protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", diff --git a/package.json b/package.json index 02d0c98a3056a4a4308cc107b6715ce6dee9f5cb..23c65b4108e39e1201851ae0671e51a9ba4f1900 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,11 @@ "@material-ui/lab": "4.0.0-alpha.57", "bootstrap": "4.5", "flexlayout-react": "0.5.5", - "google-closure-library": "20220104.0.0", "jquery": "3.6.0", "jszip": "3.2.0", "mqtt": "4.3.5", "nrp-jsproto": "1.1.1-alpha.10", + "protobufjs": "6.11.2", "react": "^17.0.1", "react-bootstrap": "1.4.0", "react-dom": "^17.0.1", diff --git a/public/index.html b/public/index.html index 0224056df00f35dc103cad4c52b77d11ac89b311..085cd72cda9d020d8f30011148826ae48aeb9571 100644 --- a/public/index.html +++ b/public/index.html @@ -28,7 +28,6 @@ <title>Neurorobotics Platform</title> </head> <body> - <script src="./google-closure-library/closure/goog/base.js"></script> <script src="https://iam.ebrains.eu/auth/js/keycloak.js"></script> <noscript>You need to enable JavaScript to run this app.</noscript> diff --git a/src/components/entry-page/entry-page.js b/src/components/entry-page/entry-page.js index d6302feb7689ba2aa07c71e453478554da349a16..d74877e6347df4f25700478bf19f3f4f29ede281 100644 --- a/src/components/entry-page/entry-page.js +++ b/src/components/entry-page/entry-page.js @@ -4,6 +4,7 @@ import NrpHeader from '../nrp-header/nrp-header.js'; import './entry-page.css'; import PlaceholderImage from '../../assets/images/Artificial_Intelligence_2.jpg'; +import NrpCoreDashboard from '../nrp-core-dashboard/nrp-core-dashboard.js'; export default class EntryPage extends React.Component { render() { @@ -28,6 +29,10 @@ export default class EntryPage extends React.Component { <p>Experiment 2 Placeholder</p> </div> <div className='sidebar-right'></div> + <div> + <div><b>!!! NRP Core testing !!!</b></div> + </div> + <NrpCoreDashboard /> </div> ); } diff --git a/src/components/nrp-core-dashboard/nrp-core-dashboard.js b/src/components/nrp-core-dashboard/nrp-core-dashboard.js index 108037b7485fa5b3bc17156c94c2b2e91545be55..5b39b848c5955b7e30ea85bac261ec3095f3286c 100644 --- a/src/components/nrp-core-dashboard/nrp-core-dashboard.js +++ b/src/components/nrp-core-dashboard/nrp-core-dashboard.js @@ -14,8 +14,8 @@ export default class NrpCoreDashboard extends React.Component { MqttClientService.instance.connect(this.mqttBrokerUrl); } - onMqttClientConnected() { - this.client.subscribe('#', (err) => { + onMqttClientConnected(mqttClient) { + mqttClient.subscribe('#', (err) => { if (err) { console.error(err); } diff --git a/src/services/nrp-core/mqtt-client-service.js b/src/services/nrp-core/mqtt-client-service.js index 06ac19ee02c710f4d546243a599313dc8621870d..890bb0c8045ea1ebf377c5ab4c1e4e9fb6145259 100644 --- a/src/services/nrp-core/mqtt-client-service.js +++ b/src/services/nrp-core/mqtt-client-service.js @@ -1,7 +1,7 @@ import mqtt from 'mqtt'; import { EventEmitter } from 'events'; -import 'nrp-jsproto/nrp-jsproto'; +import * as proto from 'nrp-jsproto/nrp-engine_msgs-protobufjs'; 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() { @@ -33,6 +33,7 @@ export default class MqttClientService extends EventEmitter { this.client.on('connect', () => { console.info('... MQTT connected'); console.info(this.client); + this.emit(MqttClientService.EVENTS.CONNECTED, this.client); }); this.client.on('error', this.onError); this.client.on('message', this.onMessage); @@ -46,9 +47,20 @@ export default class MqttClientService extends EventEmitter { console.info('MQTT message: [topic, payload, packet]'); console.info([topic, payload, packet]); - /*try { - let dump = - }*/ + 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); + } } }