Class SimulationService

java.lang.Object
com.tt1.simserver.logic.SimulationService
All Implemented Interfaces:
SimulationServiceInterface

public class SimulationService extends Object implements SimulationServiceInterface
Servicio centralizado del negocio que coordina los usuarios, procesa peticiones web, configura los tableros iniciales y orquesta la creación y consulta de las simulaciones.
  • Constructor Details

    • SimulationService

      public SimulationService(Random random)
      Constructor para instanciar el servicio inyectando una semilla de números aleatorios custom.

      Precondición: random no es nulo.

      Postcondición: Crea el servicio con una colección de usuarios vacía y el generador de números aleatorios inyectado.

      Parameters:
      random - la instancia de generador aleatorio.
    • SimulationService

      public SimulationService()
      Constructor por defecto del servicio.

      Precondición: Ninguna.

      Postcondición: Crea el servicio inicializándolo con un generador de números aleatorios por defecto y una colección de usuarios vacía.

  • Method Details

    • getUser

      public User getUser(User user)
      Recupera un usuario en memoria o lo crea si no existe.

      Precondición: user no es nulo y tiene un nombre asignado.

      Postcondición: Funciona como caché. Si el usuario ya está registrado, devuelve la misma referencia en memoria. Si no existe, lo instancia, lo guarda en la colección y lo devuelve conservando su nombre intacto.

      Specified by:
      getUser in interface SimulationServiceInterface
      Parameters:
      user - el objeto usuario usado para buscar o registrar.
      Returns:
      la instancia persistente del usuario en el sistema.
    • existsSimulation

      public boolean existsSimulation(User user, int token)
      Comprueba si una simulación pertenece a un usuario concreto.

      Precondición: user no es nulo.

      Postcondición: Devuelve verdadero si el sistema certifica que el token consta en el registro de peticiones del usuario. Devuelve falso si el usuario no es propietario de dicho token.

      Specified by:
      existsSimulation in interface SimulationServiceInterface
      Parameters:
      user - el usuario que hace la solicitud.
      token - el identificador de la simulación a verificar.
      Returns:
      verdadero si el token pertenece al usuario, falso en caso contrario.
    • getSimulationStatus

      public SimulationStatus getSimulationStatus(User user, int token)
      Consulta el estado de una simulación vinculada a un usuario.

      Precondición: user no es nulo y es el propietario real del token indicado.

      Postcondición: Delega la consulta y retorna el estado exacto extraído directamente desde el gestor interno de esa simulación.

      Specified by:
      getSimulationStatus in interface SimulationServiceInterface
      Parameters:
      user - el usuario propietario de la simulación.
      token - el identificador de la simulación.
      Returns:
      el estado de ejecución actual de la simulación solicitada.
    • getSimulationResult

      public SimulationResult getSimulationResult(User user, int token)
      Recupera el resultado histórico de una simulación específica de un usuario.

      Precondición: user no es nulo y es el propietario real del token indicado.

      Postcondición: Extrae y devuelve el historial completo del tablero expuesto por el gestor subyacente de la simulación.

      Specified by:
      getSimulationResult in interface SimulationServiceInterface
      Parameters:
      user - el usuario propietario de la simulación.
      token - el identificador de la simulación.
      Returns:
      el objeto con el historial de resultados devuelto por el gestor.
    • getUserTokens

      public Collection<Integer> getUserTokens(User user)
      Lista todos los identificadores de simulación registrados a nombre de un usuario.

      Precondición: user no es nulo.

      Postcondición: Devuelve una colección que agrupa todos los tokens solicitados históricamente por el usuario. La colección nunca es nula, aunque el usuario no tenga simulaciones.

      Specified by:
      getUserTokens in interface SimulationServiceInterface
      Parameters:
      user - el usuario a consultar.
      Returns:
      una colección con los tokens pertenecientes al usuario.
    • requestSimulation

      public int requestSimulation(User user, Request request)
      Orquesta la creación, configuración y arranque de una nueva simulación para un usuario.

      Precondición: user y request no son nulos. Las cantidades iniciales en la solicitud son enteros no negativos.

      Postcondición: Construye un tablero de tamaño dinámico, lo puebla aleatoriamente con las criaturas solicitadas, arranca asíncronamente los cálculos de turnos y amarra la petición a la cuenta del usuario. Devuelve un token válido superior o igual a cero.

      Specified by:
      requestSimulation in interface SimulationServiceInterface
      Parameters:
      user - el usuario que solicita crear la simulación.
      request - el objeto con la especificación de criaturas a incluir.
      Returns:
      el nuevo token numérico asignado a la simulación.