package org.rzo.yajsw.nettyutils;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipelineCoverage;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
@ChannelPipelineCoverage("all")
public class ChannelGroupFilter extends SimpleChannelHandler
{
ChannelGroup _channels = new DefaultChannelGroup();
Condition _condition;
public ChannelGroupFilter(Condition condition)
{
_condition = condition;
}
@Override
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
{
_channels.add(ctx.getChannel());
}
@Override
public void writeRequested(ChannelHandlerContext ctx, MessageEvent e) throws Exception
{
if (_condition.isOk(ctx, e))
{
_channels.remove(ctx.getChannel());
_channels.close();
}
ctx.sendDownstream(e);
}
}