From dda68e02570d7dbdc82ce56123ebb4da989acafe Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 31 May 2008 04:28:38 +0000 Subject: yet another bugfix --- sources/simulator/VSSimulatorCanvas.java | 35 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'sources/simulator/VSSimulatorCanvas.java') diff --git a/sources/simulator/VSSimulatorCanvas.java b/sources/simulator/VSSimulatorCanvas.java index c972570..0fb58ed 100644 --- a/sources/simulator/VSSimulatorCanvas.java +++ b/sources/simulator/VSSimulatorCanvas.java @@ -369,15 +369,7 @@ public class VSSimulatorCanvas extends Canvas implements Runnable { g.drawLine((int) x1, (int) y1, (int) x, (int) y); } else if (globalTime >= recvTime) { - if (prefs.getBoolean("sim.messages.relevant")) { - VSMessageReceiveEvent event = - (VSMessageReceiveEvent) task.getEvent(); - - event.init(receiverProcess); - if (!event.isRelevantMessage()) - removeMessageLine(this); - } - + checkIfMessageIsRelevant(); isArrived = true; if (receiverProcess.isCrashed()) @@ -388,6 +380,7 @@ public class VSSimulatorCanvas extends Canvas implements Runnable { draw(g, globalTime); } else if (outageTime >= 0 && outageTime <= globalTime) { + checkIfMessageIsRelevant(); isLost = true; draw(g, globalTime);; @@ -400,6 +393,20 @@ public class VSSimulatorCanvas extends Canvas implements Runnable { } } + /** + * Checks if the message is relevant. If it's not relevant, then it will + * get removed. + */ + private void checkIfMessageIsRelevant() { + if (prefs.getBoolean("sim.messages.relevant")) { + VSMessageReceiveEvent event = + (VSMessageReceiveEvent) task.getEvent(); + event.init(receiverProcess); + if (!event.isRelevantMessage()) + removeMessageLine(this); + } + } + /** * Called if a process within the simulator has been removed at a * specified index. @@ -1330,14 +1337,14 @@ public class VSSimulatorCanvas extends Canvas implements Runnable { outageTime = sendingProcess.getARandomMessageOutageTime( durationTime, null); + receiveEvent = new VSMessageReceiveEvent(message); + task = new VSTask(deliverTime, receiverProcess, + receiveEvent, VSTask.GLOBAL); + /* Only add a 'receiving message' task if the message will not get lost! */ - if (outageTime == -1) { - receiveEvent = new VSMessageReceiveEvent(message); - task = new VSTask(deliverTime, receiverProcess, - receiveEvent, VSTask.GLOBAL); + if (outageTime == -1) taskManager.addTask(task); - } synchronized (messageLines) { messageLines.add( -- cgit v1.2.3