From 5a839e7e6a8af8bd85f44b6c991fce57ecdb4be3 Mon Sep 17 00:00:00 2001
From: Sandro Weber <webers@in.tum.de>
Date: Mon, 21 Feb 2022 14:05:49 +0100
Subject: [PATCH] testing with protobufjs until protoc compiled with
 import_type=commonjs

---
 package-lock.json                             | 89 +++++++++++++++++--
 package.json                                  |  2 +-
 public/index.html                             |  1 -
 src/components/entry-page/entry-page.js       |  5 ++
 .../nrp-core-dashboard/nrp-core-dashboard.js  |  4 +-
 src/services/nrp-core/mqtt-client-service.js  | 22 +++--
 6 files changed, 109 insertions(+), 14 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 987f269..5b03215 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 02d0c98..23c65b4 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 0224056..085cd72 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 d6302fe..d74877e 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 108037b..5b39b84 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 06ac19e..890bb0c 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);
+    }
   }
 }
 
-- 
GitLab