Skip to content

Commit

Permalink
ggh
Browse files Browse the repository at this point in the history
  • Loading branch information
LiamCrypto committed Jan 2, 2021
1 parent bb0e088 commit aa06564
Show file tree
Hide file tree
Showing 13 changed files with 1,328 additions and 28 deletions.
73 changes: 73 additions & 0 deletions src/core/SimScenario.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import movement.MapBasedMovement;
import movement.MovementModel;
Expand Down Expand Up @@ -81,6 +82,15 @@ public class SimScenario implements Serializable {

/** package where to look for application classes */
private static final String APP_PACKAGE = "applications.";


private static final String BLACK_HOLES = "blackHole";
private static final String BlackHole_NUMBER = "numberOfBlackHoles";
private static final String BlackHole_ROUTER = "blackHoleRouter";





/** The world instance */
private World world;
Expand Down Expand Up @@ -117,6 +127,9 @@ public class SimScenario implements Serializable {
private List<UpdateListener> updateListeners;
/** Global application event listeners */
private List<ApplicationListener> appListeners;




static {
DTNSim.registerForReset(SimScenario.class.getCanonicalName());
Expand Down Expand Up @@ -320,6 +333,36 @@ public List<ApplicationListener> getApplicationListeners() {
*/
protected void createHosts() {
this.hosts = new ArrayList<DTNHost>();

// Based From: Lee Haines (2016) SimScenario.java [Source Code]
Settings customSettings = new Settings(BLACK_HOLES);
int nrOfBlackHoles = customSettings.getInt(BlackHole_NUMBER);
int rangeLow = 2,rangeHigh = 122;

int blackHoles[] = new int[nrOfBlackHoles];
//BH = generate n random numbers between 0 and total number of hosts
Random r = new Random();
for(int i=0;i<nrOfBlackHoles;i++){

int Result = rangeLow;//r.nextInt(rangeHigh-rangeLow) + rangeLow;
blackHoles[i] = Result;

for(int j=0;j<i;j++){
if(blackHoles[j] == blackHoles[i]){
//assign this i again
i--;
//end this inner loop now
j=i;
}
}
rangeLow++;
}
System.out.println("Creating" + nrOfBlackHoles + " Black Holes at nodes: ");
for(int i=0;i<nrOfBlackHoles;i++){
System.out.print(blackHoles[i] + " ,");
}
int currentHostNumber = -1;
//End of code use

for (int i=1; i<=nrofGroups; i++) {
List<NetworkInterface> interfaces =
Expand Down Expand Up @@ -393,6 +436,36 @@ protected void createHosts() {
for (int j=0; j<nrofHosts; j++) {
ModuleCommunicationBus comBus = new ModuleCommunicationBus();


// Adapted From: Lee Haines (2016) SimScenario.java [Source Code]

currentHostNumber++;
//specified routing protocol
mRouterProto =
(MessageRouter)s.createIntializedObject(ROUTING_PACKAGE +
s.getSetting(ROUTER_S));
//unless chosen to be a black hole
for(int k=0;k<nrOfBlackHoles;k++){
if (blackHoles[k] == currentHostNumber){
String bhRouter = customSettings.getSetting(BlackHole_ROUTER);
//change protocol to be black hole
mRouterProto =
(MessageRouter)s.createIntializedObject(ROUTING_PACKAGE +
bhRouter);
// isBlackHole = true;
k = nrOfBlackHoles; //break loop
}
}










// prototypes are given to new DTNHost which replicates
// new instances of movement model and message router
DTNHost host = new DTNHost(this.messageListeners,
Expand Down
81 changes: 81 additions & 0 deletions src/report/EmDeliveredMessagesReport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package report;

import java.util.List;

import core.DTNHost;
import core.Message;
import core.MessageListener;

public class EmDeliveredMessagesReport extends Report implements MessageListener {

public static String HEADER = "# time ID size hopcount deliveryTime " +
"fromHost toHost remainingTtl isResponse path";

/**
* Constructor.
*/
public EmDeliveredMessagesReport() {
init();
}

@Override
public void init() {
super.init();
write(HEADER);
}

/**
* Returns the given messages hop path as a string
* @param m The message
* @return hop path as a string
*/
private String getPathString(Message m) {

if(m.getId().contains("EM")) {
List<DTNHost> hops = m.getHops();
String str = m.getFrom().toString();

for (int i=1; i<hops.size(); i++) {
str += "->" + hops.get(i);
}

return str;
}
return null;
}

public void messageTransferred(Message m, DTNHost from, DTNHost to,
boolean firstDelivery) {

if(m.getId().contains("EM")) {

if (!isWarmupID(m.getId()) && firstDelivery) {
int ttl = m.getTtl();
write(format(getSimTime()) + " " + m.getId() + " " +
m.getSize() + " " + m.getHopCount() + " " +
format(getSimTime() - m.getCreationTime()) + " " +
m.getFrom() + " " + m.getTo() + " " +
(ttl != Integer.MAX_VALUE ? ttl : "n/a") +
(m.isResponse() ? " Y " : " N ") + getPathString(m));
}
}
}

public void newMessage(Message m) {
if (isWarmup()) {
addWarmupID(m.getId());
}
}

// nothing to implement for the rest
public void messageDeleted(Message m, DTNHost where, boolean dropped) {}
public void messageTransferAborted(Message m, DTNHost from, DTNHost to) {}
public void messageTransferStarted(Message m, DTNHost from, DTNHost to) {}

@Override
public void done() {
super.done();
}


}
88 changes: 88 additions & 0 deletions src/report/EmMessageDelayReport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* Copyright 2010 Aalto University, ComNet
* Released under GPLv3. See LICENSE.txt for details.
*/
package report;

import java.util.ArrayList;
import java.util.List;

import core.DTNHost;
import core.Message;
import core.MessageListener;

/**
* Reports delivered messages' delays (one line per delivered message)
* and cumulative delivery probability sorted by message delays.
* Ignores the messages that were created during the warm up period.
*/
public class EmMessageDelayReport extends Report implements MessageListener {
public static final String HEADER =
"# messageDelay cumulativeProbability";
/** all message delays */
private List<Double> delays;
private int nrofCreated;

/**
* Constructor.
*/
public EmMessageDelayReport() {
init();
}

@Override
public void init() {
super.init();
write(HEADER);
this.delays = new ArrayList<Double>();
this.nrofCreated = 0;
}

public void newMessage(Message m) {
if (isWarmup()) {
addWarmupID(m.getId());
}
else {
if(m != null) {
if(m.getAppID().contains("EM")) {
this.nrofCreated++;
}
}
}
}

public void messageTransferred(Message m, DTNHost from, DTNHost to,
boolean firstDelivery) {

if(m.getAppID().contains("EM")) {
if (firstDelivery && !isWarmupID(m.getId())) {
this.delays.add(getSimTime() - m.getCreationTime());
}
}

}

@Override
public void done() {
if (delays.size() == 0) {
write("# no messages delivered in sim time "+format(getSimTime()));
super.done();
return;
}
double cumProb = 0; // cumulative probability

java.util.Collections.sort(delays);

for (int i=0; i < delays.size(); i++) {
cumProb += 1.0/nrofCreated;
write(format(delays.get(i)) + " " + format(cumProb));
}
super.done();
}

// nothing to implement for the rest
public void messageDeleted(Message m, DTNHost where, boolean dropped) {}
public void messageTransferAborted(Message m, DTNHost from, DTNHost to) {}
public void messageTransferStarted(Message m, DTNHost from, DTNHost to) {}

}
68 changes: 68 additions & 0 deletions src/report/EmMessageDeliveryReport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package report;

import core.DTNHost;
import core.Message;

public class EmMessageDeliveryReport extends MessageDeliveryReport {

public static String HEADER="# time created delivered delivered/created";
private int created;
private int delivered;

/**
* Constructor.
*/
public EmMessageDeliveryReport() {
init();
}

@Override
public void init() {
super.init();
created = 0;
delivered = 0;
write(HEADER);
}

public void messageTransferred(Message m, DTNHost from, DTNHost to,
boolean firstDelivery) {

if(m.getId().contains("EM")) {
if (firstDelivery && !isWarmup() && !isWarmupID(m.getId())) {

delivered++;
reportValues();
}
}
}

public void newMessage(Message m) {
if (isWarmup()) {
addWarmupID(m.getId());
return;
}
if(m.getId().contains("EM")) {
created++;
reportValues();
}
}

/**
* Writes the current values to report file
*/
private void reportValues() {
double prob = (1.0 * delivered) / created;
write(format(getSimTime()) + " " + created + " " + delivered +
" " + format(prob));
}

// nothing to implement for the rest
public void messageDeleted(Message m, DTNHost where, boolean dropped) {}
public void messageTransferAborted(Message m, DTNHost from, DTNHost to) {}
public void messageTransferStarted(Message m, DTNHost from, DTNHost to) {}

@Override
public void done() {
super.done();
}
}
Loading

0 comments on commit aa06564

Please sign in to comment.