|
@@ -0,0 +1,98 @@
|
|
|
|
+package de.tu_darmstadt.tk.SmartHomeNetworkSim.core;
|
|
|
|
+
|
|
|
|
+import java.util.Collection;
|
|
|
|
+import java.util.LinkedList;
|
|
|
|
+
|
|
|
|
+public class ConnectionImplementation implements Connection {
|
|
|
|
+
|
|
|
|
+ private Link link;
|
|
|
|
+ private LinkedList<Port> participants;
|
|
|
|
+ private Protocol protocol;
|
|
|
|
+ private double packetLossRate;
|
|
|
|
+ private byte status;
|
|
|
|
+
|
|
|
|
+ public ConnectionImplementation(Link l, Protocol p) {
|
|
|
|
+ link = l;
|
|
|
|
+ participants=new LinkedList<Port>();
|
|
|
|
+ this.protocol = p;
|
|
|
|
+ status =Connection.ACTIVE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Link getLink() {
|
|
|
|
+ return link;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Port getSource() {
|
|
|
|
+ if(participants.size()==0)return null;
|
|
|
|
+ return participants.getFirst();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Collection<Port> getParticipants() {
|
|
|
|
+ return participants;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean removeSmartDevice(Port sd) {
|
|
|
|
+ return participants.remove(sd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean addSmartDevice(Port sd) {
|
|
|
|
+ return participants.add(sd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Collection<Packet> simulateTimeInterval(long startTime, long duration) {
|
|
|
|
+ LinkedList<Packet> returnPackets=new LinkedList<Packet>();
|
|
|
|
+ returnPackets.addAll(getTerminationPackages(startTime));
|
|
|
|
+ for(Port p:participants){
|
|
|
|
+ if(p.getLastTrigger()+p.getTriggerInterval()<startTime && p.getStatus()==Port.SENDING){
|
|
|
|
+ returnPackets.addAll(protocol.generateNextPakets(p, startTime,Math.random()<packetLossRate));
|
|
|
|
+ }
|
|
|
|
+ while(p.getLastTrigger()+p.getTriggerInterval()<startTime+duration &&p.getStatus()==Port.SENDING)
|
|
|
|
+ returnPackets.addAll(protocol.generateNextPakets(p, p.getLastTrigger()+p.getTriggerInterval(),Math.random()<packetLossRate));
|
|
|
|
+ }
|
|
|
|
+ returnPackets.sort((a,b)->(Long.compare(a.getTimestamp(),b.getTimestamp())));
|
|
|
|
+ return returnPackets;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Collection<Packet> getTerminationPackages(long startTime) {
|
|
|
|
+ return protocol.generateNextPakets(null, startTime, false);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Protocol getProtocol() {
|
|
|
|
+ return protocol;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean setProtocol(Protocol protocol) {
|
|
|
|
+ this.protocol = protocol;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public byte getStatus() {
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void setStatus(byte status) {
|
|
|
|
+ this.status = status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void setPacketLossProbability(double lossPercentage) {
|
|
|
|
+ packetLossRate=lossPercentage;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public double getPacketLossProbability() {
|
|
|
|
+ return packetLossRate;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|