@Chainsaw2100

WebRTC / Promise — Почему второй клиент получает нули, а не байты?

Здравствуйте, делаю видеочат на базе WebRTC с поддержкой отправки файлов.
Есть асинхронные функции, промисы и т.д.
Сейчас отправляю с одного клиента на другой файл и если он больше опр. числа, он разбивается на чанки (все логично). Сначала берется blob, из него делается arrayBuffer, он и отправляется. Отправляется, вроде, нормально. Посмотрел полученные байты на втором клиенте, вроде ок, но когда я пытаюсь скомпоновать arrayBuffer в blob для второй стороны, получаются одни нули. Грешу на асинхронность. Можете подсказать? Спасибо.

async function convertToArrayBuffer(file) {
const buf = await file.arrayBuffer();
return buf;
};

const shareFile = () => {
if (file) {
const channelLabel = file.name;
for (const [key, value] of Object.entries(mapPeers)) {
const channel = value[1];
channel.binaryType = 'arraybuffer';
let inf = convertToArrayBuffer(file);
inf.then((buf) => {
for (let i = 0; i < buf.byteLength; i += MAXIMUM_MESSAGE_SIZE) {
channel.send(buf.slice(i, i + MAXIMUM_MESSAGE_SIZE));
}
channel.send(END_OF_FILE_MESSAGE);
});
channel.onclose = () => {
closeDialog();
};
}
}
else{
console.log('no file');
}
};

function dcOnMessage(peer, event){
var message = event.data;
if (typeof message === "string" && message != 'EOF'){
var li = document.createElement('li');
li.appendChild(document.createTextNode(message));
messageList.appendChild(li);
} else {
const { data } = event;
try {
if (data !== END_OF_FILE_MESSAGE) {
receivedBuffers.push(data);
} else {
const arrayBuffer = receivedBuffers.reduce((acc, arrayBuffer) => {
const tmp = new Uint8Array(acc.byteLength + arrayBuffer.size);
tmp.set(new Uint8Array(acc), 0);
let inf2 = test(arrayBuffer);
inf2.then((buf) => {
tmp.set(new Uint8Array(buf), acc.byteLength);
});
return tmp;
}, new Uint8Array());
const blob = new Blob([arrayBuffer]);
downloadFile(blob, event.explicitOriginalTarget.label);
receivedBuffers = []
}
} catch (err) {
console.log(err, 'File transfer failed');
}
};
};
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы