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 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; private Random random = new Random(); public AccessPoint(Scheduler scheduler, ResourceBlock[][] frame, List 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; 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){ timeInterval = 50 + random.nextInt(51); n = user.createPackets(n, ticks); } } } /** * Génération du débit et des paquets */ private void init(int nbUsers) { // 2 groupes d'utilisateurs, proches et éloignés double[] distance = { 200d, 1000d }; for (int i = 0; i < distance.length; i++) { for(int j = 0; j < nbUsers; j++){ User user = new User(distance[i], timeSlotNb, subCarrierNb); this.users.add(user); } } } 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]; String data = (i + ";" + j + ";" + this.users.indexOf(ur.getUser()) + ";" + ur.getBandwidth() + ";\n"); System.out.println("data: " + data); file.write(data.getBytes()); } } } } private void plotData() { } private void reset() { 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; } }