Receive asynchronous data in javascript









up vote
2
down vote

favorite












I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.



I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:



Bash script:



#!/bin/bash
stty -F /dev/ttyS1 115200 -echo
echo "Receiver is listening..."

file="/dev/ttyS1"

while read -r line; do
echo "$line"
target=$line:0:1
echo "$target"
if [ "$target" = "C" ]; then
echo "$line#?" > /tmp/file1
elif [ "$target" = "D" ]; then
echo "$line#?" > /tmp/file2
fi
done < "$file"


QML/JS:



function request(url, callback) 
var xhr = new XMLHttpRequest();
var timer = Qt.createQmlObject("import QtQuick 1.1; Timer interval: 500; repeat: false; running: true;", root, "TimerTimeout");

timer.triggered.connect(function()
xhr.abort();
_timeout = true
);

xhr.onreadystatechange = function()
if (xhr.readyState === 4)
timer.running = false;
timer.destroy();
_timeout = false
callback(xhr.responseText);

;

xhr.open("GET", url, true);
xhr.send();



but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.



I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:



echo "Hello world!" > /dev/udp/192.168.1.10/6188


but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?










share|improve this question























  • The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
    – folibis
    Nov 11 at 14:22










  • As said, there are no compilers. Otherwise there were no problems at all!
    – Mark
    Nov 11 at 14:24










  • Just out of interest, how Qt was compiled for the platform?
    – folibis
    Nov 11 at 14:26










  • The manufacturer built a Yocto environment and cross-compiled Qt.
    – Mark
    Nov 11 at 14:31










  • I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
    – folibis
    Nov 11 at 15:34















up vote
2
down vote

favorite












I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.



I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:



Bash script:



#!/bin/bash
stty -F /dev/ttyS1 115200 -echo
echo "Receiver is listening..."

file="/dev/ttyS1"

while read -r line; do
echo "$line"
target=$line:0:1
echo "$target"
if [ "$target" = "C" ]; then
echo "$line#?" > /tmp/file1
elif [ "$target" = "D" ]; then
echo "$line#?" > /tmp/file2
fi
done < "$file"


QML/JS:



function request(url, callback) 
var xhr = new XMLHttpRequest();
var timer = Qt.createQmlObject("import QtQuick 1.1; Timer interval: 500; repeat: false; running: true;", root, "TimerTimeout");

timer.triggered.connect(function()
xhr.abort();
_timeout = true
);

xhr.onreadystatechange = function()
if (xhr.readyState === 4)
timer.running = false;
timer.destroy();
_timeout = false
callback(xhr.responseText);

;

xhr.open("GET", url, true);
xhr.send();



but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.



I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:



echo "Hello world!" > /dev/udp/192.168.1.10/6188


but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?










share|improve this question























  • The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
    – folibis
    Nov 11 at 14:22










  • As said, there are no compilers. Otherwise there were no problems at all!
    – Mark
    Nov 11 at 14:24










  • Just out of interest, how Qt was compiled for the platform?
    – folibis
    Nov 11 at 14:26










  • The manufacturer built a Yocto environment and cross-compiled Qt.
    – Mark
    Nov 11 at 14:31










  • I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
    – folibis
    Nov 11 at 15:34













up vote
2
down vote

favorite









up vote
2
down vote

favorite











I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.



I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:



Bash script:



#!/bin/bash
stty -F /dev/ttyS1 115200 -echo
echo "Receiver is listening..."

file="/dev/ttyS1"

while read -r line; do
echo "$line"
target=$line:0:1
echo "$target"
if [ "$target" = "C" ]; then
echo "$line#?" > /tmp/file1
elif [ "$target" = "D" ]; then
echo "$line#?" > /tmp/file2
fi
done < "$file"


QML/JS:



function request(url, callback) 
var xhr = new XMLHttpRequest();
var timer = Qt.createQmlObject("import QtQuick 1.1; Timer interval: 500; repeat: false; running: true;", root, "TimerTimeout");

timer.triggered.connect(function()
xhr.abort();
_timeout = true
);

xhr.onreadystatechange = function()
if (xhr.readyState === 4)
timer.running = false;
timer.destroy();
_timeout = false
callback(xhr.responseText);

;

xhr.open("GET", url, true);
xhr.send();



but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.



I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:



echo "Hello world!" > /dev/udp/192.168.1.10/6188


but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?










share|improve this question















I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.



I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:



Bash script:



#!/bin/bash
stty -F /dev/ttyS1 115200 -echo
echo "Receiver is listening..."

file="/dev/ttyS1"

while read -r line; do
echo "$line"
target=$line:0:1
echo "$target"
if [ "$target" = "C" ]; then
echo "$line#?" > /tmp/file1
elif [ "$target" = "D" ]; then
echo "$line#?" > /tmp/file2
fi
done < "$file"


QML/JS:



function request(url, callback) 
var xhr = new XMLHttpRequest();
var timer = Qt.createQmlObject("import QtQuick 1.1; Timer interval: 500; repeat: false; running: true;", root, "TimerTimeout");

timer.triggered.connect(function()
xhr.abort();
_timeout = true
);

xhr.onreadystatechange = function()
if (xhr.readyState === 4)
timer.running = false;
timer.destroy();
_timeout = false
callback(xhr.responseText);

;

xhr.open("GET", url, true);
xhr.send();



but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.



I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:



echo "Hello world!" > /dev/udp/192.168.1.10/6188


but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?







javascript bash udp qml ipc






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 11 at 14:24

























asked Nov 11 at 13:35









Mark

1,06311431




1,06311431











  • The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
    – folibis
    Nov 11 at 14:22










  • As said, there are no compilers. Otherwise there were no problems at all!
    – Mark
    Nov 11 at 14:24










  • Just out of interest, how Qt was compiled for the platform?
    – folibis
    Nov 11 at 14:26










  • The manufacturer built a Yocto environment and cross-compiled Qt.
    – Mark
    Nov 11 at 14:31










  • I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
    – folibis
    Nov 11 at 15:34

















  • The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
    – folibis
    Nov 11 at 14:22










  • As said, there are no compilers. Otherwise there were no problems at all!
    – Mark
    Nov 11 at 14:24










  • Just out of interest, how Qt was compiled for the platform?
    – folibis
    Nov 11 at 14:26










  • The manufacturer built a Yocto environment and cross-compiled Qt.
    – Mark
    Nov 11 at 14:31










  • I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
    – folibis
    Nov 11 at 15:34
















The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22




The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22












As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24




As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24












Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26




Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26












The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31




The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31












I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34





I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34


















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249277%2freceive-asynchronous-data-in-javascript%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249277%2freceive-asynchronous-data-in-javascript%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

How to read a connectionString WITH PROVIDER in .NET Core?

Node.js Script on GitHub Pages or Amazon S3

Museum of Modern and Contemporary Art of Trento and Rovereto