diff --git a/confetti-box/src/lib.rs b/confetti-box/src/lib.rs index 18bbf59..c85053e 100644 --- a/confetti-box/src/lib.rs +++ b/confetti-box/src/lib.rs @@ -307,7 +307,7 @@ pub async fn websocket_upload( hasher.update(&message); - stream.send(rocket_ws::Message::Text(json::serde_json::ser::to_string(&offset).unwrap())).await.unwrap(); + stream.send(rocket_ws::Message::binary(offset.to_le_bytes().as_slice())).await.unwrap(); file.write_all(&message).await.unwrap(); @@ -347,6 +347,7 @@ pub async fn websocket_upload( file.flush().await.unwrap(); stream.send(rocket_ws::Message::Text(json::serde_json::ser::to_string(&constructed_file).unwrap())).await?; + stream.close(None).await?; Ok(()) }))) diff --git a/confetti-box/web/request.js b/confetti-box/web/request.js index 1d95f0e..afbcce0 100644 --- a/confetti-box/web/request.js +++ b/confetti-box/web/request.js @@ -220,6 +220,7 @@ async function uploadFileWebsocket(file, duration, maxSize) { new_uri += "//" + loc.host; new_uri += "/upload/websocket?name=" + file.name +"&size=" + file.size + "&duration=" + parseInt(duration); const socket = new WebSocket(new_uri); + socket.binaryType = "arraybuffer"; const chunkSize = 5_000_000; socket.addEventListener("open", (_event) => { @@ -235,14 +236,18 @@ async function uploadFileWebsocket(file, duration, maxSize) { return new Promise(function(resolve, _reject) { socket.addEventListener("message", (event) => { - const response = JSON.parse(event.data); - if (response.mmid == null) { - const progress = parseInt(response); + if (event.data instanceof ArrayBuffer) { + const view = new DataView(event.data); + console.log(view.getBigUint64(0, true)); + const progress = parseInt(view.getBigUint64(0, true)); uploadProgressWebsocket(progress, progressBar, progressText, file.size); } else { // It's so over - socket.close(); + if (!socket.CLOSED) { + socket.close(); + } + const response = JSON.parse(event.data); uploadComplete(response, 200, progressBar, progressText, linkRow); resolve(); }