/**
*
*/
package vnet.sms.gateway.nettysupport.publish.incoming;
import static org.apache.commons.lang.Validate.notNull;
import java.io.Serializable;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.jboss.netty.channel.ChannelHandler;
import org.jboss.netty.channel.ChannelHandlerContext;
import vnet.sms.common.wme.receive.ReceivedLoginRequestAcknowledgementEvent;
import vnet.sms.common.wme.receive.ReceivedLoginRequestEvent;
import vnet.sms.common.wme.receive.ReceivedPingRequestAcknowledgementEvent;
import vnet.sms.common.wme.receive.ReceivedPingRequestEvent;
import vnet.sms.common.wme.receive.ReceivedSmsEvent;
import vnet.sms.gateway.nettysupport.UpstreamWindowedChannelHandler;
/**
* @author obergner
*
*/
@ChannelHandler.Sharable
public class IncomingMessagesPublishingChannelHandler<ID extends Serializable>
extends UpstreamWindowedChannelHandler<ID> {
public static final String NAME = "vnet.sms.gateway:incoming-messages-publishing-handler";
private final Set<IncomingMessagesListener<ID>> listeners = new CopyOnWriteArraySet<IncomingMessagesListener<ID>>();
public void addListener(final IncomingMessagesListener<ID> listener) {
notNull(listener, "Argument 'listener' must not be null");
this.listeners.add(listener);
getLog().info("IncomingMessagesListener {} added", listener);
}
public void removeListener(final IncomingMessagesListener<ID> listener) {
notNull(listener, "Argument 'listener' must not be null");
this.listeners.remove(listener);
getLog().info("IncomingMessagesListener {} removed", listener);
}
public void clearListeners() {
getLog().info("Removing [{}] listeners", this.listeners.size());
this.listeners.clear();
}
/**
* @throws Exception
* @see vnet.sms.gateway.nettysupport.UpstreamWindowedChannelHandler#loginRequestReceived(org.jboss.netty.channel.ChannelHandlerContext,
* vnet.sms.common.wme.receive.ReceivedLoginRequestEvent)
*/
@Override
protected void loginRequestReceived(final ChannelHandlerContext ctx,
final ReceivedLoginRequestEvent<ID> e) throws Exception {
getLog().debug("Received {} - will notify [{}] listeners", e,
this.listeners.size());
for (final IncomingMessagesListener<ID> listener : this.listeners) {
listener.loginRequestReceived(e);
}
super.loginRequestReceived(ctx, e);
}
/**
* @throws Exception
* @see vnet.sms.gateway.nettysupport.UpstreamWindowedChannelHandler#loginResponseReceived(org.jboss.netty.channel.ChannelHandlerContext,
* vnet.sms.common.wme.receive.ReceivedLoginRequestAcknowledgementEvent)
*/
@Override
protected void loginResponseReceived(final ChannelHandlerContext ctx,
final ReceivedLoginRequestAcknowledgementEvent<ID> e)
throws Exception {
getLog().debug("Received {} - will notify [{}] listeners", e,
this.listeners.size());
for (final IncomingMessagesListener<ID> listener : this.listeners) {
listener.loginResponseReceived(e);
}
super.loginResponseReceived(ctx, e);
}
/**
* @throws Exception
* @see vnet.sms.gateway.nettysupport.UpstreamWindowedChannelHandler#pingRequestReceived(org.jboss.netty.channel.ChannelHandlerContext,
* vnet.sms.common.wme.receive.ReceivedPingRequestEvent)
*/
@Override
protected void pingRequestReceived(final ChannelHandlerContext ctx,
final ReceivedPingRequestEvent<ID> e) throws Exception {
getLog().debug("Received {} - will notify [{}] listeners", e,
this.listeners.size());
for (final IncomingMessagesListener<ID> listener : this.listeners) {
listener.pingRequestReceived(e);
}
super.pingRequestReceived(ctx, e);
}
/**
* @throws Exception
* @see vnet.sms.gateway.nettysupport.UpstreamWindowedChannelHandler#pingResponseReceived(org.jboss.netty.channel.ChannelHandlerContext,
* vnet.sms.common.wme.receive.ReceivedPingRequestAcknowledgementEvent)
*/
@Override
protected void pingResponseReceived(final ChannelHandlerContext ctx,
final ReceivedPingRequestAcknowledgementEvent<ID> e)
throws Exception {
getLog().debug("Received {} - will notify [{}] listeners", e,
this.listeners.size());
for (final IncomingMessagesListener<ID> listener : this.listeners) {
listener.pingResponseReceived(e);
}
super.pingResponseReceived(ctx, e);
}
/**
* @throws Exception
* @see vnet.sms.gateway.nettysupport.UpstreamWindowedChannelHandler#smsReceived(org.jboss.netty.channel.ChannelHandlerContext,
* vnet.sms.common.wme.receive.ReceivedSmsEvent)
*/
@Override
protected void smsReceived(final ChannelHandlerContext ctx,
final ReceivedSmsEvent<ID> e) throws Exception {
getLog().debug("Received {} - will notify [{}] listeners", e,
this.listeners.size());
for (final IncomingMessagesListener<ID> listener : this.listeners) {
listener.smsReceived(e);
}
super.smsReceived(ctx, e);
}
}