package servidor;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

public class HiloComprobarEstadoCliente extends Thread{
    int puerto;
    String ip_cliente;

    public HiloComprobarEstadoCliente(int puerto, String ip_cliente) {
        this.puerto = puerto;
        this.ip_cliente = ip_cliente;
    }
    
    @Override
    public void run() {
        //while (true) {           
            udpServidor();
        //}
    }

    public void udpServidor() {
  
            DatagramSocket aSocket = null; 
            try {
                aSocket = new DatagramSocket(); // cierrro el socket
            } catch (SocketException ex) {
                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            String mensaje = "activo";
            // buffer
            byte[] m = mensaje.getBytes();
            // host y puerto a enviar requerimiento
            InetAddress host = null;
            try {
                host = InetAddress.getByName(ip_cliente);
            } catch (UnknownHostException ex) {
                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            int puerto_cli = 9900;
            // mensaje a enviar
            DatagramPacket msj = new DatagramPacket(m, m.length, host, puerto_cli);
            try {
                // envio
                aSocket.send(msj);
            } catch (IOException ex) {
                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            // paquete mensaje a recibir
            byte[] buffer = new byte[1000];
            DatagramPacket respuesta = new DatagramPacket(buffer, buffer.length);
            try {
                aSocket.receive(respuesta);
            } catch (IOException ex) {
                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            String respcli=new String(respuesta.getData());//respuesta del cliente
            if (!respcli.equals("ok")) {
                eliminar_clienteList(ip_cliente);
            } else {
                mostrar_clienteList(ip_cliente);
            }
            // manejo de errores
        
    }
    
    private void eliminar_clienteList(String ip){
       for (HashMap mapa : Servidor.usuariosConectados) {
            Iterator<Map.Entry<String, String>> ite = mapa.entrySet().iterator();
            while (ite.hasNext()) {
                Map.Entry<String, String> e = ite.next();
                if (e.getKey().equals("ip")) {
                   if(e.getValue().contains(ip)){
                     Servidor.usuariosConectados.remove(mapa);
                     break;
                   } 
                }
            }
        } 
    }
    
    private void mostrar_clienteList(String ip){ 
       for (HashMap mapa : Servidor.usuariosConectados) {
            Iterator<Map.Entry<String, String>> ite = mapa.entrySet().iterator();
            while (ite.hasNext()) {
                Map.Entry<String, String> e = ite.next();
                if (e.getKey().equals("ip")) {
                   if(e.getValue().contains(ip)){
                     break;
                   } 
                }
            }
        } 
    }
    
}

@@ -177,47 +177,8 @@
 n;%0D%0A
-import java.net.UnknownHostException;%0D%0A
 impo
@@ -254,75 +254,8 @@
 ap;%0D
-%0Aimport java.util.logging.Level;%0D%0Aimport java.util.logging.Logger;%0D
 %0A%0D%0Ap
@@ -670,16 +670,37 @@
 () %7B%0D%0A  
+      try ( // socket
 %0D%0A      
@@ -723,61 +723,8 @@
 cket
- aSocket = null; %0D%0A            try %7B%0D%0A               
  aSo
@@ -750,17 +750,16 @@
 Socket()
-;
  // cier
@@ -785,164 +785,11 @@
     
- 
-   %7D catch (SocketException ex) %7B%0D%0A                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);%0D%0A            %7D
+) %7B
 %0D%0A  
@@ -981,262 +981,42 @@
 t = 
-null;%0D%0A            try %7B%0D%0A                host = InetAddress.getByName(ip_cliente);%0D%0A            %7D catch (UnknownHostException ex) %7B%0D%0A                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);%0D%0A            %7D
+InetAddress.getByName(ip_cliente);
 %0D%0A  
@@ -1167,39 +1167,16 @@
 _cli);%0D%0A
-            try %7B%0D%0A    
         
@@ -1189,20 +1189,16 @@
  envio%0D%0A
-    
         
@@ -1225,170 +1225,8 @@
 );%0D%0A
-            %7D catch (IOException ex) %7B%0D%0A                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);%0D%0A            %7D%0D%0A
     
@@ -1395,31 +1395,8 @@
 );%0D%0A
-            try %7B%0D%0A    
     
@@ -1436,170 +1436,8 @@
 );%0D%0A
-            %7D catch (IOException ex) %7B%0D%0A                Logger.getLogger(HiloComprobarEstadoCliente.class.getName()).log(Level.SEVERE, null, ex);%0D%0A            %7D%0D%0A
     
@@ -1734,24 +1734,219 @@
 es%0D%0A        
+%7D catch (SocketException e) %7B%0D%0A            System.out.println(%22Socket: %22 + e.getMessage());%0D%0A        %7D catch (IOException e) %7B%0D%0A            System.out.println(%22IO: %22 + e.getMessage());%0D%0A        %7D
 %0D%0A    %7D%0D%0A   

Revert "Servidor correcto"