Java tutorial
/** This file is part of Waarp Project. Copyright 2009, Frederic Bregier, and individual contributors by the @author tags. See the COPYRIGHT.txt in the distribution for a full listing of individual contributors. All Waarp Project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Waarp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Waarp . If not, see <http://www.gnu.org/licenses/>. */ package org.waarp.commandexec.server; import java.net.InetAddress; import java.net.InetSocketAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.concurrent.DefaultEventExecutorGroup; import io.netty.util.concurrent.EventExecutorGroup; import org.waarp.commandexec.utils.LocalExecDefaultResult; import org.waarp.common.logging.WaarpLoggerFactory; import org.waarp.common.logging.WaarpSlf4JLoggerFactory; import org.waarp.common.utility.DetectionUtils; import org.waarp.common.utility.WaarpNettyUtil; import org.waarp.common.utility.WaarpThreadFactory; /** * LocalExec server Main method. * * */ public class LocalExecServer { static EventLoopGroup bossGroup = new NioEventLoopGroup(); static EventLoopGroup workerGroup = new NioEventLoopGroup(); static EventExecutorGroup executor = new DefaultEventExecutorGroup(DetectionUtils.numberThreads(), new WaarpThreadFactory("LocalExecServer")); /** * Takes 3 optional arguments:<br> * - no argument: implies 127.0.0.1 + 9999 port<br> * - arguments:<br> * "addresse" "port"<br> * "addresse" "port" "default delay"<br> * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { WaarpLoggerFactory.setDefaultFactory(new WaarpSlf4JLoggerFactory(null)); int port = 9999; InetAddress addr; long delay = LocalExecDefaultResult.MAXWAITPROCESS; if (args.length >= 2) { addr = InetAddress.getByName(args[0]); port = Integer.parseInt(args[1]); if (args.length > 2) { delay = Long.parseLong(args[2]); } } else { byte[] loop = { 127, 0, 0, 1 }; addr = InetAddress.getByAddress(loop); } // Configure the server. try { ServerBootstrap bootstrap = new ServerBootstrap(); WaarpNettyUtil.setServerBootstrap(bootstrap, bossGroup, workerGroup, 30000); // Configure the pipeline factory. bootstrap.childHandler(new LocalExecServerInitializer(delay, executor)); // Bind and start to accept incoming connections only on local address. ChannelFuture future = bootstrap.bind(new InetSocketAddress(addr, port)); // Wait until the server socket is closed. future.channel().closeFuture().sync(); } finally { // Shut down all event loops to terminate all threads. bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); // Wait until all threads are terminated. bossGroup.terminationFuture().sync(); workerGroup.terminationFuture().sync(); } } }