From b8b44075907c184b05bc6d01b32927fb787f76e6 Mon Sep 17 00:00:00 2001 From: WickedJack99 Date: Sat, 6 Apr 2024 21:53:55 +0200 Subject: [PATCH] Added functionality to get file content. --- .../java/vslab1/src/Input/InputThread.java | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/main/java/vslab1/src/Input/InputThread.java b/src/main/java/vslab1/src/Input/InputThread.java index 8c6a54d..7e3e501 100644 --- a/src/main/java/vslab1/src/Input/InputThread.java +++ b/src/main/java/vslab1/src/Input/InputThread.java @@ -12,9 +12,9 @@ import vslab1.src.Peers.Peer; import vslab1.src.Sending.SendingQueue; import vslab1.src.Sending.Data.OnlineStateRequest; import vslab1.src.Sending.Data.PublishFileNameNotification; +import vslab1.src.Sending.Data.PullFileRequest; import vslab1.src.Timeout.JobList; import vslab1.src.Timeout.TimeoutJob; -import vslab1.src.Timeout.TimeoutThread; import java.io.File; import java.nio.file.Files; @@ -119,19 +119,23 @@ public class InputThread extends Thread implements Terminatable { String[] pathParts = inputArgs[1].split(File.separator); String fileName = pathParts[pathParts.length-1]; - // Add file to own list. - Peer thisPeer = FileReaderWriter.getThisPeer(EUpdateFlag.Update); - thisPeer.addFile(fileName, inputArgs[1]); - FileReaderWriter.updatePeer(thisPeer); + if (FileReaderWriter.hasFile(fileName) == null) { + // Add file to own list. + Peer thisPeer = FileReaderWriter.getThisPeer(EUpdateFlag.Update); + thisPeer.addFile(fileName, inputArgs[1]); + FileReaderWriter.updatePeer(thisPeer); - // Notify all peers about file. - List peers = FileReaderWriter.getPeers(); - peers.forEach((peer) -> { - Peer peerObject = (Peer)peer; - if (peerObject.onlineState() == EOnlineState.Online) { - sendingQueue.add(new PublishFileNameNotification(FileReaderWriter.getThisPeer(EUpdateFlag.DoNotUpdate), peerObject, fileName)); - } - }); + // Notify all peers about file. + List peers = FileReaderWriter.getPeers(); + peers.forEach((peer) -> { + Peer peerObject = (Peer)peer; + if (peerObject.onlineState() == EOnlineState.Online) { + sendingQueue.add(new PublishFileNameNotification(FileReaderWriter.getThisPeer(EUpdateFlag.DoNotUpdate), peerObject, fileName)); + } + }); + } else { + System.err.println("Error, file already exists."); + } } } }break; @@ -144,6 +148,17 @@ public class InputThread extends Thread implements Terminatable { // check which peer has file // send get message to that peer // if own file, just print + Peer thisPeer = FileReaderWriter.getThisPeer(EUpdateFlag.DoNotUpdate); + Peer peerThatHasFile = FileReaderWriter.hasFile(inputArgs[1]); + + if (thisPeer.equals(peerThatHasFile)) { + System.out.println("File name: " + inputArgs[1]); + System.out.println("File content: " + FileReaderWriter.getFirstAndLast20Byte(FileReaderWriter.readFile(thisPeer.filesMap().get(inputArgs[1])))); + } else if (peerThatHasFile == null) { + System.err.println("File not found."); + } else { + sendingQueue.add(new PullFileRequest(thisPeer, peerThatHasFile, inputArgs[1])); + } } }break; default: { @@ -161,4 +176,6 @@ public class InputThread extends Thread implements Terminatable { inputThreadRunning = false; this.interrupt(); } + + }