Package org.menacheri.jetserver.server.netty

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

package org.menacheri.jetserver.server.netty;

import java.net.InetSocketAddress;

import org.jboss.netty.bootstrap.Bootstrap;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.ChannelGroupFuture;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.menacheri.jetserver.app.Session;
import org.menacheri.jetserver.service.GameAdminService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Required;


public abstract class AbstractNettyServer implements NettyServer
{
  private static final Logger LOG = LoggerFactory.getLogger(AbstractNettyServer.class);
  public static final ChannelGroup ALL_CHANNELS = new DefaultChannelGroup("JETSERVER-CHANNELS");
  protected Session session;
  protected InetSocketAddress socketAddress;
  protected int portNumber = 18090;
  protected Bootstrap serverBootstrap;
  protected ChannelPipelineFactory pipelineFactory;
  protected GameAdminService gameAdminService;
 
  public AbstractNettyServer()
  {
    super();
  }

  @Override
  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);
    }
    serverBootstrap.releaseExternalResources();
    gameAdminService.shutdown();
  }
 
  @Override
  public void configureServerBootStrap(String[] optionsList)
  {
    // For clients who do not use spring.
    if(null == serverBootstrap){
      createServerBootstrap();
    }
    serverBootstrap.setPipelineFactory(pipelineFactory);
    if (null != optionsList && optionsList.length > 0)
    {
      for (String option : optionsList)
      {
        serverBootstrap.setOption(option, true);
      }
    }
  }

  public int getPortNumber(String[] args)
  {
    if (null == args || args.length < 1)
    {
      return portNumber;
    }

    try
    {
      return Integer.parseInt(args[0]);
    }
    catch (NumberFormatException e)
    {
      LOG.error("Exception occurred while "
          + "trying to parse the port number: {}", args[0]);
      LOG.error("NumberFormatException: {}",e);
      throw e;
    }
  }
 
  @Override
  public Bootstrap getServerBootstrap()
  {
    return serverBootstrap;
  }

  @Override
  public void setServerBootstrap(Bootstrap serverBootstrap)
  {
    this.serverBootstrap = serverBootstrap;
  }
 
  @Override
  public ChannelPipelineFactory getPipelineFactory()
  {
    return pipelineFactory;
  }

  @Override
  @Required
  public void setPipelineFactory(ChannelPipelineFactory factory)
  {
    pipelineFactory = factory;
  }

  public int getPortNumber()
  {
    return portNumber;
  }

  public void setPortNumber(int portNumber)
  {
    this.portNumber = portNumber;
  }

  public GameAdminService getGameAdminService()
  {
    return gameAdminService;
  }

  public void setGameAdminService(GameAdminService gameAdminService)
  {
    this.gameAdminService = gameAdminService;
  }

  @Override
  public InetSocketAddress getSocketAddress()
  {
    return socketAddress;
  }

  public void setInetAddress(InetSocketAddress inetAddress)
  {
    this.socketAddress = inetAddress;
  }

  @Override
  public String toString()
  {
    return "NettyServer [socketAddress=" + socketAddress + ", portNumber="
        + portNumber + "]";
  }

  @Override
  public Session getSession()
  {
    return session;
  }

  @Override
  public void setSession(Session session)
  {
    this.session = session;
  }

}
TOP

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

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.