package org.menacheri;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.PropertyConfigurator;
import org.menacheri.jetserver.app.GameRoom;
import org.menacheri.jetserver.app.Task;
import org.menacheri.jetserver.server.ServerManager;
import org.menacheri.jetserver.service.TaskManagerService;
import org.menacheri.zombie.domain.World;
import org.menacheri.zombie.domain.WorldMonitor;
import org.menacheri.zombie.game.ZombieRoom;
import org.menacheri.zombie.game.ZombieSpringConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
public class GameServer
{
private static final Logger LOG = LoggerFactory.getLogger(GameServer.class);
public static void main(String[] args)
{
PropertyConfigurator.configure(System
.getProperty("log4j.configuration"));
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(ZombieSpringConfig.class);
// For the destroy method to work.
ctx.registerShutdownHook();
// Start the main game server
ServerManager serverManager = ctx.getBean(ServerManager.class);
//serverManager.startServers(18090,843,8081);
try
{
serverManager.startServers();
}
catch (Exception e)
{
LOG.error("Unable to start servers cleanly: {}",e);
}
System.out.println("Started servers");
startGames(ctx);
}
public static void startGames(AbstractApplicationContext ctx)
{
World world = ctx.getBean(World.class);
GameRoom room1 = (GameRoom)ctx.getBean("Zombie_ROOM_1");
GameRoom room2 = (GameRoom)ctx.getBean("Zombie_ROOM_2");
Task monitor1 = new WorldMonitor(world,room1);
Task monitor2 = new WorldMonitor(world,room2);
TaskManagerService taskManager = ctx.getBean(TaskManagerService.class);
taskManager.scheduleWithFixedDelay(monitor1, 1000, 5000, TimeUnit.MILLISECONDS);
taskManager.scheduleWithFixedDelay(monitor2, 2000, 5000, TimeUnit.MILLISECONDS);
}
}