summaryrefslogtreecommitdiff
path: root/sources/simulator
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-29 13:55:34 +0000
committerPaul Buetow <paul@buetow.org>2008-05-29 13:55:34 +0000
commitb8f2687296ad47626412e2a54f4916f7fabc4d6d (patch)
tree247757bbb960ddceb5adefe89df2fd8115107bfc /sources/simulator
parentcd2024527c84e3e0fd22072a16ac1ff18e6d406d (diff)
Only relevant message delivering works.
Diffstat (limited to 'sources/simulator')
-rw-r--r--sources/simulator/VSSimulator.java4
-rw-r--r--sources/simulator/VSSimulatorCanvas.java59
-rw-r--r--sources/simulator/VSSimulatorFrame.java20
3 files changed, 55 insertions, 28 deletions
diff --git a/sources/simulator/VSSimulator.java b/sources/simulator/VSSimulator.java
index 26f6731..3497dd1 100644
--- a/sources/simulator/VSSimulator.java
+++ b/sources/simulator/VSSimulator.java
@@ -1137,7 +1137,7 @@ public class VSSimulator extends JPanel {
*
* @return the simulation canvas
*/
- public VSSimulatorCanvas getSimulationCanvas() {
+ public VSSimulatorCanvas getSimulatorCanvas() {
return simulationCanvas;
}
@@ -1163,7 +1163,7 @@ public class VSSimulator extends JPanel {
*
* @param index the index
*/
- public void removeProcessAtIndex(int index) {
+ public void removedAProcessAtIndex(int index) {
if (lastSelectedProcessNum > index)
--lastSelectedProcessNum;
diff --git a/sources/simulator/VSSimulatorCanvas.java b/sources/simulator/VSSimulatorCanvas.java
index f1df68a..95d7e2c 100644
--- a/sources/simulator/VSSimulatorCanvas.java
+++ b/sources/simulator/VSSimulatorCanvas.java
@@ -163,7 +163,7 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
/**
* The Class VSMessageLine.
*/
- private class VSMessageLine {
+ public class VSMessageLine {
/** The receiver process. */
private VSProcess receiverProcess;
@@ -236,7 +236,9 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
* @param receiverNum the receiver num
* @param task the task
*/
- public VSMessageLine(VSProcess receiverProcess, long sendTime, long recvTime, long outageTime, int senderNum , int receiverNum, VSTask task) {
+ public VSMessageLine(VSProcess receiverProcess, long sendTime,
+ long recvTime, long outageTime, int senderNum ,
+ int receiverNum, VSTask task) {
this.receiverProcess = receiverProcess;
this.sendTime = sendTime;
this.recvTime = recvTime;
@@ -247,6 +249,7 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
this.isLost = false;
this.messageLineNum = ++messageLineCounter;
this.task = task;
+ task.setMessageLine(this);
if (senderNum > receiverNum) {
//offset1 = 1;
@@ -323,7 +326,7 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
*
* @return true, if successful
*/
- public boolean removeProcessAtIndex(int index) {
+ public boolean removedAProcessAtIndex(int index) {
if (index == receiverNum || index == senderNum)
return true;
@@ -1033,7 +1036,7 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
*/
public void sendMessage(VSMessage message) {
VSTask task = null;
- VSAbstractEvent messageReceiveEvent = null;
+ VSAbstractEvent receiveEvent = null;
VSProcess sendingProcess = message.getSendingProcess();
long deliverTime, outageTime, durationTime;
boolean recvOwn = prefs.getBoolean("sim.message.own.recv");
@@ -1043,8 +1046,9 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
if (receiverProcess.equals(sendingProcess)) {
if (recvOwn) {
deliverTime = sendingProcess.getGlobalTime();
- messageReceiveEvent = new VSMessageReceiveEvent(message);
- task = new VSTask(deliverTime, receiverProcess, messageReceiveEvent, VSTask.GLOBAL);
+ receiveEvent = new VSMessageReceiveEvent(message);
+ task = new VSTask(deliverTime, receiverProcess,
+ receiveEvent, VSTask.GLOBAL);
taskManager.addTask(task);
}
@@ -1059,18 +1063,23 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
outageTime = sendingProcess.getARandomMessageOutageTime(
durationTime, null);
- /* Only add a 'receiving message' task if the message will not get lost! */
+ /* Only add a 'receiving message' task if the message will
+ not get lost! */
if (outageTime == -1) {
- messageReceiveEvent = new VSMessageReceiveEvent(message);
- task = new VSTask(deliverTime, receiverProcess, messageReceiveEvent, VSTask.GLOBAL);
+ receiveEvent = new VSMessageReceiveEvent(message);
+ task = new VSTask(deliverTime, receiverProcess,
+ receiveEvent, VSTask.GLOBAL);
taskManager.addTask(task);
}
synchronized (messageLines) {
messageLines.add(
- new VSMessageLine(receiverProcess, sendingProcess.getGlobalTime(),
- deliverTime, outageTime, sendingProcess.getProcessNum(),
- receiverProcess.getProcessNum(), task));
+ new VSMessageLine(receiverProcess,
+ sendingProcess.getGlobalTime(),
+ deliverTime, outageTime,
+ sendingProcess.getProcessNum(),
+ receiverProcess.getProcessNum(),
+ task));
}
}
}
@@ -1288,6 +1297,17 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
}
/**
+ * Removes the message line.
+ *
+ * @param messageLine the message line to remove
+ */
+ public void removeMessageLine(VSMessageLine messageLine) {
+ synchronized (messageLines) {
+ messageLines.remove(messageLine);
+ }
+ }
+
+ /**
* Removes the process.
*
* @param process the process
@@ -1299,25 +1319,32 @@ public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionLi
} else {
int index = processes.indexOf(process);
processes.remove(index);
+
synchronized (processes) {
for (VSProcess p : processes) {
- p.removeProcessAtIndex(index);
+ p.removedAProcessAtIndex(index);
}
}
+
numProcesses = processes.size();
taskManager.removeTasksOf(process);
- simulation.removeProcessAtIndex(index);
+ simulation.removedAProcessAtIndex(index);
recalcOnChange();
- ArrayList<VSMessageLine> removeThose = new ArrayList<VSMessageLine>();
+ ArrayList<VSMessageLine> removeThose =
+ new ArrayList<VSMessageLine>();
+
synchronized (messageLines) {
for (VSMessageLine line : messageLines)
- if (line.removeProcessAtIndex(index))
+ if (line.removedAProcessAtIndex(index))
removeThose.add(line);
+
for (VSMessageLine line : removeThose) {
VSTask deliverTask = line.getTask();
+
if (deliverTask != null)
taskManager.removeTask(deliverTask);
+
messageLines.remove(line);
}
}
diff --git a/sources/simulator/VSSimulatorFrame.java b/sources/simulator/VSSimulatorFrame.java
index bb1c27b..14e4136 100644
--- a/sources/simulator/VSSimulatorFrame.java
+++ b/sources/simulator/VSSimulatorFrame.java
@@ -225,7 +225,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
public void stateChanged(ChangeEvent ce) {
JTabbedPane pane = (JTabbedPane) ce.getSource();
currentSimulation = (VSSimulator) pane.getSelectedComponent();
- currentSimulation.getSimulationCanvas().paint();
+ currentSimulation.getSimulatorCanvas().paint();
updateEditMenu();
updateSimulationMenu();
}
@@ -260,7 +260,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
return;
final String processString = prefs.getString("lang.process");
- final ArrayList<VSProcess> arr = currentSimulation.getSimulationCanvas().getProcessesArray();
+ final ArrayList<VSProcess> arr = currentSimulation.getSimulatorCanvas().getProcessesArray();
final int numProcesses = arr.size();
int processNum = 0;
@@ -273,7 +273,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
final int finalProcessNum = processNum++;
processItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
- currentSimulation.getSimulationCanvas().editProcess(finalProcessNum);
+ currentSimulation.getSimulatorCanvas().editProcess(finalProcessNum);
}
});
menuEdit.add(processItem);
@@ -304,7 +304,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
public void dispose() {
synchronized (simulations) {
for (VSSimulator simulation : simulations)
- simulation.getSimulationCanvas().stopThread();
+ simulation.getSimulatorCanvas().stopThread();
}
super.dispose();
}
@@ -346,7 +346,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
menuItemState.setPause(true);
menuItemState.setReset(false);
menuItemState.setReplay(true);
- currentSimulation.getSimulationCanvas().play();
+ currentSimulation.getSimulatorCanvas().play();
updateSimulationMenu();
} else if (sourceText.equals(prefs.getString("lang.pause"))) {
@@ -355,7 +355,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
menuItemState.setPause(false);
menuItemState.setReset(true);
menuItemState.setReplay(true);
- currentSimulation.getSimulationCanvas().pause();
+ currentSimulation.getSimulatorCanvas().pause();
updateSimulationMenu();
} else if (sourceText.equals(prefs.getString("lang.reset"))) {
@@ -364,7 +364,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
menuItemState.setPause(false);
menuItemState.setReset(false);
menuItemState.setReplay(false);
- currentSimulation.getSimulationCanvas().reset();
+ currentSimulation.getSimulatorCanvas().reset();
updateSimulationMenu();
} else if (sourceText.equals(prefs.getString("lang.replay"))) {
@@ -373,8 +373,8 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
menuItemState.setPause(true);
menuItemState.setReset(false);
menuItemState.setReplay(true);
- currentSimulation.getSimulationCanvas().reset();
- currentSimulation.getSimulationCanvas().play();
+ currentSimulation.getSimulatorCanvas().reset();
+ currentSimulation.getSimulatorCanvas().play();
updateSimulationMenu();
}
}
@@ -413,7 +413,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener {
} else {
simulations.remove(simulationToRemove);
tabbedPane.remove(simulationToRemove);
- simulationToRemove.getSimulationCanvas().stopThread();
+ simulationToRemove.getSimulatorCanvas().stopThread();
}
}