summaryrefslogtreecommitdiff
path: root/sources
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
parentcd2024527c84e3e0fd22072a16ac1ff18e6d406d (diff)
Only relevant message delivering works.
Diffstat (limited to 'sources')
-rw-r--r--sources/core/VSMessage.java26
-rw-r--r--sources/core/VSProcess.java4
-rw-r--r--sources/core/VSTask.java26
-rw-r--r--sources/events/VSAbstractEvent.java5
-rw-r--r--sources/events/implementations/VSProcessCrashEvent.java4
-rw-r--r--sources/events/implementations/VSProcessRecoverEvent.java4
-rw-r--r--sources/events/internal/VSMessageReceiveEvent.java32
-rw-r--r--sources/events/internal/VSProtocolEvent.java19
-rw-r--r--sources/events/internal/VSProtocolScheduleEvent.java4
-rw-r--r--sources/prefs/VSDefaultPrefs.java3
-rw-r--r--sources/prefs/VSPrefsRestriction.java6
-rw-r--r--sources/protocols/VSAbstractProtocol.java45
-rw-r--r--sources/simulator/VSSimulator.java4
-rw-r--r--sources/simulator/VSSimulatorCanvas.java59
-rw-r--r--sources/simulator/VSSimulatorFrame.java20
15 files changed, 197 insertions, 64 deletions
diff --git a/sources/core/VSMessage.java b/sources/core/VSMessage.java
index 663abbc..25dbf27 100644
--- a/sources/core/VSMessage.java
+++ b/sources/core/VSMessage.java
@@ -18,6 +18,17 @@ public class VSMessage extends VSPrefs {
/** The serial version uid */
private static final long serialVersionUID = 1L;
+ /** The constant IS_SERVER_MESSAGE. */
+ public static final boolean IS_SERVER_MESSAGE = true;
+
+ /** The constant IS_CLIENT_MESSAGE. */
+ public static final boolean IS_CLIENT_MESSAGE = false;
+
+ /** true, if the message has been sent from a server. false, if the message
+ * has been sent from a client.
+ */
+ private boolean isServerMessage;
+
/** Each message belongs to a specific protocol. This variable defined the
* class name of the protocol being used.
*/
@@ -61,10 +72,13 @@ public class VSMessage extends VSPrefs {
*
* @param process The sending process of this message.
* @param protocolClassname The classname of the protocol this message.
+ * @param isServerMessage Sets if the message has been sent by a server.
*/
- public void init(VSProcess process, String protocolClassname) {
+ public void init(VSProcess process, String protocolClassname,
+ boolean isServerMessage) {
this.sendingProcess = process;
this.protocolClassname = protocolClassname;
+ this.isServerMessage = isServerMessage;
this.prefs = process.getPrefs();
lamportTime = sendingProcess.getLamportTime();
@@ -125,6 +139,16 @@ public class VSMessage extends VSPrefs {
return vectorTime;
}
+ /**
+ * Checks if the message has been sent by a server or a client.
+ *
+ * @return true, if the message has been sent by a server. false, if the
+ * message has been sent by a clien.
+ */
+ public boolean isServerMessage() {
+ return isServerMessage;
+ }
+
/* (non-Javadoc)
* @see prefs.VSPrefs#toString()
*/
diff --git a/sources/core/VSProcess.java b/sources/core/VSProcess.java
index 7071ae2..73ba679 100644
--- a/sources/core/VSProcess.java
+++ b/sources/core/VSProcess.java
@@ -886,7 +886,7 @@ public class VSProcess extends VSPrefs {
*
* @return the simulation canvas
*/
- public VSSimulatorCanvas getSimulationCanvas() {
+ public VSSimulatorCanvas getSimulatorCanvas() {
return simulationCanvas;
}
@@ -915,7 +915,7 @@ public class VSProcess extends VSPrefs {
*
* @param index the index the process has to get removed.
*/
- public void removeProcessAtIndex(int index) {
+ public void removedAProcessAtIndex(int index) {
if (index < processNum)
--processNum;
diff --git a/sources/core/VSTask.java b/sources/core/VSTask.java
index 0bc0d3f..1e3958d 100644
--- a/sources/core/VSTask.java
+++ b/sources/core/VSTask.java
@@ -45,6 +45,12 @@ public class VSTask implements Comparable {
/** The simulation's default prefs. */
private VSPrefs prefs;
+ /** The message line, which gets drawn by the simulation canvas. this
+ * reference is needed here in order to remove the message line from
+ * the painting area if the message is not relevant
+ */
+ private simulator.VSSimulatorCanvas.VSMessageLine messageLine;
+
/** The task is programmed. The task will be still in the task manager
* after reset.
*/
@@ -189,12 +195,30 @@ public class VSTask implements Comparable {
}
/**
+ * Sets the message line.
+ *
+ * @messageLine the message line
+ */
+ public void setMessageLine(simulator.VSSimulatorCanvas.VSMessageLine
+ messageLine) {
+ this.messageLine = messageLine;
+ }
+
+ /**
* Runs the task.
*/
public void run() {
if (event.getProcess() == null)
event.init(process);
- event.onStart();
+
+ if (messageLine != null) {
+ System.out.println("FO");
+ if (!event.onStart())
+ process.getSimulatorCanvas().removeMessageLine(messageLine);
+ } else {
+ System.out.println("BA");
+ event.onStart();
+ }
}
/**
diff --git a/sources/events/VSAbstractEvent.java b/sources/events/VSAbstractEvent.java
index 22fb81c..be721cd 100644
--- a/sources/events/VSAbstractEvent.java
+++ b/sources/events/VSAbstractEvent.java
@@ -132,6 +132,9 @@ abstract public class VSAbstractEvent extends VSPrefs {
/**
* On start.
+ *
+ * @return false, if a message has been delivered but is not relevant and
+ * can get removed from the simulator canvas paint area. true otherwise.
*/
- abstract public void onStart();
+ abstract public boolean onStart();
}
diff --git a/sources/events/implementations/VSProcessCrashEvent.java b/sources/events/implementations/VSProcessCrashEvent.java
index 637a2b1..bfb58ff 100644
--- a/sources/events/implementations/VSProcessCrashEvent.java
+++ b/sources/events/implementations/VSProcessCrashEvent.java
@@ -21,10 +21,12 @@ public class VSProcessCrashEvent extends VSAbstractEvent {
/* (non-Javadoc)
* @see events.VSAbstractEvent#onStart()
*/
- public void onStart() {
+ public boolean onStart() {
if (!process.isCrashed()) {
process.isCrashed(true);
logg(prefs.getString("lang.crashed"));
}
+
+ return true;
}
}
diff --git a/sources/events/implementations/VSProcessRecoverEvent.java b/sources/events/implementations/VSProcessRecoverEvent.java
index 25bab7a..6799915 100644
--- a/sources/events/implementations/VSProcessRecoverEvent.java
+++ b/sources/events/implementations/VSProcessRecoverEvent.java
@@ -22,10 +22,12 @@ public class VSProcessRecoverEvent extends VSAbstractEvent {
/* (non-Javadoc)
* @see events.VSAbstractEvent#onStart()
*/
- public void onStart() {
+ public boolean onStart() {
if (process.isCrashed()) {
process.isCrashed(false);
logg(prefs.getString("lang.recovered"));
}
+
+ return true;
}
}
diff --git a/sources/events/internal/VSMessageReceiveEvent.java b/sources/events/internal/VSMessageReceiveEvent.java
index ff97010..0012775 100644
--- a/sources/events/internal/VSMessageReceiveEvent.java
+++ b/sources/events/internal/VSMessageReceiveEvent.java
@@ -36,31 +36,39 @@ public class VSMessageReceiveEvent extends VSAbstractEvent {
/* (non-Javadoc)
* @see events.VSAbstractEvent#onStart()
*/
- public void onStart() {
+ public boolean onStart() {
+ boolean returnValue = true;
+ boolean onlyRelevantMessages = process.getPrefs().
+ getBoolean("sim.messages.relevant");
+
String eventName = message.getName();
String protocolClassname = message.getProtocolClassname();
- process.updateLamportTime(message.getLamportTime()+1);
- process.updateVectorTime(message.getVectorTime());
-
Object protocolObj = null;
if (process.objectExists(protocolClassname))
protocolObj = process.getObject(protocolClassname);
+ if (onlyRelevantMessages) {
+ if (protocolObj == null)
+ return false;
+
+ if (!((VSAbstractProtocol) protocolObj).isRelevantMessage(message))
+ return false;
+ }
+
+ process.updateLamportTime(message.getLamportTime()+1);
+ process.updateVectorTime(message.getVectorTime());
+
StringBuffer buffer = new StringBuffer();
buffer.append(prefs.getString("lang.message.recv"));
buffer.append("; ");
buffer.append(message);;
+ logg(buffer.toString());
- if (protocolObj == null) {
- logg(buffer.toString());
-
- } else {
- final VSAbstractProtocol protocol = (VSAbstractProtocol) protocolObj;
- logg(buffer.toString());
- protocol.onMessageRecvStart(message);
- }
+ if (protocolObj != null)
+ ((VSAbstractProtocol) protocolObj).onMessageRecvStart(message);
+ return true;
}
}
diff --git a/sources/events/internal/VSProtocolEvent.java b/sources/events/internal/VSProtocolEvent.java
index d5051f3..8b65c79 100644
--- a/sources/events/internal/VSProtocolEvent.java
+++ b/sources/events/internal/VSProtocolEvent.java
@@ -77,8 +77,9 @@ public class VSProtocolEvent extends VSAbstractEvent {
/* (non-Javadoc)
* @see events.VSAbstractEvent#onStart()
*/
- public void onStart() {
- VSAbstractProtocol protocol = process.getProtocolObject(protocolClassname);
+ public boolean onStart() {
+ VSAbstractProtocol protocol = process.getProtocolObject(
+ protocolClassname);
if (isClientProtocol)
protocol.isClient(isProtocolActivation);
@@ -87,13 +88,21 @@ public class VSProtocolEvent extends VSAbstractEvent {
protocol.isServer(isProtocolActivation);
StringBuffer buffer = new StringBuffer();
- buffer.append(VSRegisteredEvents.getShortnameByClassname(protocolClassname));
+ buffer.append(VSRegisteredEvents.getShortnameByClassname(
+ protocolClassname));
+
buffer.append(" ");
buffer.append(isClientProtocol
- ? prefs.getString("lang.client") : prefs.getString("lang.server"));
+ ? prefs.getString("lang.client")
+ : prefs.getString("lang.server"));
+
buffer.append(" ");
buffer.append(isProtocolActivation
- ? prefs.getString("lang.activated") : prefs.getString("lang.deactivated"));
+ ? prefs.getString("lang.activated")
+ : prefs.getString("lang.deactivated"));
+
logg(buffer.toString());
+
+ return true;
}
}
diff --git a/sources/events/internal/VSProtocolScheduleEvent.java b/sources/events/internal/VSProtocolScheduleEvent.java
index 9b6e664..9c72124 100644
--- a/sources/events/internal/VSProtocolScheduleEvent.java
+++ b/sources/events/internal/VSProtocolScheduleEvent.java
@@ -76,10 +76,12 @@ public class VSProtocolScheduleEvent extends VSAbstractEvent {
/* (non-Javadoc)
* @see events.VSAbstractEvent#onStart()
*/
- public void onStart() {
+ public boolean onStart() {
if (isServerSchedule)
protocol.onServerScheduleStart();
else
protocol.onClientScheduleStart();
+
+ return true;
}
}
diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java
index 7b7be3f..a396e43 100644
--- a/sources/prefs/VSDefaultPrefs.java
+++ b/sources/prefs/VSDefaultPrefs.java
@@ -42,7 +42,7 @@ public class VSDefaultPrefs extends VSPrefs {
*/
public void fillDefaultStrings() {
initString("lang.about", "About");
- initString("lang.about.info!", "Dieses Programm wurde von Paul Bütow im Rahmen der Diplomarbeit \"Objektorientierte Entwicklung eines GUI-basierten Tools für die ereignisbasierte Simulation verteilter Systeme\" bei Prof. Dr.-Ing. Oßmann erstellt. Dieses Programm stellt noch keinesfalls eine fertige Version dar, da es sich noch in Entwicklung befindet und die Diplomarbeit erst mitte August abgeschlossen sein wird! Bei Fehlern bitte eine kurze Mail mitsamt Fehlerbeschreibung an paul@buetow.org schicken! Dieser Simulator wird später außerdem unter einer open source Linzenz (wahrscheinlich der GNU General Public License) freigegeben!");
+ initString("lang.about.info!", "Dieses Programm wurde von Paul Bütow im Rahmen der Diplomarbeit \"Objektorientierte Entwicklung eines GUI-basierten Tools für die ereignisbasierte Simulation verteilter Systeme\" bei Prof. Dr.-Ing. Oßmann als 1. Prüfer sowie Betreuer und Prof. Dr. rer. nat. Fassbender als 2. Prüfer erstellt. Dieses Programm stellt noch keinesfalls eine fertige Version dar, da es sich noch in Entwicklung befindet und die Diplomarbeit erst mitte August abgeschlossen sein wird! Bei Fehlern bitte eine kurze Mail mitsamt Fehlerbeschreibung an paul@buetow.org schicken! Dieser Simulator wird später außerdem unter einer open source Linzenz (wahrscheinlich der GNU General Public License) freigegeben!");
initString("lang.activate", "aktivieren");
initString("lang.activated", "aktiviert");
initString("lang.actualize", "Aktualisieren");
@@ -235,5 +235,6 @@ public class VSDefaultPrefs extends VSPrefs {
initBoolean("sim.mode.expert", false, "Expertenmodus aktivieren");
initBoolean("sim.message.own.recv", false, "Prozesse empfangen eigene Nachrichten");
initBoolean("sim.message.prob.mean", true, "Mittelwerte der Nachrichtausfallw'k. bilden");
+ initBoolean("sim.messages.relevant", true, "Nur alle relevanten Nachrichten ausliefern");
}
}
diff --git a/sources/prefs/VSPrefsRestriction.java b/sources/prefs/VSPrefsRestriction.java
index fd0636f..2ea3e18 100644
--- a/sources/prefs/VSPrefsRestriction.java
+++ b/sources/prefs/VSPrefsRestriction.java
@@ -55,9 +55,9 @@ public class VSPrefsRestriction implements Serializable {
}
/**
- * The Class StringVSPrefsRestriction.
+ * The Class VSStringPrefsRestriction.
*/
- public static class StringVSPrefsRestriction extends VSPrefsRestriction {
+ public static class VSStringPrefsRestriction extends VSPrefsRestriction {
private static final long serialVersionUID = 1L;
/** The possible selections. */
@@ -68,7 +68,7 @@ public class VSPrefsRestriction implements Serializable {
*
* @param possibleSelections the possible selections
*/
- public StringVSPrefsRestriction(String [] possibleSelections) {
+ public VSStringPrefsRestriction(String [] possibleSelections) {
this.possibleSelections = new Vector<String>();
for (String elem : possibleSelections)
diff --git a/sources/protocols/VSAbstractProtocol.java b/sources/protocols/VSAbstractProtocol.java
index 1cb5281..70277de 100644
--- a/sources/protocols/VSAbstractProtocol.java
+++ b/sources/protocols/VSAbstractProtocol.java
@@ -51,7 +51,12 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
process.increaseLamportTime();
process.increaseVectorTime();
- message.init(process, getClassname());
+
+ if (currentContextIsServer)
+ message.init(process, getClassname(), VSMessage.IS_SERVER_MESSAGE);
+ else
+ message.init(process, getClassname(), VSMessage.IS_CLIENT_MESSAGE);
+
process.sendMessage(message);
}
@@ -69,7 +74,7 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
/* (non-Javadoc)
* @see events.VSAbstractEvent#onStart()
*/
- public final void onStart() {
+ public final boolean onStart() {
if (hasOnServerStart) {
if (isServer) {
currentContextIsServer(true);
@@ -81,6 +86,8 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
onClientStart();
}
}
+
+ return true;
}
/* (non-Javadoc)
@@ -108,7 +115,6 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
}
}
-
/**
* Runs a server schedule
*/
@@ -140,6 +146,31 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
}
/**
+ * Check's if its a relevant message.
+ *
+ * @param message the message to check
+ *
+ * @return true, if it's a relevant meessage. false if the protocol
+ * is wrong or if the server recv a server message/the client recv a
+ * client message. Clients should only recv server messages and servers
+ * should only recv client messages.
+ */
+ public final boolean isRelevantMessage(VSMessage message) {
+ if (isIncorrectProtocol(message))
+ return false;
+
+ if (message.isServerMessage()) {
+ if (isServer)
+ return false;
+ } else {
+ if (isClient)
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* Sets if the current context is server.
*
* @param currentContextIsServer the context.
@@ -224,7 +255,7 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
serverSchedules.add(scheduleTask);
else
clientSchedules.add(scheduleTask);
- process.getSimulationCanvas().getTaskManager().addTask(scheduleTask);
+ process.getSimulatorCanvas().getTaskManager().addTask(scheduleTask);
}
/**
@@ -232,10 +263,10 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
*/
public final void removeSchedules() {
if (currentContextIsServer) {
- process.getSimulationCanvas().getTaskManager().removeAllTasks(serverSchedules);
+ process.getSimulatorCanvas().getTaskManager().removeAllTasks(serverSchedules);
serverSchedules.clear();
} else {
- process.getSimulationCanvas().getTaskManager().removeAllTasks(clientSchedules);
+ process.getSimulatorCanvas().getTaskManager().removeAllTasks(clientSchedules);
clientSchedules.clear();
}
}
@@ -303,7 +334,7 @@ abstract public class VSAbstractProtocol extends VSAbstractEvent {
if (process == null)
return 0;
- return process.getSimulationCanvas().getNumProcesses();
+ return process.getSimulatorCanvas().getNumProcesses();
}
/* (non-Javadoc)
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();
}
}