From 6e0ac613c5354ee5971b7b5d521574fe55847844 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Thu, 14 Jun 2018 20:18:28 +0200 Subject: [PATCH] finished scheduler + queue fix --- src/main/protocol/HConnection.java | 36 ++++++++++------ src/main/ui/SubForm.java | 2 +- src/main/ui/scheduler/Scheduler.java | 62 ++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 13 deletions(-) diff --git a/src/main/protocol/HConnection.java b/src/main/protocol/HConnection.java index a116054..6bbe511 100644 --- a/src/main/protocol/HConnection.java +++ b/src/main/protocol/HConnection.java @@ -12,23 +12,23 @@ import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.List; -import java.util.PriorityQueue; -import java.util.Queue; +import java.util.*; public class HConnection { - private volatile Queue sendToClientAsyncQueue = new PriorityQueue<>(); - private volatile Queue sendToServerAsyncQueue = new PriorityQueue<>(); + private final Queue sendToClientAsyncQueue = new LinkedList<>(); + private final Queue sendToServerAsyncQueue = new LinkedList<>(); public HConnection() { new Thread(() -> { while (true) { HPacket packet; - while ((packet = sendToClientAsyncQueue.poll()) != null) { - sendToClient(packet); + synchronized (sendToClientAsyncQueue) { + while ((packet = sendToClientAsyncQueue.poll()) != null) { + sendToClient(packet); + } } + try { Thread.sleep(1); } catch (InterruptedException e) { //java........................................ @@ -40,9 +40,12 @@ public class HConnection { new Thread(() -> { while (true) { HPacket packet; - while ((packet = sendToServerAsyncQueue.poll()) != null) { - sendToServer(packet); + synchronized (sendToServerAsyncQueue) { + while ((packet = sendToServerAsyncQueue.poll()) != null) { + sendToServer(packet); + } } + try { Thread.sleep(1); } catch (InterruptedException e) { @@ -365,6 +368,10 @@ public class HConnection { } private void setState(State state) { + if (state == State.CONNECTED) { + sendToClientAsyncQueue.clear(); + sendToServerAsyncQueue.clear(); + } if (state != this.state) { State buffer = this.state; this.state = state; @@ -425,10 +432,15 @@ public class HConnection { } public void sendToClientAsync(HPacket message) { - sendToClientAsyncQueue.add(message); + synchronized (sendToClientAsyncQueue) { + sendToClientAsyncQueue.add(message); + } + } public void sendToServerAsync(HPacket message) { - sendToServerAsyncQueue.add(message); + synchronized (sendToServerAsyncQueue) { + sendToServerAsyncQueue.add(message); + } } } diff --git a/src/main/ui/SubForm.java b/src/main/ui/SubForm.java index 6c04b1e..9984bbe 100644 --- a/src/main/ui/SubForm.java +++ b/src/main/ui/SubForm.java @@ -9,7 +9,7 @@ import java.awt.*; public class SubForm { - GEarthController parentController; + protected GEarthController parentController; public void setParentController(GEarthController controller) { parentController = controller; diff --git a/src/main/ui/scheduler/Scheduler.java b/src/main/ui/scheduler/Scheduler.java index e5b5ff9..092ecbe 100644 --- a/src/main/ui/scheduler/Scheduler.java +++ b/src/main/ui/scheduler/Scheduler.java @@ -7,10 +7,12 @@ import javafx.event.ActionEvent; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; import main.protocol.HMessage; import main.protocol.HPacket; import main.ui.SubForm; +import java.io.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -211,8 +213,68 @@ public class Scheduler extends SubForm { } public void saveBtnClicked(ActionEvent actionEvent) { + FileChooser fileChooser = new FileChooser(); + + //Set extension filter + FileChooser.ExtensionFilter extFilter = + new FileChooser.ExtensionFilter("SCHED files (*.sched)", "*.sched"); + fileChooser.getExtensionFilters().add(extFilter); + fileChooser.setTitle("Save Schedule File"); + + //Show save file dialog + File file = fileChooser.showSaveDialog(parentController.getStage()); + + if(file != null){ + + try { + FileWriter fileWriter = new FileWriter(file); + BufferedWriter out = new BufferedWriter(fileWriter); + + for (int i = 0; i < scheduleItemList.size(); i++) { + out.write(scheduleItemList.get(i).stringify()); + if (i != scheduleItemList.size() - 1) out.write("\n"); + } + + out.flush(); + out.close(); + fileWriter.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + + } } public void loadBtnClicked(ActionEvent actionEvent) { + List list = new ArrayList<>(); + + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Load Schedule File"); + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("Schedule Files", "*.sched")); + File selectedFile = fileChooser.showOpenDialog(parentController.getStage()); + if (selectedFile != null) { + + FileReader fr = null; + try { + fr = new FileReader(selectedFile); + BufferedReader br = new BufferedReader(fr); + String line = null; + + while ((line = br.readLine()) != null) + { + list.add(new ScheduleItem(line)); + } + + fr.close(); + br.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + load(list); + } }