import java.io.*;
import java.util.*;
import java.net.*;
public class verificaServer extends Thread
{
private static String LogFile="Registrazioni.log";
ListaFile serverReg=new ListaFile();
final int Porta_dati=1189;
public verificaServer(ListaFile lf)
{
serverReg=lf;
}
public verificaServer()
{
}
public void
run()
{
try
{
long
inizio,cicli_di_verifica=1;
//valore in
millisecondi
long attesa=60000;
boolean
aggiornamento_necessario=false;
ListaFile temp=new ListaFile();
String
messaggio=new
String();
FileWriter
scrittoreLog;
inizio=(new Date()).getTime();
scrittoreLog=new FileWriter(LogFile,true);
System.out.println("Verificatore stato dei server partito");
while(true)
{
//condizione di inizio
verifica (ogni minuto)
if(((new
Date()).getTime())>=(inizio+(attesa*cicli_di_verifica)))
{
System.out.println("ciclo verifica
numero "+cicli_di_verifica);
synchronized(serverReg)
{
for(int j=0;j<serverReg.lista_server.length;)
{
if(serverReg.lista_server[j]==null)
{
if(j==0){System.out.println("Nessun server
attivo in questo momento");}
break;
}
try
{
if(j==0)System.out.println("inizio verifica
dei server registrati");
Socket sock=new
Socket(serverReg.lista_server[j],Porta_dati);
sock.setSoLinger(true,180);
sock.setSoTimeout(180000);
ObjectOutputStream oos=new
ObjectOutputStream(sock.getOutputStream());
ObjectInputStream ois=new ObjectInputStream(sock.getInputStream());
oos.writeObject("ancora
attivo?");
oos.flush();
messaggio=(String)ois.readObject();
System.out.println("server "+serverReg.lista_server[j]+" ancora
attivo");
//incremento qui il
contatore perchč se un server non risponde lo elimino dalla
//lista, quindi ho un
elemento in meno e cosė salterei l' ultimo server da
//contattare per la
verifica
j++;
}//try
(OK)
catch(Exception e)
{
//se ho un errore nella comunicazione presumo che il server non
sia pių attivo
temp.cancella();
System.out.println("il server "+serverReg.lista_server[j]+" non
risponde");
System.out.println("cancello il server "+serverReg.lista_server[j]+" dalla
lista");
scrittoreLog.write("il server "+serverReg.lista_server[j]+" non
risponde\r\n");
scrittoreLog.write("cancello il server "+serverReg.lista_server[j]+" dalla
lista\r\n");
for(int h=0,k=0;h<serverReg.lista_server.length;h++)
{
if(serverReg.lista_server[h]==null)
{
break;
}
if(!(serverReg.lista_server[h].equals(serverReg.lista_server[j])))
{
temp.lista_server[k]=new
String(serverReg.lista_server[h]);
//System.out.println(temp.lista_server[k]);
for(int g=0;g<serverReg.lista_file_server[h].length;g++)
{
if(serverReg.lista_file_server[h][g]==null)break;
temp.lista_file_server[k][g]=new
String(serverReg.lista_file_server[h][g]);
}
k++;
}
}
//aggiorno
la struttura serverReg
serverReg.cancella();
serverReg=temp.copia();
aggiornamento_necessario=true;
}//catch
}//for
for(int cont=0;((cont<serverReg.lista_server.length)&&(aggiornamento_necessario));cont++)
{
if(serverReg.lista_server[cont]==null)
{
if(cont!=0)
{
System.out.println("Fine
aggiornamento dei server registrati");
scrittoreLog.write("Fine
aggiornamento dei server registrati\r\n");
scrittoreLog.flush();
}
aggiornamento_necessario=false;
break;
}
else
{
try
{
new Thread(new
aggiornaFTP(serverReg.lista_server[cont],serverReg)).start();
}
catch(Exception ex)
{
System.out.println("Errore durante
l\' aggiornamento dei server");
System.out.println(ex);
}
}//else
}
}//synchro
cicli_di_verifica++;
}//if
}//while
}
catch(Exception e)
{
System.out.println("Errore generale
durante l'avvio del server che verifica le connessioni");
System.out.println(e);
}
}
}