package com.rzg.zombieland.server.comunicacion.controlador; import com.google.gson.Gson; import com.rzg.zombieland.comunes.comunicacion.respuesta.RespuestaGenerica; import com.rzg.zombieland.comunes.controlador.Controlador; import com.rzg.zombieland.comunes.misc.ZombielandException; import com.rzg.zombieland.server.sesion.ManejadorSesion; import com.rzg.zombieland.server.sesion.Sesion; /** * Define un controlador que requiere del inicio de sesi�n para operar. * @author nicolas * */ public abstract class ControladorConSesion extends Controlador { /** * El mensaje de error que se env�a cuando el usuario no est� autenticado. */ public static final String MENSAJE_NO_AUTENTICADO = "La acci�n requiere del inicio de sesi�n"; private ManejadorSesion manejadorSesion; /** * Construye un controlador con sesi�n. * @param manejadorSesion - el manejador de la sesi�n. * @throws ZombielandException si la sesi�n es null (es decir, el jugador no ha iniciado * sesi�n). */ public ControladorConSesion(ManejadorSesion manejadorSesion) { this.manejadorSesion = manejadorSesion; } @Override public final String procesar(String linea) { // TODO manejar mejor. if (manejadorSesion.getSesion() == null) return mensajeErrorNoAutenticado(); return procesarAutenticado(linea); } /** * @return el mensaje de error para un usuario no autenticado. Aquellos herederos que no usen * respuestas gen�ricas deber�n sobrecargar el m�todo. */ protected String mensajeErrorNoAutenticado() { return new Gson().toJson(new RespuestaGenerica(MENSAJE_NO_AUTENTICADO)); } /** * @return la sesi�n del jugador. */ protected Sesion getSesion() { return manejadorSesion.getSesion(); } /** * Procesa una respuesta una vez que ya sabemos que est� autenticado. * @param respuesta * @return la respuesta procesada. */ protected abstract String procesarAutenticado(String respuesta); }