From 4185f1fcc7e68fec66ce53ea11146da8d5f9ebb7 Mon Sep 17 00:00:00 2001
From: Hadinos Sanosam <hadinos@gmx.ch>
Date: Sat, 9 Jan 2021 04:27:27 +0100
Subject: [PATCH] Improved file transfer

---
 recv_file | 26 ++++++++++++++++---------
 send_file | 58 +++++++++++++++++++++++++++++++++----------------------
 2 files changed, 52 insertions(+), 32 deletions(-)

diff --git a/recv_file b/recv_file
index f78afdc..85e51f8 100644
--- a/recv_file
+++ b/recv_file
@@ -1,22 +1,30 @@
 dofile("/git-scripts/utils")
-modemSide = utils.getSideOf("modem") --get side the modem is on
 
+modemSide = utils.getSideOf("modem") --get side the modem is on
+if modemSide == nil then
+	print("Error: No modem detected!")
+	return
+end
 rednet.open(modemSide)
 
---get message, no timeout
-id, msg, dist = rednet.receive()
-print("Data received!")
+rednet.broadcast("", "fileRX") --notify transmitter that we're ready to receive
 
---get filename
-term.write("Output filename: ")
-name = tostring(read())
+--get message, no timeout
+id, msg, sth = rednet.receive("fileTX")
 
 --decompress string
-content = textutils.unserialize(msg)
+data = textutils.unserialize(msg)
+filename = data.filename
+content = data.content
 
 --write to file
-local file = fs.open(name, "w")
+local file = fs.open(filename, "w")
+if file == nil then
+	print("Error: failed to write file " .. filename)
+	return
+end
 file.write(content)
+print("Received '" .. filename .. "' !") 
 
 --finish up
 file.close()
diff --git a/send_file b/send_file
index 3fe0038..5810ba4 100644
--- a/send_file
+++ b/send_file
@@ -1,36 +1,48 @@
+--import module
 dofile("utils")
 
---init rednet
-modemSide = utils.getSideOf("modem")
-rednet.open(modemSide)
+local function printUsage()
+    print("Usage:")
+    print("send_file <filename> <receiver ID>")
+end
+ 
+local args = { ... }
+if #args < 2 then
+    printUsage()
+    return
+end
 
---get file content into right format
-term.write("Path: ")
-path = tostring(read())
+local filename = args[1]
 local file = fs.open(path, "r")
 if file == nil then
-	print("File does not exist!")
+	print("Error: File not found")
 	return
 end
 content = file.readAll()
-data = textutils.serialize(content)
+local data = {} --pack filename, content
+data.filename = filename
+data.content = content
+data = textutils.serialize(data) --convert to string
+file.close()
+local receiver = args[2]
 
---get receiver
-term.write("Receiver id: ")
-id = tonumber(read())
-
-print("Initialize receiver please!")
-print("Press 's' to send")
-
---wait for button press
-local event, c = os.pullEvent("char")
-if c == "s" then
-    print("Sending...")
-    print(id)
-    rednet.send(id, data)
-else
-    print("Aborted.")
+--init rednet
+modemSide = utils.getSideOf("modem")
+if modemSide == nil then
+	print("Error: No modem detected!")
+	return
 end
+rednet.open(modemSide)
+
+print("Waiting for receiver...")
+id, msg, sth = rednet.receive("fileXfer")
+while id != receiver do
+	id, msg, sth = rednet.receive("fileRX") --keep waiting
+end
+
+--receiver is online!
+rednet.send(id, data, "fileTX")
+print("Sent!")
 
 --finish up
 rednet.close(modemSide)