Browse Source

Adds visualization of disconnected MQTT nodes

Disconnected SmartDevices stay in participantsSet until last packets are
sent.
Andreas T. Meyer-Berg 6 years ago
parent
commit
f4858db8b9

+ 11 - 2
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/core/ConnectionImplementation.java

@@ -7,6 +7,7 @@ public class ConnectionImplementation implements Connection {
 
 	private Link link;
 	private LinkedList<Port> participants;
+	private LinkedList<Port> removedParticipants;
 	private Protocol protocol;
 	private double packetLossRate;
 	private byte status;
@@ -14,6 +15,7 @@ public class ConnectionImplementation implements Connection {
 	public ConnectionImplementation(Link l, Protocol p) {
 		link = l;
 		participants=new LinkedList<Port>();
+		removedParticipants = new LinkedList<Port>();
 		this.protocol = p;
 		status =Connection.ACTIVE;
 	}
@@ -31,12 +33,18 @@ public class ConnectionImplementation implements Connection {
 
 	@Override
 	public Collection<Port> getParticipants() {
-		return participants;
+		LinkedList<Port> out = new LinkedList<Port>();
+		out.addAll(participants);
+		out.addAll(removedParticipants);
+		return out;
 	}
 
 	@Override
 	public boolean removeSmartDevice(Port sd) {
-		return participants.remove(sd);
+		boolean removed = participants.remove(sd);
+		if(removed)
+			removedParticipants.add(sd);
+		return removed;
 	}
 
 	@Override
@@ -61,6 +69,7 @@ public class ConnectionImplementation implements Connection {
 
 	@Override
 	public Collection<Packet> getTerminationPackages(long startTime) {
+		removedParticipants.clear();
 		return protocol.generateNextPakets(null, startTime, false);
 	}
 

+ 6 - 5
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/VisualisationInteractor.java

@@ -178,17 +178,18 @@ public class VisualisationInteractor implements MouseInputListener,
 				}
 				// Print Terminating Packages
 				LinkedList<Connection> terminated = new LinkedList<Connection>();
+
 				model.getConnections()
 						.stream()
-						.filter(c -> (c.getStatus() == Connection.FINISHED || c
-								.getStatus() == Connection.TERMINATED))
 						.forEach(c -> {
-							terminated.add(c);
+							if(c.getStatus() == Connection.FINISHED || c
+								.getStatus() == Connection.TERMINATED)
+								terminated.add(c);
 							for (Packet p : c.getTerminationPackages(1000))
 								System.out.println(p.toString());
 						});
-				if(model.getConnections().removeAll(terminated))
-					controller.notifyObservers();
+				model.getConnections().removeAll(terminated);
+				controller.notifyObservers();
 			
 			});
 		rightClickMenu.add(itemDebug);

+ 7 - 3
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/VisualisationPanel.java

@@ -142,15 +142,16 @@ public class VisualisationPanel extends JPanel implements Observer {
 	private void paintConnections(Graphics g) {
 		// For all Connections
 		for (Connection c : model.getConnections()) {
+			Color connectionState;
 			switch (c.getStatus()) {
 			case Connection.ACTIVE:
-				g.setColor(Color.GREEN);
+				connectionState = Color.GREEN;
 				break;
 			case Connection.HALTED:
-				g.setColor(Color.ORANGE);
+				connectionState = Color.ORANGE;
 				break;
 			default:
-				g.setColor(Color.RED);
+				connectionState = Color.GREEN;
 				break;
 			}
 			/**
@@ -184,7 +185,10 @@ public class VisualisationPanel extends JPanel implements Observer {
 				for(Port sd:d){
 					if(!model.getDevices().contains(sd.getOwner())){
 						SmartDevice removed = sd.getOwner();
+						g.setColor(Color.RED);
 						g.fillOval(removed.getX()-control.getDevice_visualization_radius()/4, removed.getY()-control.getDevice_visualization_radius()/4, control.getDevice_visualization_radius()/2, control.getDevice_visualization_radius()/2);
+					}else{
+						g.setColor(connectionState);
 					}
 					
 					if (broker!= sd) {