package org.menacheri.zombie.domain;
import org.menacheri.jetserver.app.GameRoom;
import org.menacheri.jetserver.app.Task;
import org.menacheri.jetserver.communication.DeliveryGuaranty.DeliveryGuarantyOptions;
import org.menacheri.jetserver.communication.NettyMessageBuffer;
import org.menacheri.jetserver.event.Events;
import org.menacheri.jetserver.event.NetworkEvent;
import org.menacheri.jetserver.protocols.impl.WebSocketProtocol;
import org.menacheri.zombie.game.Messages;
public class WorldMonitor implements Task
{
private World world;
private GameRoom room;
private Object id;
public WorldMonitor(World world, GameRoom room)
{
this.world = world;
this.room = room;
}
public World getWorld()
{
return world;
}
public void setWorld(World world)
{
this.world = world;
}
@Override
public Object getId()
{
return id;
}
@Override
public void run()
{
if(world.apocalypse())
{
// Send it to all players
System.out.println("Apocalypse is here");
NetworkEvent networkEvent = Events.networkEvent(Messages.apocalypse());
room.sendBroadcast(networkEvent);
}
else
{
NetworkEvent networkEvent = null;
if(room.getProtocol() instanceof WebSocketProtocol)
{
networkEvent = Events.networkEvent(world.getAlive());
}
else
{
NettyMessageBuffer buffer = new NettyMessageBuffer();
buffer.writeInt(world.getAlive());
networkEvent = Events.networkEvent(buffer,DeliveryGuarantyOptions.FAST);
}
room.sendBroadcast(networkEvent);
}
world.report();
}
@Override
public void setId(Object id)
{
this.id = id;
}
public GameRoom getRoom()
{
return room;
}
public void setRoom(GameRoom room)
{
this.room = room;
}
}