Package org.menacheri.zombie

Source Code of org.menacheri.zombie.ZombieClient

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.ScheduledExecutorService;

import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import org.menacheri.jetserver.event.Events;
import org.menacheri.jetserver.util.NettyUtils;


public class ZombieClient
{
  public static final ScheduledExecutorService SERVICE;
  public static final Map<Integer, InetSocketAddress> CHANNEL_ID_ADDRESS_MAP;
 
  static {
    SERVICE = Executors.newSingleThreadScheduledExecutor();
    CHANNEL_ID_ADDRESS_MAP = new HashMap<Integer, InetSocketAddress>();
    Runtime.getRuntime().addShutdownHook(new Thread(){
      @Override
      public void run()
      {
        SERVICE.shutdown();
      }
    });
  }
 
  public static void main(String[] args) throws UnknownHostException
  {
    String host = "localhost";
    int port = 18090;
    ChannelFactory factory = new NioClientSocketChannelFactory(Executors
        .newCachedThreadPool(), Executors.newCachedThreadPool());
    final DefenderHandler defHandler = new DefenderHandler();
    PipelineFactory defFactory = new PipelineFactory(defHandler);
    final ZombieHandler zomHandler = new ZombieHandler();
    PipelineFactory zomFactory = new PipelineFactory(zomHandler);
    ClientBootstrap bootstrap = new ClientBootstrap(factory);
    // At client side option is tcpNoDelay and at server child.tcpNoDelay
    bootstrap.setOption("tcpNoDelay", true);
    bootstrap.setOption("keepAlive", true);
    for (int i = 1; i<=50;i++){
      final InetSocketAddress udpLocalAddress;
      if(i%2==0){
        bootstrap.setPipelineFactory(defFactory);
        udpLocalAddress = defHandler.connectLocal();
      }else{
        bootstrap.setPipelineFactory(zomFactory);
        udpLocalAddress = zomHandler.connectLocal();
      }
     
      ChannelFuture future = bootstrap.connect(new InetSocketAddress(host,
          port));
     
      future.addListener(new ChannelFutureListener()
      {
        @Override
        public void operationComplete(ChannelFuture future) throws Exception
        {
          ChannelBuffer loginBuffer = getLoginBuffer("Zombie_ROOM_1_REF_KEY_1",writeSocketAddressToBuffer(udpLocalAddress));
          Channel channel = future.getChannel();
          CHANNEL_ID_ADDRESS_MAP.put(channel.getId(), udpLocalAddress);
          channel.write(loginBuffer);
        }
      });
    }
  }
 
  public static ChannelBuffer getLoginBuffer(String refKey, ChannelBuffer udpAddress)
  {
    ChannelBuffer opcode = ChannelBuffers.buffer(1);
    ChannelBuffer protocol = ChannelBuffers.buffer(1);
    opcode.writeByte(Events.LOG_IN);
    protocol.writeByte(Events.PROTCOL_VERSION);
    String username = "user";
    String password = "pass";
    // write username,password and ref key.
    ChannelBuffer buffer = ChannelBuffers.wrappedBuffer(opcode,protocol,
        NettyUtils.writeStrings(username,password,refKey),udpAddress);
    return buffer;
  }
 
  public static ChannelBuffer writeSocketAddressToBuffer(InetSocketAddress localAddress){
    ChannelBuffer hostName = NettyUtils.writeString(localAddress
        .getHostName());
    ChannelBuffer portNum = ChannelBuffers.buffer(4);
    portNum.writeInt(localAddress.getPort());
    ChannelBuffer socketAddress = ChannelBuffers.wrappedBuffer(hostName,
        portNum);
    return socketAddress;
  }
}
TOP

Related Classes of org.menacheri.zombie.ZombieClient

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.