124 lines
3.2 KiB
Java
124 lines
3.2 KiB
Java
package fr.ntr;
|
|
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import fr.ntr.scheduler.Scheduler;
|
|
|
|
public class AccessPoint {
|
|
private List<User> users;
|
|
private Scheduler scheduler;
|
|
/**
|
|
* nombre de slots
|
|
*/
|
|
private static int timeSlotNb;
|
|
/**
|
|
* Nombre de sous-porteuses
|
|
*/
|
|
private static int subCarrierNb;
|
|
/**
|
|
* trame
|
|
*/
|
|
private ResourceBlock[][] frame;
|
|
/**
|
|
* Reste pour la prochaine source
|
|
*/
|
|
private double leftForNextSource;
|
|
/**
|
|
* Portée minimum et maximum de l'antenne
|
|
*/
|
|
private final double min, max;
|
|
|
|
|
|
public AccessPoint(Scheduler scheduler, ResourceBlock[][] frame, List<User> users, int timeSlotNb, int subCarrierNb, double min, double max) {
|
|
this.min = min;
|
|
this.max = max;
|
|
this.users = users;
|
|
this.scheduler = scheduler;
|
|
this.frame = frame;
|
|
this.timeSlotNb = timeSlotNb;
|
|
this.subCarrierNb = subCarrierNb;
|
|
}
|
|
|
|
/**
|
|
* Lancer la simulation
|
|
* @param duration
|
|
*/
|
|
public void startSimulation(int duration, int nbUsers) {
|
|
for (int ticks = 0; ticks < duration; ++ticks) {
|
|
// Simulation
|
|
reset();
|
|
updateBandwidth(ticks);
|
|
schedule();
|
|
// traite les données et les enregistre dans un fichier
|
|
try {
|
|
analyseData();
|
|
} catch (IOException e) {
|
|
System.out.println("Can't export data");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void updateBandwidth(int ticks) {
|
|
int n = 200;
|
|
Random random = new Random();
|
|
int timeInterval = 50 + random.nextInt(51);
|
|
for(User user : users) {
|
|
// On régénère le tableau de débits toutes les 50 ms
|
|
if(ticks % 50 == 0){
|
|
user.generateBandwidth();
|
|
}
|
|
|
|
// On régénère les sources toutes les 50-100 ms
|
|
if(ticks % timeInterval == 0){
|
|
n = user.createPackets(n);
|
|
timeInterval = 50 + random.nextInt(51);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void schedule() {
|
|
scheduler.scheduling();
|
|
}
|
|
|
|
private void analyseData() throws IOException {
|
|
try(FileOutputStream file = new FileOutputStream("data.csv", true)) {
|
|
for(int i = 0; i < frame.length; i++) {
|
|
for(int j = 0; j < frame[i].length; j++) {
|
|
ResourceBlock ur = frame[i][j];
|
|
file.write((i + ";" + j + ";" + this.users.indexOf(ur.getUser()) + ";" + ur.getBandwidth() + ";\n").getBytes());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void plotData() {
|
|
|
|
}
|
|
|
|
private void reset() {
|
|
this.users = new ArrayList<>();
|
|
this.frame = new ResourceBlock[timeSlotNb][subCarrierNb];
|
|
}
|
|
|
|
public int getFrameSize() {
|
|
return this.timeSlotNb * this.subCarrierNb;
|
|
}
|
|
|
|
public ResourceBlock[][] getFrame() {
|
|
return frame;
|
|
}
|
|
|
|
public static int getTimeSlotNb() {
|
|
return timeSlotNb;
|
|
}
|
|
|
|
public static int getSubCarrierNb() {
|
|
return subCarrierNb;
|
|
}
|
|
}
|