//routine di invio del risultato finale allo Slave richiedente via TCP
import java.io.*;
import java.net.*;
import java.util.*;
public class sendSlave{
public static int sendRisultati(String risp, String rich){
String richiesta=rich;
String ambito;
String mail;
int ttl;
String ipSlave;
int portaSlave;
BufferedReader br = null;
PrintWriter pw =null;
String[] inLine = new String[4];
try {
br = new BufferedReader(new StringReader(richiesta));
int i=0;
while(!br.ready()){}
while(i<4){
inLine[i] = br.readLine();
i++;
}//leggo per forza 3 linee
mail= inLine[0].trim();
richiesta=inLine[1].trim();
ambito = inLine[2].trim();
ttl= (new Integer(inLine[3].trim())).intValue();
int indice1 = mail.indexOf(':');
ipSlave = mail.substring(0,indice1);
portaSlave = Integer.parseInt(mail.substring(indice1+1));
System.out.println("ricevuta risposta/file da mandare allo slave: "+ipSlave+"-"+portaSlave+": "+risp);
byte[] data;
byte[] buffer;
DatagramSocket ds;
DatagramPacket input;
DatagramPacket output;
buffer = new byte[65507];
ds = new DatagramSocket();
int UDPTCPport = ds.getLocalPort();
input=new DatagramPacket(buffer, buffer.length);
if (risp.equals("errore")){
data = "errore".getBytes();
output = new DatagramPacket(data, data.length, InetAddress.getByName(ipSlave), portaSlave);
System.out.println("dico che ho finito allo slave su : " + InetAddress.getByName(ipSlave) + "-" + portaSlave);
ds.send(output);
}
else{
data = (""+UDPTCPport).getBytes();
output = new DatagramPacket(data, data.length, InetAddress.getByName(ipSlave), portaSlave);
ds.send(output);
ds.setSoTimeout(Constants.attesaRec);
ds.receive(input);
String s=new String(input.getData(), 0,input.getLength());
if (!s.equals("errore")){
System.out.println("creo socket tcp sulla stessa porta udp mia e faccio accept(sono server)!!! Porta TCPUDP: " + UDPTCPport);
ServerSocket ss = new ServerSocket(UDPTCPport);
Socket sendFile=ss.accept();
System.out.println("spedisco il file");
br = new BufferedReader(new InputStreamReader(sendFile.getInputStream()));
pw = new PrintWriter(new BufferedOutputStream(sendFile.getOutputStream()), false);
String conf=br.readLine();
System.out.println("ho ricevuto " + conf + "; posso dare il file");
downloadFile(risp, pw);
}
}
//risp==errore-->UDP:dare errore
//risp==file-->UDP:dare ok, TCP:dare file
return 0;
}//fine try
catch (Exception e){
System.out.println("eccezione: "+e);
return -1;
}
}
private static int downloadFile(String nomeFile, PrintWriter pw){
try {
System.out.println("sono dentro a download file: "+nomeFile + " su " + pw);
FileReader fis = new FileReader(nomeFile);
BufferedReader inp = new BufferedReader(fis);
String inStr;
while ( (inStr = inp.readLine()) != null){
System.out.println("sendSlave-"+ nomeFile+"-"+inStr);
pw.println(inStr);
}
pw.flush();
pw.close();
fis.close();
System.out.println("sendSlave-"+ nomeFile+"-"+"ok, dati scritti su: " + pw + "fine flusso");
return 0;
}
catch ( Exception e){
System.out.println("sendSlave-"+ nomeFile+"-"+"errore download file");
pw.println("errore download file-"+nomeFile+"-"+e);
pw.flush();
pw.close();
return -1;
}
}//fine download file
}//fine class