package zerbitzari;
import java.util.ArrayList;
import erabilgarriak.DownloadFile;
import erabilgarriak.FileData;
import erabilgarriak.ServerPOA;
import erabilgarriak.ServerPackage.DownloadFileArrayHolder;
import erabilgarriak.ServerPackage.FileDataArrayHolder;
public class Zerbitzari extends ServerPOA{
ArrayList<SeedZerrenda> fitxZerrenda;
public Zerbitzari(){
fitxZerrenda = new ArrayList<SeedZerrenda>();
}
public boolean deregister(DownloadFile file) {
System.out.println("Fitxategia deregistratzen");
for(SeedZerrenda zer : fitxZerrenda){
if(zer.getFitxategi().equals(file.getFileData())){
zer.getSeedList().remove(file);
return true;
}
}
return false;
}
public boolean getFile(FileData data, DownloadFileArrayHolder files) {
System.out.println("Fitxategi eskaera: "+data.name);
try{
for(SeedZerrenda zer : fitxZerrenda){
if(zer.getFitxategi().equals(data)){
files.value = new DownloadFile[zer.getSeedList().size()];
for(int i=0; i<files.value.length; i++){
files.value[i] = zer.getSeedList().get(i);
}
System.out.println("Fitxategia bueltatzen "+files.value.length+" seeder");
return true;
}
}
}catch(Exception e){
e.printStackTrace();
}
return false;
}
public boolean getLista(FileDataArrayHolder files) {
/*ArrayList<FileData> fitx=new ArrayList<FileData>();
int kop=fitxZerrenda.size();
for(int i=0;i<kop;i++){
fitx.add(fitxZerrenda.get(i).getFitxategi());
}
try{
files.value=(FileData[]) fitx.toArray();
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;*/
FileData[] fitx = new FileData[fitxZerrenda.size()];
for(int i=0;i<fitxZerrenda.size();i++)
fitx[i] = fitxZerrenda.get(i).getFitxategi();
files.value = fitx;
return true;
}
public synchronized boolean register(DownloadFile file) {
System.out.println("Gehitzen fitxategia: "+file.getFileData().name);
for(SeedZerrenda zer : fitxZerrenda){
if(zer.getFitxategi().equals(file.getFileData())){
zer.addSeed(file);
return true;
}
}
SeedZerrenda buff = new SeedZerrenda(file.getFileData());
buff.addSeed(file);
fitxZerrenda.add(buff);
return true;
}
public class Garbitzailea extends Thread{
private boolean stopped=false;
public void interrupt(){
stopped = true;
super.interrupt();
}
public void run(){
while(!stopped){
try {
sleep(1*60*1000);
ArrayList<SeedZerrenda> szKentzeko = new ArrayList<SeedZerrenda>();
for(SeedZerrenda sz : fitxZerrenda){
ArrayList<DownloadFile> dfKentzeko = new ArrayList<DownloadFile>();
//Kentzeko seederrak bilatu eta gorde
for(DownloadFile df : sz.getSeedList()){
try{
if(df._non_existent())
dfKentzeko.add(df);
}catch(Exception e){
dfKentzeko.add(df);
}
}
//Kentzeko daudenak kendu
for(DownloadFile df : dfKentzeko){
sz.getSeedList().remove(df);
}
//SeedZerrenda hutzik gelditzen bada kentzeko jarri
if(sz.getSeedList().isEmpty()){
szKentzeko.add(sz);
}
}
for(SeedZerrenda sz : szKentzeko){
fitxZerrenda.remove(sz);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}