package org.menacheri.zombie;
import java.util.concurrent.ScheduledExecutorService;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.menacheri.jetserver.event.Events;
import org.menacheri.jetserver.event.Event;
import org.menacheri.zombie.domain.ZombieCommands;
public class TimerCanceller extends SimpleChannelUpstreamHandler
{
String type = null;
ScheduledExecutorService service = null;
public TimerCanceller(String type,ScheduledExecutorService service)
{
this.type = type;
this.service = service;
}
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
throws Exception
{
Object message = e.getMessage();
if(message instanceof Event)
{
Event event = (Event)message;
if(Events.NETWORK_MESSAGE == event.getType())
{
ChannelBuffer apocalypse = (ChannelBuffer) event.getSource();
if(apocalypse.readableBytes()>=4)
{
int cmd = apocalypse.readInt();
ZombieCommands command = ZombieCommands.CommandsEnum.fromInt(cmd);
if(command == ZombieCommands.APOCALYPSE)
{
System.out.println("Cancelling " + type + " timer due to apocalypse");
service.shutdown();
e.getChannel().close();
}
}
}
}
if(message instanceof ChannelBuffer)
{
ChannelBuffer apocalypse = (ChannelBuffer) message;
if(apocalypse.readableBytes()>=4)
{
int cmd = apocalypse.readInt();
ZombieCommands command = ZombieCommands.CommandsEnum.fromInt(cmd);
if(command == ZombieCommands.APOCALYPSE)
{
System.out.println("Cancelling " + type + " timer");
service.shutdown();
e.getChannel().close();
}
}
}
super.messageReceived(ctx, e);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception
{
System.out.println("Going to close channel in timer canceller handler");
e.getChannel().close();
}
}