Package org.iosgi.outpost

Source Code of org.iosgi.outpost.Server

/* 
* i-OSGi - Tunable Bundle Isolation for OSGi
* Copyright (C) 2011  Sven Schulz
*
* This program 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.
*
* This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.iosgi.outpost;

import java.net.InetSocketAddress;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import org.iosgi.outpost.util.ipr.Announcer;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.handler.codec.serialization.ObjectDecoder;
import org.jboss.netty.handler.codec.serialization.ObjectEncoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Sven Schulz
*/
public class Server {

  private static final Logger LOGGER = LoggerFactory.getLogger(Server.class);

  private static final ExecutorService EXEC_SVC = Executors
      .newSingleThreadExecutor();

  public static void main(String[] args) throws Exception {
    final Announcer a = new Announcer();
    EXEC_SVC.submit(new Callable<Void>() {
      @Override
      public Void call() throws Exception {
        try {
          a.announce(30, 1, TimeUnit.SECONDS);
        } catch (Exception e) {
          LOGGER.error("IP announcement failed", e);
        }
        return null;
      }
    });
    Server s = new Server();
    s.listen();
    while (!Thread.interrupted()) {
      Thread.sleep(1000);
    }
  }

  private final ServerBootstrap bootstrap;
  private final int port;
  private Channel channel;

  public Server() {
    this(Constants.DEFAULT_PORT);
  }

  public Server(int port) {
    this.port = port;
    bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
        Executors.newCachedThreadPool(),
        Executors.newCachedThreadPool()));
    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
      public ChannelPipeline getPipeline() throws Exception {
        return Channels.pipeline(new ObjectEncoder(),
            new ObjectDecoder(Integer.MAX_VALUE),
            new ServerHandler());
      }
    });
  }

  public void listen() {
    channel = bootstrap.bind(new InetSocketAddress(port));
  }

  public void shutdown() {
    channel.disconnect();
  }

}
TOP

Related Classes of org.iosgi.outpost.Server

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.