diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c98b24..bfa101a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# v1.1.8 +- You can now use SD WebSocket in multi-actions + # v1.1.7 - Properly release unused connections diff --git a/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/manifest.json b/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/manifest.json index 9488eef..e1a7f62 100644 --- a/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/manifest.json +++ b/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/manifest.json @@ -31,7 +31,7 @@ "Name": "WebSocket Proxy", "Icon": "images/websocket", "SDKVersion": 2, - "Version": "1.1.7", + "Version": "1.1.8", "PropertyInspectorPath": "plugin/inspector.html", "OS": [ { diff --git a/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/plugin/index.js b/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/plugin/index.js index 4ec5ff9..6be9452 100644 --- a/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/plugin/index.js +++ b/Sources/org.tynsoe.streamdeck.wsproxy.sdPlugin/plugin/index.js @@ -138,6 +138,18 @@ function connect(remoteServer,position,message,backend_only=false) { } } +var oneEventConnections = [] +function sendOneEvent(remoteServer,message) { + var c = new WebSocket(remoteServer) + oneEventConnections.push(c) + c.onopen = function(evt) { + console.log("Remote multi-action socket opened") + c.send(JSON.stringify(message)) + c.close() + delete oneEventConnections[c] + } +} + /* Disconnects a websocket @@ -195,10 +207,16 @@ function connectElgatoStreamDeckSocket(inPort, inPluginUUID, inRegisterEvent, in var jsonObj = JSON.parse(evt.data); var event = jsonObj['event']; - + + var jsonPayload = jsonObj['payload']; + var isInMultiAction = null + + if (jsonPayload && jsonPayload.hasOwnProperty("isInMultiAction") && jsonPayload['isInMultiAction']) { + isInMultiAction = jsonPayload['isInMultiAction'] + } + if(event == "didReceiveSettings") { - var jsonPayload = jsonObj['payload']; var settings = jsonPayload['settings']; var coordinates = jsonPayload['coordinates']; @@ -210,11 +228,18 @@ function connectElgatoStreamDeckSocket(inPort, inPluginUUID, inRegisterEvent, in */ else if(event == "willAppear") { - var jsonPayload = jsonObj['payload']; var settings = jsonPayload['settings']; var coordinates = jsonPayload['coordinates']; + if (settings.hasOwnProperty("remoteServer")) { - connect(settings.remoteServer,positionFromCoordinates(coordinates),jsonObj) + // Multiactions are treated as one-offs and have short lived dedicated + // connections + if (isInMultiAction) { + sendOneEvent(settings.remoteServer,jsonObj) + } + else { + connect(settings.remoteServer,positionFromCoordinates(coordinates),jsonObj) + } } } /* @@ -223,11 +248,14 @@ function connectElgatoStreamDeckSocket(inPort, inPluginUUID, inRegisterEvent, in */ else if(event == "willDisappear") { - var jsonPayload = jsonObj['payload']; var settings = jsonPayload['settings']; var coordinates = jsonPayload['coordinates']; - - disconnect(settings.remoteServer,positionFromCoordinates(coordinates),jsonObj) + if (isInMultiAction) { + sendOneEvent(settings.remoteServer,jsonObj) + } + else { + disconnect(settings.remoteServer,positionFromCoordinates(coordinates),jsonObj) + } } /* Every other message is simply forwarded to node-red, the condition is @@ -237,11 +265,16 @@ function connectElgatoStreamDeckSocket(inPort, inPluginUUID, inRegisterEvent, in else if (jsonObj.hasOwnProperty("payload")) { if (jsonObj['payload'].hasOwnProperty("settings")) { key = jsonObj['payload']['settings']['remoteServer'] - if (connections.hasOwnProperty(key)) { - c=connections[key].websocket - if (c && c.readyState == 1) { - console.log(jsonObj) - c.send(JSON.stringify(jsonObj)) + if (isInMultiAction) { + sendOneEvent(key,jsonObj) + } + else { + if (connections.hasOwnProperty(key)) { + c=connections[key].websocket + if (c && c.readyState == 1) { + console.log(jsonObj) + c.send(JSON.stringify(jsonObj)) + } } } }