/**
*
*/
package vnet.sms.gateway.nettysupport.test;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author obergner
*
*/
class ReceivedMessagesPublishingServerHandler extends
SimpleChannelUpstreamHandler {
private final Logger log = LoggerFactory
.getLogger(getClass());
private final Set<ReceivedMessagesListener> listeners = new CopyOnWriteArraySet<ReceivedMessagesListener>();
public void addListener(final ReceivedMessagesListener listener) {
this.listeners.add(listener);
}
void clear() {
this.listeners.clear();
}
@Override
public void messageReceived(final ChannelHandlerContext ctx,
final MessageEvent e) throws Exception {
final Object message = e.getMessage();
this.log.debug("Received message [{}]", message);
for (final ReceivedMessagesListener listener : this.listeners) {
listener.messageReceived(message);
}
}
@Override
public void exceptionCaught(final ChannelHandlerContext ctx,
final ExceptionEvent e) throws Exception {
this.log.error("Caught exception from downstream: " + e.getCause(),
e.getCause());
e.getChannel().close();
}
@Override
public void channelDisconnected(final ChannelHandlerContext ctx,
final ChannelStateEvent e) throws Exception {
clear();
super.channelDisconnected(ctx, e);
}
}