From 46ccf30724f257a6d7e86b087772469d28decfd2 Mon Sep 17 00:00:00 2001 From: WickedJack99 Date: Sat, 6 Apr 2024 20:23:15 +0200 Subject: [PATCH] Timeout related classes and functionality added. --- src/main/java/vslab1/src/Timeout/JobList.java | 7 ++++ .../java/vslab1/src/Timeout/TimeoutJob.java | 7 ++++ .../vslab1/src/Timeout/TimeoutThread.java | 42 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 src/main/java/vslab1/src/Timeout/JobList.java create mode 100644 src/main/java/vslab1/src/Timeout/TimeoutJob.java create mode 100644 src/main/java/vslab1/src/Timeout/TimeoutThread.java 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(); + } +}