Path: blob/master/src/packages/sync-fs/lib/recv-files.ts
1496 views
/*1Receive files over a websocket.2*/34import getLogger from "@cocalc/backend/logger";5const logger = getLogger("sync-fs:recv-files");67import { spawn } from "child_process";89export default function recvFiles({10ws,11HOME = process.env.HOME,12args,13}: {14ws;15HOME?;16args: string[];17}) {18if (args.length == 0) {19ws.emit("error", "no arguments given");20ws.close();21return;22}23const tar = spawn("tar", args, {24cwd: HOME,25});26let start = Date.now();27logger.debug("got connection", start);28let fileSize = 0;29ws.on("message", (data) => {30if (data instanceof Buffer) {31// logger.debug("received ", data.length, "bytes");32fileSize += data.length;33tar.stdin.write(data);34}35});36ws.on("close", () => {37tar.stdin.end();38let end = Date.now();39let timeTaken = (end - start) / 1000; // convert ms to s40let speed = fileSize / timeTaken / 1000000;41logger.debug(42`recvFiles: ${fileSize / 1000000}MB received in ${43end - start44} ms, speed: ${speed} MB/s`,45);46});47}484950