Package org.menacheri.jetclient.handlers.netty

Source Code of org.menacheri.jetclient.handlers.netty.UDPUpstreamHandler

package org.menacheri.jetclient.handlers.netty;

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.jboss.netty.channel.socket.DatagramChannel;
import org.menacheri.jetclient.NettyUDPClient;
import org.menacheri.jetclient.app.Session;
import org.menacheri.jetclient.event.Events;
import org.menacheri.jetclient.event.Event;

/**
* This upstream handler handles <b>ALL</b> UDP events. It will lookup the
* appropriate session from {@link NettyUDPClient#CLIENTS} map and then transmit
* the event to that {@link Session}. <b>Note</b> If this class cannot find the
* appropriate session to transmit this event to, then the event is
* <b>silently</b> discarded.
*
* @author Abraham Menacherry.
*
*/
public class UDPUpstreamHandler extends SimpleChannelUpstreamHandler
{
  public UDPUpstreamHandler()
  {
    super();
  }

  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
      throws Exception
  {
    // Lookup the session from the local address.
    DatagramChannel datagramChannel = (DatagramChannel) e.getChannel();
    Session session = NettyUDPClient.CLIENTS.get(datagramChannel
        .getLocalAddress());
    if (null != session)
    {
      Event event = (Event) e.getMessage();
      // Pass the event on to the session
      session.onEvent(event);
    }
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
      throws Exception
  {
    System.err.println(e.getCause());
    DatagramChannel datagramChannel = (DatagramChannel) e.getChannel();
    Session session = NettyUDPClient.CLIENTS.get(datagramChannel
        .getLocalAddress());
    if (null != session)
    {
      Event event = Events.event(e, Events.EXCEPTION);
      session.onEvent(event);
    }
  }

  @Override
  public void channelDisconnected(ChannelHandlerContext ctx,
      ChannelStateEvent e) throws Exception
  {
    DatagramChannel datagramChannel = (DatagramChannel) e.getChannel();
    Session session = NettyUDPClient.CLIENTS.get(datagramChannel
        .getLocalAddress());
    if ((null != session) && !session.isShuttingDown())
    {
      Event event = Events.event(e, Events.DISCONNECT);
      session.onEvent(event);
    }
    else if (null != session)
    {
      System.out.println("Session is already shutting down. "
          + "Disconnect event will be discarded for channel {}"
          + datagramChannel.getId());
    }

  }

  @Override
  public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
      throws Exception
  {
    DatagramChannel datagramChannel = (DatagramChannel) e.getChannel();
    Session session = NettyUDPClient.CLIENTS.get(datagramChannel
        .getLocalAddress());
    if ((null != session) && !session.isShuttingDown())
    {
      Event event = Events.event(e, Events.DISCONNECT);
      session.onEvent(event);
    }
  }

}
TOP

Related Classes of org.menacheri.jetclient.handlers.netty.UDPUpstreamHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.