Получать асинхронные данные в JavaScript - PullRequest
0 голосов
/ 11 ноября 2018

Я использую встроенное устройство Linux, которое может запускать только элементы QML / Javascript. нет доступных компиляторов, нет Python, нет curl, нет Node.js, нет менеджеров пакетов ... Но я могу писать сценарии bash.

Мне нужно отправить асинхронные данные из bash-скрипта в объекты QML / JS. До сих пор я делал наоборот: JS читает файл, созданный из скрипта bash:

Скрипт Bash:

#!/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();
}

но это бесполезно для асинхронных данных, потому что из-за времени опроса я могу что-то потерять или получить дубликат уже прочитанного материала.

Я ищу другой способ отправки байтов из скрипта bash в элементы QML / JS. Я могу отправлять UDP-пакеты от bash:

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

но я не знаю, как получить их в JS. Есть ли другие способы достижения той же цели?

...