import { decodeBinary } from 'socket-serve/utils/binary';
import fs from 'fs';
const uploads = new Map();
server.onMessage('upload:start', async (socket, { name, size }) => {
const uploadId = socket.id;
uploads.set(uploadId, {
name,
size,
received: 0,
stream: fs.createWriteStream(`./uploads/${name}`)
});
});
server.onMessage('upload:chunk', async (socket, { data, offset }) => {
const upload = uploads.get(socket.id);
if (!upload) return;
const buffer = decodeBinary(data);
upload.stream.write(buffer);
upload.received += buffer.length;
const progress = Math.round((upload.received / upload.size) * 100);
await socket.emit('upload:progress', progress);
});
server.onMessage('upload:complete', async (socket, { name }) => {
const upload = uploads.get(socket.id);
if (!upload) return;
upload.stream.end();
uploads.delete(socket.id);
await socket.emit('upload:success', {
name,
size: upload.received
});
});