Как получить данные с плавающей запятой через веб-сокет в машинописи - PullRequest
0 голосов
/ 06 декабря 2018

Я понимаю, что нет способа легко отправлять и получать плавающие так же, как для строк.Однако, если я настрою свой веб-сокет так:

ws = new WebSocket(address);
ws.binaryType = 'blob';

, я смогу преобразовать входящие строки байтов в числа с плавающей точкой.Конвертировать поплавки в байтовые строки и отправить их на сервер очень просто.

Ближайший ответ, который я смог найти, был this .Однако я обнаружил, что e.target.result не определено.Я попытался просто использовать e.target, но компилятор выдал ошибку типа, которую я не мог понять, как исправить.

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

ws.onmessage = function(event){
  //do something with event.data
}

Мне нужно понять, как работать с event.data, когда это не просто строка, как это здесь .

1 Ответ

0 голосов
/ 10 декабря 2018

После адаптации этого ответа и этого ответа я нашел следующее решение:

//open the socket and set the data type to blob
let socket = new WebSocket(address);
socket.binaryType = 'blob';

//we will store 6 positions at a time
let positions = new Float32Array(18);

//helpers
let buffer = new ArrayBuffer(4);
let view = new DataView(buffer);

//say hello
socket.onopen = function(){
  socket.send('Hello');
};

//keep track of where we are in the position array
let posIndex = 0;

socket.onmessage = function(msg){
  //convert message to Uint8 array
  let bitArray = new Uint8Array(msg.data);
  for(let i = 0; i < 3; i++){
    for(let j = 0; j < 4; j++){
      //set the elements of the DataView equal to the bytes
      view.setUint8(j, bitArray[4*i + j]);
    }

    //update the positions
    if(posIndex < 5){
      positions[3*posIndex + i] = view.getFloat32(0);
      posIndex++;
    }
    else positions[15 + i] = view.getFloat32(0);
  }

  //this should log the positions as they come in
  paragraph.innerHTML = paragraph.innerHTML + ",("
                      + positions[posIndex] + ","
                      + positions[posIndex + 1] + ","
                      + positions[posIndex + 2] + ")";

  //the server won't send another position until it hears from the client
  socket.send('r');
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...