Class SimulationManager

java.lang.Object
com.tt1.simserver.logic.SimulationManager
All Implemented Interfaces:
SimulationManagerInterface

public class SimulationManager extends Object implements SimulationManagerInterface
Gestor encargado de coordinar la ejecución asíncrona de una simulación específica. Proporciona hilos desde un pull para realizar el cálculo del motor sin bloquear el servidor web, a la vez que gestiona el estado y el token identificador de esta ejecución.
  • Constructor Details

    • SimulationManager

      public SimulationManager(SimulationEngineInterface simulationEngine)
      Inicializa el gestor y prepara el motor de simulación para ser lanzado.

      Precondición: simulationEngine no es nulo.

      Postcondición: Crea el gestor almacenando el motor de ejecución. El estado inicial se establece como pendiente y el token como -1.

      Parameters:
      simulationEngine - el motor lógico encargado de procesar los turnos del tablero.
  • Method Details

    • getToken

      public int getToken()
      Obtiene el identificador numérico único asignado a esta ejecución.

      Precondición: Ninguna.

      Postcondición: Devuelve el token asignado durante el arranque. Si la simulación aún no ha sido arrancada, devuelve -1 de forma predeterminada.

      Specified by:
      getToken in interface SimulationManagerInterface
      Returns:
      el token de la simulación.
    • getSimulationStatus

      public SimulationStatus getSimulationStatus()
      Consulta y devuelve el estado actual de la simulación.

      Precondición: Ninguna.

      Postcondición: Fuerza una actualización interna para revisar si el motor ha terminado y devuelve el estado resultante (pendiente, en progreso o completado).

      Specified by:
      getSimulationStatus in interface SimulationManagerInterface
      Returns:
      el estado de ejecución de la simulación.
    • updateSimulationStatus

      public void updateSimulationStatus()
      Refresca el estado interno verificando la finalización de los cálculos en el motor.

      Precondición: Ninguna.

      Postcondición: Si el motor de simulación confirma que ha procesado todos sus turnos, actualiza el estado de la simulación a completado. En caso contrario, se mantiene sin cambios.

      Specified by:
      updateSimulationStatus in interface SimulationManagerInterface
    • getSimulationResult

      public SimulationResult getSimulationResult()
      Recupera el historial de resultados generado por el motor de simulación.

      Precondición: Ninguna.

      Postcondición: Traspasa directamente el objeto de resultado devuelto por el motor interno solo si el estado actual es completado. Bloquea la entrega y devuelve nulo si la simulación todavía está pendiente o procesando turnos.

      Specified by:
      getSimulationResult in interface SimulationManagerInterface
      Returns:
      el historial de resultados, o nulo si no ha concluido.
    • startSimulation

      public int startSimulation()
      Inicia asíncronamente el procesamiento matemático de la simulación en un hilo.

      Precondición: Ninguna.

      Postcondición: Encola el motor de simulación en un hilo secundario para procesar los turnos de manera paralela. Cambia el estado a en progreso y emite un nuevo token mayor o igual a cero. Si el gestor ya fue arrancado, ignora la orden y devuelve el mismo token original para prevenir repeticiones.

      Specified by:
      startSimulation in interface SimulationManagerInterface
      Returns:
      el token numérico identificador emitido.