private ArrayList<InetAddress> contatta_Tracker(Descrittore descr) { InetAddress server = null; ObjectInputStream data_in; ObjectOutputStream data_out; InputStream in; OutputStream out; ArrayList<InetAddress> lista = null; /* socket per la comunicazione TCP */ SSLSocketFactory factory = null; SSLSocket socket = null; // ###### preparo l'indirizzo try { server = InetAddress.getByName("192.168.0.10"); } catch (UnknownHostException e1) { e1.printStackTrace(); } // ###### creo il socket if (descr == null) { System.out.println("## contatta_tracker di Download ha ricevuto parametro null ! "); return null; } System.out.println( "@ provo a contattare via TCP il Tracker a " + server.toString() + " porta " + descr.getTcp()); try { factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); socket = (SSLSocket) factory.createSocket(server, descr.getTcp()); } catch (IOException e1) { System.out.println("# eccezione nella creazione socket verso il Tracker TCP"); e1.printStackTrace(); } System.out.println("@ socket creato "); if (factory == null || socket == null) { System.out.println("## la connessione ssl di Download ha ritornato null ! "); return null; } try { System.out.println("@ out_stream "); out = socket.getOutputStream(); System.out.println("@ out "); data_out = new ObjectOutputStream(out); System.out.println("@ in_stream "); in = socket.getInputStream(); System.out.println("@ in "); data_in = new ObjectInputStream(in); System.out.println("@ Downloader: streams ok "); data_out.writeObject(descr); // TODO Perchè ? data_out.flush(); System.out.println("@ descrittore mandato "); lista = (ArrayList<InetAddress>) data_in.readObject(); if (lista == null) System.out.println( "@ ritornata lista vuota dal tracker riguardo : " + descr.nome); // TODO sarebbe un caso plausibile else System.out.println("@ lista ricevuta : " + lista.toString()); } catch (IOException e) { System.out.println("# eccezione I/O nella creazione socket verso il Tracker TCP"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("# eccezione C N F nella creazione socket verso il Tracker TCP"); e.printStackTrace(); } return lista; }
@Override public void run() { // TODO Auto-generated method stub Descrittore descr = null; System.out.println("@ Downloader partito !!"); if (Peer.prova == 0) { // contatto il server via RMI descr = contatta_server(this.nomefile); if (descr == null) { System.out.println("# RMI non ha trovato il descrittore per " + this.nomefile); return; } else if ((this.lista_peers = contatta_Tracker(descr)) == null) { System.out.println("# Downloader : problemi contattando il tracker per " + this.nomefile); return; } polling_man.aggiungi(descr.nome, (Integer) descr.getUdp()); System.out.println("ho aggiunto la porta udp"); if (Peer.gest_files.contiene(descr.nome)) System.out.println("I metadati riguardo al file " + descr.nome + "sono già in memoria"); else { FileAccess file_access = null; try { file_access = new FileAccess(new Rapp_file(descr.nome, descr.hash_array, false)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block System.out.println( "# Problemi con la creazione del file fisico di " + descr.nome + " !! "); e.printStackTrace(); return; } int is_seeder = 0; // di default a 0 (falso) // gestore file ritorna l'eventuale condizione di seeder del peer riguardo al determinato // file if ((is_seeder = Peer.gest_files.aggiungi(file_access)) == 0) { // se non è un seeder System.out.println("@ File access creato !"); vita_sociale(file_access, lista_peers); System.out.println("@ Vita sociale superato !"); } } } /* if(Peer.prova==1) //TODO togliere poi questa { FileAccess file_access=null; try { file_access = new FileAccess(new Rapp_file("babbo1", Peer.hash_babbo,false)); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block System.out.println("# Problemi con la creazione del file"); e1.printStackTrace(); } Peer.gest_files.aggiungi(file_access); System.out.println("@ File access creato !"); InetAddress mio=null; this.lista_peers=new ArrayList<InetAddress>(); try { mio=InetAddress.getLocalHost(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(mio!=null) this.lista_peers.add(mio); else System.out.println("# prendere il mio Indirizzo è andato male"); vita_sociale(file_access,this.lista_peers); System.out.println("@ Vita sociale superato !"); }*/ }