/**
*
*/
package com.teefun.task;
import java.util.List;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.teefun.model.teeworlds.TeeworldsServer;
import com.teefun.service.teeworlds.TeeworldsServerHandler;
/**
* Task used to shutdown server which timed out.
*
* @author Rajh
*
*/
@Component
public class CheckServerTask {
/**
* Class logger.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(CheckServerTask.class);
/**
* Teeworlds servers.
*/
@Resource
private TeeworldsServerHandler teeworldsServerHandler;
/**
* Remove leavers (not receiving keep alive packets).
*/
@Scheduled(fixedRate = 1 * 60 * 1000)
public void freeServers() {
LOGGER.trace("Free servers...");
try {
final List<TeeworldsServer> runningServers = this.teeworldsServerHandler.getBorrowedServers();
for (final TeeworldsServer server : runningServers) {
if (server.hasTimedOut()) {
LOGGER.debug("Server has timed out force shutdown : " + server.getServerId());
server.shutdown();
this.teeworldsServerHandler.freeServer(server);
}
if (server.hasStarted() && server.hasStopped()) {
LOGGER.debug("Server has shutdown : " + server.getServerId());
server.shutdown();
this.teeworldsServerHandler.freeServer(server);
}
}
} catch (final Exception ex) {
LOGGER.error("Error in freeServers task.", ex);
}
}
}