Package org.menacheri.zombie

Source Code of org.menacheri.zombie.ZombieHandler

package org.menacheri.zombie;

import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
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.jboss.netty.channel.socket.DatagramChannel;
import org.menacheri.jetserver.event.Events;
import org.menacheri.jetserver.event.Event;
import org.menacheri.zombie.domain.IAM;

public class ZombieHandler extends SimpleChannelUpstreamHandler
{
  private static final IAM I_AM = IAM.ZOMBIE;
  private static final Map<InetSocketAddress, DatagramChannel> CLIENTS = new HashMap<InetSocketAddress, DatagramChannel>();
  private final UDPClient udpClient;

  public ZombieHandler()
  {
    udpClient = new UDPClient(this, I_AM, "255.255.255.255", 18090,
        Executors.newCachedThreadPool());
  }

  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
      throws Exception
  {
    Object message = e.getMessage();
    if (message instanceof Event)
    {
      Event event = (Event) message;
      if (Events.START == event.getType())
      {
        // TCP write to server
        WriteByte write = new WriteByte(e.getChannel(), null,
            IAM.ZOMBIE);
        ZombieClient.SERVICE.scheduleAtFixedRate(write, 2000l,
            500l, TimeUnit.MILLISECONDS);
        // For UDP write to server
        connectUDP(e.getChannel());
      }
      else if (Events.LOG_IN_SUCCESS == event.getType())
      {
       
      }
      else if (Events.NETWORK_MESSAGE == event.getType())
      {
        ChannelBuffer buffer = (ChannelBuffer) event.getSource();
        if (buffer.readableBytes() >= 4)
        {
          System.out
              .println("UDP event from server in ZombieHandler: "
                  + buffer.readInt());
        }
        else
        {
          System.out
              .println("UDP Event does not have expected data in ZombieHandler");
        }
      }
      else
      {
        super.messageReceived(ctx, e);
      }
    }

  }

  public InetSocketAddress connectLocal() throws UnknownHostException
  {
    DatagramChannel c = udpClient.createDatagramChannel();
    InetSocketAddress localAddress = udpClient.getLocalAddress(c);
    CLIENTS.put(localAddress, c);
    return localAddress;
  }
 
  public void connectUDP(Channel channel)
  {
    InetSocketAddress address = ZombieClient.CHANNEL_ID_ADDRESS_MAP.get(channel.getId());
    System.out.println("UDP address for connect UDP: " + address);
    final DatagramChannel c = CLIENTS.get(address);
    if ((udpClient != null) && (c != null))
    {
      // Connect the UDP
      System.out.println("Going to connect UDP in ZombieHandler");
      Runnable runnable = new Runnable()
      {
        @Override
        public void run()
        {
          udpClient.start(c);
        }
      };
      ZombieClient.SERVICE.submit(runnable);
    }
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
      throws Exception
  {
    System.out.println("\nException caught in class ZombieHandler");
    System.out.println(e.getCause());
    e.getChannel().close();
  }
}
TOP

Related Classes of org.menacheri.zombie.ZombieHandler

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.