package com.rzg.zombieland.server.comunicacion;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Semaphore;
import com.rzg.zombieland.comunes.misc.Log;
import com.rzg.zombieland.server.juego.BucleJuego;
public class ServicioJuego {
private static ServicioJuego instancia;
private List<BucleJuego> listaBucles;
private Semaphore semaforo;
private boolean matandoHilos;
public ServicioJuego(){
listaBucles = new ArrayList<BucleJuego>();
semaforo = new Semaphore(1);
matandoHilos = false;
}
public static ServicioJuego getInstancia() {
if(instancia == null)
instancia = new ServicioJuego();
return instancia;
}
public void agregarBucle(BucleJuego bucle) {
listaBucles.add(bucle);
}
public void quitarDeLista(BucleJuego bucle) {
try {
semaforo.acquire();
if(!matandoHilos)
listaBucles.remove(bucle);
semaforo.release();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void matarBucles(){
try {
semaforo.acquire();
matandoHilos = true;
} catch (InterruptedException e1) {
}
for(BucleJuego bucle : listaBucles) {
bucle.interrupt();
try {
semaforo.release();
bucle.join();
semaforo.acquire();
} catch (InterruptedException e) {
Log.error("Houston do you copy me?");
}
}
semaforo.release();
}
}