|
@@ -52,6 +52,10 @@ public class MQTT_protocol implements Protocol {
|
|
|
*/
|
|
|
private LinkedList<Packet> currentPackets = new LinkedList<Packet>();
|
|
|
|
|
|
+ private LinkedList<Pair<Port,Port>> deletedConnectionLinks = new LinkedList<Pair<Port,Port>>();
|
|
|
+ private SmartDevice deletedBroker = new SmartDevice("DeletedBroker");
|
|
|
+ private Port deletedBrokerPort = new Port(deletedBroker,(short)-1);
|
|
|
+
|
|
|
|
|
|
* Topics of the MQTT Broker
|
|
|
*/
|
|
@@ -103,7 +107,8 @@ public class MQTT_protocol implements Protocol {
|
|
|
returnPackets.addAll(currentPackets);
|
|
|
|
|
|
currentPackets.clear();
|
|
|
-
|
|
|
+
|
|
|
+ deletedConnectionLinks.clear();
|
|
|
|
|
|
if(port==null)return returnPackets;
|
|
|
|
|
@@ -225,6 +230,7 @@ public class MQTT_protocol implements Protocol {
|
|
|
if (broker==null) {
|
|
|
if (role == 0) {
|
|
|
broker = device;
|
|
|
+ updateBrokerOnDeletedConnections(null);
|
|
|
return true;
|
|
|
} else {
|
|
|
return false;
|
|
@@ -263,6 +269,8 @@ public class MQTT_protocol implements Protocol {
|
|
|
boolean removedDevice=false;
|
|
|
if (broker == device){
|
|
|
broker = null;
|
|
|
+ deletedConnectionLinks.add(new Pair<Port, Port>(new Port(device.getOwner(), (short)-1), deletedBrokerPort));
|
|
|
+ updateBrokerOnDeletedConnections(device);
|
|
|
}
|
|
|
removedDevice|=pubSubs.remove(device);
|
|
|
removedDevice|=subs.remove(device);
|
|
@@ -270,9 +278,14 @@ public class MQTT_protocol implements Protocol {
|
|
|
|
|
|
LinkedList<String> oldTopics = subbedTopics.remove(device);
|
|
|
if(oldTopics!=null)oldTopics.clear();
|
|
|
- if(removedDevice && broker!=null){
|
|
|
-
|
|
|
- currentPackets.add(new MQTT_packet(MQTT_packet.DISCONNECT, currentPackets.size()/2, device, broker));
|
|
|
+ if(removedDevice){
|
|
|
+ if(broker == null){
|
|
|
+ deletedConnectionLinks.add(new Pair<Port, Port>(deletedBrokerPort,device));
|
|
|
+ }else{
|
|
|
+ deletedConnectionLinks.add(new Pair<Port, Port>(broker, device));
|
|
|
+
|
|
|
+ currentPackets.add(new MQTT_packet(MQTT_packet.DISCONNECT, currentPackets.size()/2, device, broker));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -320,6 +333,28 @@ public class MQTT_protocol implements Protocol {
|
|
|
public Collection<Pair<Port,Port>> getTopology(){
|
|
|
LinkedList<Pair<Port,Port>> topology = new LinkedList<Pair<Port,Port>>();
|
|
|
Port center = broker;
|
|
|
+ calcDeletedBrokerPosition();
|
|
|
+ if(broker==null)
|
|
|
+ center = new Port(deletedBroker, (short)-1);
|
|
|
+ for(Port p: pubSubs)
|
|
|
+ topology.add(new Pair<Port, Port>(center, p));
|
|
|
+ for(Port p: pubs)
|
|
|
+ topology.add(new Pair<Port, Port>(center, p));
|
|
|
+ for(Port p: subs)
|
|
|
+ topology.add(new Pair<Port, Port>(center, p));
|
|
|
+ return topology;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Collection<Pair<Port, Port>> getDeletedTopology() {
|
|
|
+ calcDeletedBrokerPosition();
|
|
|
+ return deletedConnectionLinks;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * Calculate and update the position of the deleted Broker
|
|
|
+ */
|
|
|
+ private void calcDeletedBrokerPosition(){
|
|
|
if(broker == null){
|
|
|
int x = 0, y = 0, noP = 0;
|
|
|
for(Port p: getDevices()){
|
|
@@ -330,19 +365,32 @@ public class MQTT_protocol implements Protocol {
|
|
|
}
|
|
|
}
|
|
|
if(noP==0)
|
|
|
- return topology;
|
|
|
- SmartDevice deletedBroker = new SmartDevice("DeltedBroker");
|
|
|
+ return;
|
|
|
deletedBroker.setX(((int)(x*1.0)/noP));
|
|
|
deletedBroker.setY(((int)(y*1.0)/noP));
|
|
|
- center = new Port(deletedBroker, (short)-1);
|
|
|
}
|
|
|
- for(Port p: pubSubs)
|
|
|
- topology.add(new Pair<Port, Port>(center, p));
|
|
|
- for(Port p: pubs)
|
|
|
- topology.add(new Pair<Port, Port>(center, p));
|
|
|
- for(Port p: subs)
|
|
|
- topology.add(new Pair<Port, Port>(center, p));
|
|
|
- return topology;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * Update the broker port on the deleted Connections
|
|
|
+ *
|
|
|
+ * @param device old broker
|
|
|
+ */
|
|
|
+ private void updateBrokerOnDeletedConnections(Port device){
|
|
|
+ for(Pair<Port, Port> p: deletedConnectionLinks){
|
|
|
+ if(broker == null){
|
|
|
+ if(p.getLeft() == device)
|
|
|
+ p.setLeft(deletedBrokerPort);
|
|
|
+ if(p.getRight() == device)
|
|
|
+ p.setRight(deletedBrokerPort);
|
|
|
+ }else{
|
|
|
+ if(p.getLeft() == deletedBrokerPort)
|
|
|
+ p.setLeft(broker);
|
|
|
+ if(p.getRight() == deletedBrokerPort)
|
|
|
+ p.setRight(broker);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|