package network; import util.NetworkAddress; import java.util.HashMap; import network.connectors.ConnectorEmissionThread; /** * Emitter manager. Offers methods to:<br> * <ul> * <li> Create and run a thread for connectores emissions. * <li> Stop and wait a thread for connectores emissions. * </ul> * * @author Dalmau */ // Classe qui gere l'emetteur reseau de l'hote // Traite les demandes de creation/suppression de threads // d'emission par reseau deposees par la PF quand elle cree un connecteur deporte public class NetworkEmissionService { private HashMap<String, ConnectorEmissionThread> listeThreads; // liste des threads associes a chaque connecteur qui emet /** * Construction of a network emitter * */ public NetworkEmissionService() { listeThreads = new HashMap<String, ConnectorEmissionThread>(); // liste des noms des thread actifs (nom du connecteur) } /** * Create an emission thread for a connector. * An emission thread can send Samples or encapsulated samples according to the "type" parameter. * When a connector is part of a relai connector il sends encapsulated data because the normally sent class * of samples can be an unknown class on the relai host. * * @param nom name of the connector * @param adr a to emit messages * */ public void createConnectorEmissionThread(String nom, NetworkAddress adr) { // cree un thread pour gerer les emission d'un connecteur en sortie reseau ConnectorEmissionThread empf = new ConnectorEmissionThread(nom, adr); listeThreads.put(nom, empf); // ajouter le thread a la liste empf.start(); // le lancer } /** * Remove an emission thread for a connector * * @param nom name of the connector */ public void removeConnectorEmissionThread(String nom) { // Arreter un thread qui gerait les emission d'un connecteur en sortie reseau // et attendre qu'il se termine ConnectorEmissionThread cherche = listeThreads.get(nom); if (cherche != null) { cherche.stopThread(); //arreter le thread cherche.waitUntilStopped(); //attendre qu'il se termine listeThreads.remove(nom); // supprimer le thread de la liste } } /** * Returns the actual total number of bytes sended on network by the connectors since last measure * @return the actual total number of bytes sended on network by the connectors since last measure */ public int getNetworkTraffic() { int taille = 0; for (String cle : listeThreads.keySet()) { ConnectorEmissionThread conn = listeThreads.get(cle); int tailleConn = conn.getEmetteur().getDataSize(); conn.calculeDebitMoyen(tailleConn); taille = taille+tailleConn; } return taille; } }