/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package sockets;

import java.net.*;

public class SocketUDP {
   DatagramSocket udp = null;
   int puerto = 5000;
   String nombreServidor = "";

   public SocketUDP(String nombre, int puerto) {
      nombreServidor = nombre;
      this.puerto = puerto;
      try {
         udp = new DatagramSocket();
      } catch(Exception exc) {
         udp = null;
      }
   }
   
   public String buscarServidorEnLaRed(int timeOut) {
      String ip = "";
      byte[] buf = new byte[200];
      byte[] broadCastAddress = new byte[] { (byte)255, (byte)255,(byte)255,(byte)255};
      try {
         DatagramPacket paquete = new DatagramPacket(buf, buf.length);
         paquete.setPort(puerto);
         paquete.setAddress( InetAddress.getByAddress(broadCastAddress));
         paquete.setData("buscaServidor".getBytes());
         udp.send(paquete);
         udp.setSoTimeout(timeOut);
         paquete = new DatagramPacket(buf, buf.length);
         udp.receive(paquete);
         String resp = new String(paquete.getData(), 0, paquete.getLength());
         String[] partes = resp.split(" ");
         if(partes.length == 3 && partes[0].equals("ServidorAteneo") && nombreServidor.equals(partes[1])) {
            return partes[2];
         }         
      } catch(SocketTimeoutException exc) {
         // no hago nada
      } catch(Exception exc) {
         exc.printStackTrace();
      }
      return ip;
   }
   
   public void close() {
      udp.close();
      udp = null;
   }
}
