aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/NeoRuntimeManager/IPC.js19
-rw-r--r--src/NeoRuntimeManager/index.js17
-rw-r--r--src/SocketIO/index.js11
3 files changed, 44 insertions, 3 deletions
diff --git a/src/NeoRuntimeManager/IPC.js b/src/NeoRuntimeManager/IPC.js
index 79ce7ea..6428a13 100644
--- a/src/NeoRuntimeManager/IPC.js
+++ b/src/NeoRuntimeManager/IPC.js
@@ -19,7 +19,8 @@ const GLOBVAR = Object.freeze({POWER_ON : 0,
BRIGHTNESS: 1});
/** @type {Object} ENUM-ish for what type of data neoruntime sends */
const DATATYPE = Object.freeze({STATES : 1,
- STRIP_BUF: 2});
+ STRIP_BUF: 2,
+ MATRIX: 3});
/**
* class that will keep a active connection to a socket if possible, and
@@ -66,9 +67,9 @@ class IPC {
this.connected = true;
})
.on('data', (data) => {
+ let json_data;
switch (data[0]) {
case DATATYPE.STATES:
- let json_data;
try {
json_data = JSON.parse(data.toString("ascii", 1));
} catch (e) {
@@ -89,6 +90,20 @@ class IPC {
this.variables = json_data["variables"];
}
break;
+
+ case DATATYPE.MATRIX:
+ try {
+ json_data = JSON.parse(data.toString("ascii", 1));
+ } catch (e) {
+ logger.warning("Could not parse json data from neoruntime");
+ console.log(e);
+ }
+ this.eventEmitter.emit("matrix", json_data);
+ break;
+
+ case DATATYPE.STRIP_BUF:
+ this.eventEmitter.emit("strip_buffer", Array.from(data.values()).slice(1));
+ break;
default:
logger.info(data);
diff --git a/src/NeoRuntimeManager/index.js b/src/NeoRuntimeManager/index.js
index 4377b8a..7fc117a 100644
--- a/src/NeoRuntimeManager/index.js
+++ b/src/NeoRuntimeManager/index.js
@@ -29,8 +29,13 @@ const eventEmitter = new EventEmitter();
let modeDebuggerActive = false;
/** @type {string} Should be the modeId the debugger is attached to */
let modeDebuggerId = null;
+/** @type {object} Handler for proc:start when debugger is active */
+let modeDebuggerProcStartHandler;
+/** @type {object} The last received matrix setup */
+let matrix = null;
eventEmitter.on("proc:exit", (code) => modeExitCode = code);
+eventEmitter.on("matrix", (_matrix) => matrix = _matrix);
/**
* Check if a path id actually a mode (if it is a folder with a script.py file)
@@ -248,6 +253,13 @@ function startDebugger(debuggerModeId) {
if (!isMode(getModePath(debuggerModeId))) { return {success: false, reason: "unknown modeId"}; }
if (modeDebuggerActive) { return {success: false, reason: "debugger already active"}; }
logger.info(`Starting debugger for ${debuggerModeId}`);
+
+ modeDebuggerProcStartHandler = eventEmitter.on("proc:start", () => {
+ setTimeout(() => {
+ ipc.sendCommand(IPC.COMMAND.SET_SEND_STRIP_BUF, true);
+ }, 500);
+ });
+
modeDebuggerActive = true;
modeDebuggerId = debuggerModeId;
if (debuggerModeId != modeId) {
@@ -277,6 +289,8 @@ function stopDebugger() {
if (!modeDebuggerActive) { return {success: true, detail: "No debugger active"} }
logger.info(`Stopping debugger`);
modeDebuggerActive = false;
+ eventEmitter.removeAllListeners("proc:start", modeDebuggerProcStartHandler);
+ ipc.sendCommand(IPC.COMMAND.SET_SEND_STRIP_BUF, false);
return {success: true}
}
@@ -306,6 +320,7 @@ module.exports = (_neoModules) => {
isMode,
modeRunning,
startDebugger, stopDebugger, saveModeCode,
- startMode, stopMode, restartMode
+ startMode, stopMode, restartMode,
+ matrix
}
};
diff --git a/src/SocketIO/index.js b/src/SocketIO/index.js
index da140bb..88b5459 100644
--- a/src/SocketIO/index.js
+++ b/src/SocketIO/index.js
@@ -310,6 +310,11 @@ function createAuthorizedNamespace(io) {
logger.info("Stopped debugger");
});
+ /* Matrix and strip buffer */
+ socket.on("matrix:get", () => {
+ socket.emit("matrix", neoModules.neoRuntimeManager.matrix);
+ });
+
socket.on("disconnect", () => {
logger.access(`SOCKET:authed Client (${socket.id}@${socket.handshake.headers.host}) disconnected.`);
if (debuggerOpen) {
@@ -319,6 +324,12 @@ function createAuthorizedNamespace(io) {
});
});
+ neoModules.neoRuntimeManager.event.on("matrix", (matrix) => {
+ authorizedNamespace.emit("matrix", matrix);
+ });
+ neoModules.neoRuntimeManager.event.on("strip_buffer", (strip_buffer) => {
+ authorizedNamespace.emit("strip_buffer", strip_buffer);
+ });
neoModules.selfUpdater.updater.event.on("step", (step) => {
authorizedNamespace.emit("updater:step", step);
});