package Mundo; //---------- //NIP //Proyecto: Protect-Block //Clase: Conexion //Version: 0.2 //Creador: Alejandro Lovera - 24/09/2013 //Modificado: 26/09/2013 //---------- import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Date; /** * Clase que modela la conexi�n del cliente con el servidor como un Thread para manejar * @author Messie */ public class Conexion extends Thread{ //---------- // ATRIBUTOS //---------- /** * Atributo que modela la clase que tiene los comandos del protocolo de comunicaci�n */ private Protocolo protocolo; /** * Atributo que modela el PrintWriter de la conexi�n */ private PrintWriter out; /** * Atributo que modela el BufferedReader de la conexi�n */ private BufferedReader in; /** * Atributo que modela el sistema principal con el que se realiza la l�gica del mundo */ private Sistema sistema; //---------- // CONSTRUCTOR //---------- /** * Constructor de la conexi�n con base en los par�metros enviados desde el servidor * @param in - BufferedReader de la conexion; in != null * @param out - PrintWriter de la conexion; out != null * @param sistema - Sistema principal con el que se realiza la l�gica; sistema != null */ public Conexion (BufferedReader in, PrintWriter out, Sistema sistema){ this.in = in; this.out = out; this.sistema = sistema; } //---------- // M�TODOS //---------- /** * Metodo run del Thread conexi�n */ public void run(){ try{ recibirMensajes(); } catch( IOException e){ e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * M�todo que modela la recepci�n y env�o de los mensajes de comunicaci�n con el cliente asociado a esta conexi�n * @throws Exception */ private void recibirMensajes() throws Exception{ boolean conexionTerminada = false; String respuesta = null; while( !conexionTerminada ){ String comando = in.readLine(); System.out.println(comando); if(comando.startsWith(Protocolo.AUTENTICAR)){ //Al entrar ac� significa que esta en formato AUT##Username##Password String[] datos = comando.split("##"); String username = datos[1]; String password = datos[2]; if(sistema.conectar(username, password) != null){ respuesta = Protocolo.AUTENTICAR + "##" + Protocolo.ACEPTAR; out.println(respuesta); } } else if(comando.startsWith(Protocolo.REPORTE)){ //Al entrar ac� significa que esta en formato REP##Lat1##Long1##Lat2##Long2##Tipo##Calificacion##Usuario String[] datos = comando.split("##"); String latitud1 = datos[1]; String longitud1 = datos[2]; String latitud2 = datos[3]; String longitud2 = datos[4]; String tipo = datos[5]; int calificacion = Integer.parseInt(datos[6]); String usuario = datos[7]; Date fecha = new Date(); sistema.agregarReporte(latitud1, longitud1, latitud2, longitud2, tipo, calificacion, fecha, usuario); System.out.println("Servidor: " + Protocolo.ACEPTAR); out.println(Protocolo.ACEPTAR); } else if(comando.startsWith(Protocolo.POSICION)){ System.out.println("Lleg� una actualizaci�n de la posici�n"); String[] datos = comando.split("##"); String lati1 = datos[1]; String long1 = datos[2]; String lati2 = datos[3]; String long2 = datos[4]; double lat1 = Double.parseDouble(lati1); double lng1 = Double.parseDouble(long1); double lat2 = Double.parseDouble(lati2); double lng2 = Double.parseDouble(long2); System.out.println("PRE PRE PRE"); ArrayList<Reciente> cercanos = sistema.darReportesCercanos(lat1,lng1,lat2,lng2); for (int i = 0; i < cercanos.size(); i++) { Reciente r = cercanos.get(i); System.out.println("Se envi� un reporte reciente: "+ Protocolo.INFORMACION+"##"+r.darLatitud1()+"##"+r.darLongitud1()+"##"+ r.darLatitud2()+"##"+r.darLongitud2()+"##"+r.darColor()); out.println(Protocolo.INFORMACION+"##"+r.darLatitud1()+"##"+r.darLongitud1()+"##"+ r.darLatitud2()+"##"+r.darLongitud2()+"##"+r.darColor()); } } else if(comando.startsWith(Protocolo.DESCONECTAR)){ //Al entrar ac� significa que esta en formato DES## respuesta = Protocolo.DESCONECTAR + "##" + Protocolo.ACEPTAR; System.out.println("Servidor: " + respuesta); out.println(respuesta); conexionTerminada = true; } else if(comando.startsWith(Protocolo.ERROR)){ } else if(comando.startsWith(Protocolo.ACEPTAR)){ } else if(comando.startsWith(Protocolo.HOLA)){ respuesta = Protocolo.ACEPTAR + "##" + new Date(); System.out.println("Servidor: " + respuesta); out.println(respuesta); } else if(comando.equals(null)){ respuesta = Protocolo.ERROR; System.out.println("Servidor: " + respuesta); out.println(respuesta); } //COMANDOS POR PROTOCOLO } } }