Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Server Program
- -- Function to find and return the modem peripheral
- local function findModem()
- for _, side in ipairs(peripheral.getNames()) do
- if peripheral.getType(side) == "modem" then
- return side
- end
- end
- return nil
- end
- local modemSide = findModem()
- if not modemSide then
- print("Error: No modem found. Please attach a modem.")
- return
- end
- rednet.open(modemSide)
- local saveDirectory = "DGOS"
- local serverID = os.getComputerID()
- -- Create save directory if it doesn't exist
- if not fs.exists(saveDirectory) then
- fs.makeDir(saveDirectory)
- end
- -- Function to display advanced GUI on the monitor
- local function drawGUI()
- local monitor = peripheral.wrap("right")
- monitor.setTextScale(0.5)
- monitor.setBackgroundColor(colors.black)
- monitor.clear()
- -- Header
- monitor.setCursorPos(1, 1)
- monitor.setTextColor(colors.white)
- monitor.write("Server ID: " .. tostring(serverID))
- -- Status area
- monitor.setCursorPos(1, 3)
- monitor.setBackgroundColor(colors.gray)
- monitor.clearLine()
- monitor.write("Status: ")
- -- Logs area
- monitor.setCursorPos(1, 5)
- monitor.setBackgroundColor(colors.gray)
- monitor.clearLine()
- monitor.write("Logs:")
- end
- -- Function to update status in GUI
- local function updateStatus(status)
- local monitor = peripheral.wrap("right")
- monitor.setCursorPos(9, 3)
- monitor.setBackgroundColor(colors.gray)
- monitor.clearLine()
- monitor.write(status)
- end
- -- Function to log file transfer in GUI
- local function logTransfer(fileName, success)
- local monitor = peripheral.wrap("right")
- monitor.setCursorPos(1, 7)
- monitor.setTextColor(colors.white)
- monitor.setBackgroundColor(colors.black)
- monitor.clearLine()
- monitor.write(string.format("File: %s | Status: %s", fileName, success and "Success" or "Failure"))
- end
- -- Function to display file details and await confirmation
- local function confirmFileTransfer(fileName, fileContent)
- local monitor = peripheral.wrap("right")
- monitor.clear()
- monitor.setCursorPos(1, 1)
- monitor.write("Incoming file:")
- monitor.setCursorPos(1, 3)
- monitor.write("Name: " .. fileName)
- monitor.setCursorPos(1, 4)
- monitor.write("Size: " .. string.len(fileContent) .. " bytes")
- monitor.setCursorPos(1, 5)
- monitor.write("[Confirm]")
- monitor.setCursorPos(1, 6)
- monitor.write("[Decline]")
- while true do
- local event, side, x, y = os.pullEvent("monitor_touch")
- if y == 5 then
- return true
- elseif y == 6 then
- return false
- end
- end
- end
- -- Function to handle displaying critical information
- local function displayCriticalInformation(criticalMessage)
- print("Critical Error: " .. criticalMessage)
- local monitor = peripheral.wrap("right")
- monitor.setCursorPos(1, 9)
- monitor.setBackgroundColor(colors.red)
- monitor.clearLine()
- monitor.setTextColor(colors.white)
- monitor.write("Critical: " .. criticalMessage)
- end
- -- Initialize GUI
- drawGUI()
- -- Main loop to receive messages
- while true do
- local senderID, message, protocol = rednet.receive()
- if protocol == "file_transfer" then
- print("Received file from ID: " .. senderID)
- if type(message) == "table" and message.fileName and message.fileContent then
- -- Display file details and wait for confirmation
- local confirmed = confirmFileTransfer(message.fileName, message.fileContent)
- if confirmed then
- -- Save file if confirmed
- local filePath = fs.combine(saveDirectory, message.fileName)
- local file = fs.open(filePath, "w")
- file.write(message.fileContent)
- file.close()
- print("File saved as " .. message.fileName)
- -- Update GUI
- updateStatus("File received")
- logTransfer(message.fileName, true)
- sleep(2)
- drawGUI()
- -- Send confirmation to client
- rednet.send(senderID, { status = "Accepted" }, "confirmation")
- else
- print("File transfer declined.")
- logTransfer(message.fileName, false)
- updateStatus("File declined")
- sleep(2)
- drawGUI()
- -- Send confirmation to client
- rednet.send(senderID, { status = "Declined" }, "confirmation")
- end
- else
- print("Invalid message received.")
- displayCriticalInformation("Invalid file transfer request.")
- end
- else
- -- Assuming other protocols indicate critical information
- displayCriticalInformation(message)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement