diff --git a/src/main/java/vslab1/src/Timeout/JobList.java b/src/main/java/vslab1/src/Timeout/JobList.java new file mode 100644 index 0000000..a4b09e1 --- /dev/null +++ b/src/main/java/vslab1/src/Timeout/JobList.java @@ -0,0 +1,7 @@ +package vslab1.src.Timeout; + +import java.util.LinkedList; + +public class JobList extends LinkedList { + +} diff --git a/src/main/java/vslab1/src/Timeout/TimeoutJob.java b/src/main/java/vslab1/src/Timeout/TimeoutJob.java new file mode 100644 index 0000000..952b891 --- /dev/null +++ b/src/main/java/vslab1/src/Timeout/TimeoutJob.java @@ -0,0 +1,7 @@ +package vslab1.src.Timeout; + +import vslab1.src.Peers.Peer; + +public record TimeoutJob(long currentSystemTimeMillis, Peer peerToWaitFor) { + +} diff --git a/src/main/java/vslab1/src/Timeout/TimeoutThread.java b/src/main/java/vslab1/src/Timeout/TimeoutThread.java new file mode 100644 index 0000000..1fcbc60 --- /dev/null +++ b/src/main/java/vslab1/src/Timeout/TimeoutThread.java @@ -0,0 +1,42 @@ +package vslab1.src.Timeout; + +import vslab1.src.Terminatable; +import vslab1.src.FileReaderWriter.FileReaderWriter; +import vslab1.src.Peers.EOnlineState; +import vslab1.src.Peers.Peer; + +public class TimeoutThread extends Thread implements Terminatable { + + private boolean timeoutThreadRunning = true; + + private JobList jobQueue = null; + + public TimeoutThread(JobList jobQueue) { + this.jobQueue = jobQueue; + } + + @Override + public void run() { + while (timeoutThreadRunning) { + try { + sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + for (TimeoutJob timeoutJob : jobQueue) { + if (System.currentTimeMillis() - timeoutJob.currentSystemTimeMillis() >= 3000) { + String ipAddress = timeoutJob.peerToWaitFor().ipAddress(); + int port = timeoutJob.peerToWaitFor().port(); + Peer unreachablePeer = new Peer(ipAddress, port, null, EOnlineState.Offline); + FileReaderWriter.updatePeer(unreachablePeer); + } + } + } + } + + @Override + public void terminate() { + timeoutThreadRunning = false; + this.interrupt(); + } +}