Package org.menacheri.jetserver.server.netty

Source Code of org.menacheri.jetserver.server.netty.NettyTCPServer

package org.menacheri.jetserver.server.netty;

import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.concurrent.Executors;

import org.jboss.netty.bootstrap.Bootstrap;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelException;
import org.jboss.netty.channel.group.ChannelGroupFuture;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.menacheri.jetserver.concurrent.NamedThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
* This class is used for TCP IP communications with client. It uses Netty tcp
* server bootstrap for this.
*
* @author Abraham Menacherry
*
*/
public class NettyTCPServer extends AbstractNettyServer
{
  private static final Logger LOG = LoggerFactory.getLogger(NettyTCPServer.class);
 
  private String[] args;
 
  public NettyTCPServer()
  {

  }

  public void startServer(int port) throws Exception
  {
    portNumber = port;
    startServer(args);
  }
 
  @Override
  public void startServer() throws Exception
  {
    startServer(args);
  }
 
  public void startServer(String[] args) throws Exception
  {
    int portNumber = getPortNumber(args);
    InetSocketAddress socketAddress = new InetSocketAddress(portNumber);
    startServer(socketAddress);
  }

  public Bootstrap createServerBootstrap()
  {
    // TODO The thread pools should be injected from spring.
    serverBootstrap = new ServerBootstrap(
        new NioServerSocketChannelFactory(Executors
            .newCachedThreadPool(new NamedThreadFactory(
                "TCP-Server-Boss")), Executors
            .newCachedThreadPool(new NamedThreadFactory(
                "TCP-Server-Worker"))));

    return serverBootstrap;
  }

  @Override
  public TransmissionProtocol getTransmissionProtocol()
  {
    return TRANSMISSION_PROTOCOL.TCP;
  }

  @Override
  public void startServer(InetSocketAddress socketAddress)
  {
    this.socketAddress = socketAddress;
    if (null == args || args.length == 0)
    {
      String[] optionsList = new String[2];
      optionsList[0] = "child.tcpNoDelay";
      optionsList[1] = "child.keepAlive";
      configureServerBootStrap(optionsList);
    }
    else
    {
      configureServerBootStrap(args);
    }
    try
    {
      ((ServerBootstrap) serverBootstrap).bind(socketAddress);
    }
    catch (ChannelException e)
    {
      LOG.error("Unable to start TCP server due to error {}",e);
      throw e;
    }
  }

  public void stopServer() throws Exception
  {
    LOG.debug("In stopServer method of class: {}",
        this.getClass().getName());
    ChannelGroupFuture future = ALL_CHANNELS.close();
    try {
      future.await();
    } catch (InterruptedException e) {
      LOG.error("Execption occurred while waiting for channels to close: {}",e);
    }
    super.stopServer();
  }
 
  public String[] getArgs()
  {
    return args;
  }

  public void setArgs(String[] args)
  {
    this.args = args;
  }

  @Override
  public String toString()
  {
    return "NettyTCPServer [args=" + Arrays.toString(args)
        + ", socketAddress=" + socketAddress + ", portNumber=" + portNumber
        + "]";
  }
 
}
TOP

Related Classes of org.menacheri.jetserver.server.netty.NettyTCPServer

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.