package com.rzg.zombieland.server.comunicacion.controlador; import com.google.gson.Gson; import com.rzg.zombieland.comunes.comunicacion.EnviaPeticiones; import com.rzg.zombieland.comunes.comunicacion.pojo.POJOInicioSesion; import com.rzg.zombieland.comunes.comunicacion.respuesta.RespuestaGenerica; import com.rzg.zombieland.comunes.controlador.Controlador; import com.rzg.zombieland.comunes.misc.Log; import com.rzg.zombieland.server.meta.ServicioPartidas; import com.rzg.zombieland.server.sesion.Jugador; import com.rzg.zombieland.server.sesion.ManejadorSesion; import com.rzg.zombieland.server.sesion.ServicioSesion; import com.rzg.zombieland.server.sesion.Sesion; /** * Gestiona una petici�n de inicio de sesi�n, devolviendo el ID de sesi�n o un mensaje de error. * @author nicolas */ public class ControladorInicioSesion extends Controlador { // El manejador al que se le registra el jugador. private ManejadorSesion manejadorSesion; // El hilo que crea a este controlador. private EnviaPeticiones hilo; /** * Construye el controlador de inicio de sesi�n a partir del manejador. * @param manejadorSesion el manejador al que se le registrar� el jugador. */ public ControladorInicioSesion(ManejadorSesion manejadorSesion, EnviaPeticiones hilo) { if (manejadorSesion == null) throw new NullPointerException("El manejador de sesi�n no puede ser null"); if (hilo == null) throw new NullPointerException("El hilo no puede ser null"); this.manejadorSesion = manejadorSesion; this.hilo = hilo; } @Override public String procesar(String linea) { Gson gson = new Gson(); POJOInicioSesion datos = gson.fromJson(linea, POJOInicioSesion.class); Jugador jugador = Jugador.iniciarSesion(datos.getNombre(), datos.getClave()); if (jugador == null) { return gson.toJson(new RespuestaGenerica("No se pudo iniciar sesi�n. Verifique " + "el usuario y contrase�a")); } Log.info("El jugador " + jugador.getNombre() + " ha iniciado sesi�n."); if (ServicioSesion.getInstancia().getSesion(jugador) != null) { return gson.toJson(new RespuestaGenerica("Su sesi�n ya est� iniciada. " + "Intente cerrarla antes de continuar")); } Sesion sesion = new Sesion(jugador, hilo); ServicioSesion.getInstancia().addSesion(sesion); manejadorSesion.setSesion(sesion); ServicioPartidas.getInstancia().enviarPartidas(hilo); return gson.toJson(new RespuestaGenerica()); } }