diff --git a/app/src/lib/filesystem/chunkedTransfer.ts b/app/src/lib/filesystem/chunkedTransfer.ts index 7dfc067..7fa763b 100644 --- a/app/src/lib/filesystem/chunkedTransfer.ts +++ b/app/src/lib/filesystem/chunkedTransfer.ts @@ -343,8 +343,7 @@ export class FileSystemClient { this.activeUploads.set(transferId, upload) - // Stream chunks one at a time, waiting for each to be sent - ;(async () => { + // Stream all chunks without waiting for ACKs for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) { const offset = chunkIndex * chunkSize const end = Math.min(offset + chunkSize, fileSize) @@ -356,12 +355,12 @@ export class FileSystemClient { data: chunkData } - // Wait for chunk to be sent before continuing - await socket.emit(FSMessages.FSUploadData, uploadData) + // Send chunk as fire-and-forget message + socket.emit(FSMessages.FSUploadData, uploadData) upload.chunksSent++ - // Report progress after chunk is actually sent + // Report progress if (onProgress) { onProgress({ transferId, @@ -376,7 +375,6 @@ export class FileSystemClient { // All chunks sent - now wait for completion message from server // The timeout will handle if server doesn't respond - })() }) } diff --git a/app/src/lib/stores/socket.ts b/app/src/lib/stores/socket.ts index 0148fcf..dd4d2d9 100644 --- a/app/src/lib/stores/socket.ts +++ b/app/src/lib/stores/socket.ts @@ -198,27 +198,12 @@ function createWebSocket() { unresponsiveTimeoutId = setTimeout(() => disconnect('unresponsive'), reconnectTimeoutTime) } - function emit(event: MessageFns, data: T): Promise { - return new Promise((resolve) => { - if (!ws || ws.readyState !== WebSocket.OPEN) { - resolve() - return - } - const type = getNameFromMessageType(event) - const wsm = Message.create() as Record - wsm[type] = data - send(wsm as Message) - - // Wait for buffer to flush before resolving - const checkBuffer = () => { - if (!ws || ws.bufferedAmount === 0) { - resolve() - } else { - setTimeout(checkBuffer, 5) - } - } - checkBuffer() - }) + function emit(event: MessageFns, data: T) { + if (!ws || ws.readyState !== WebSocket.OPEN) return + const type = getNameFromMessageType(event) + const wsm = Message.create() as Record + wsm[type] = data + send(wsm as Message) } function unsubscribeToMessageFromServer(event_type: MessageFns) {