package org.drools.grid.remote.directory;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.drools.SystemEventListenerFactory;
import org.drools.grid.internal.NodeData;
import org.drools.grid.remote.mina.MinaAcceptor;
import org.drools.grid.remote.mina.MinaIoHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MinaDirectoryRunner {
private static Logger logger = LoggerFactory.getLogger( MinaDirectoryRunner.class );
public static void main(String[] args) throws IOException {
OptionParser parser = new OptionParser();
OptionSpec<String> addressOpt = parser.accepts( "address",
"the address to bind the node" ).withRequiredArg().ofType( String.class );
OptionSpec<Integer> portOpt = parser.accepts( "port",
"the port to listen in the given address" ).withRequiredArg().ofType( Integer.class );
OptionSet options = parser.parse( args );
String address = options.valueOf( addressOpt );
int port = options.valueOf( portOpt );
logger.info( "starting server" );
SocketAddress socket = new InetSocketAddress( address,
port );
NodeData nodeData = new NodeData();
// setup Server
SocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener(),
new DirectoryServerMessageHandlerImpl(
SystemEventListenerFactory.getSystemEventListener() ) ) );
final MinaAcceptor minaAcceptor = new MinaAcceptor( acceptor,
socket );
Runtime.getRuntime().addShutdownHook( new Thread() {
@Override
public void run() {
logger.info( "stoping directory server..." );
minaAcceptor.stop();
logger.info( "server directory stoped..." );
}
} );
minaAcceptor.start();
logger.info( "directory server started at " + socket.toString() + " ... (ctrl-c to stop it)" );
new Thread(
new Runnable() {
public void run() {
while ( true ) {
try {
Thread.sleep( 10 * 1000 );
} catch ( Exception e ) {
e.printStackTrace();
}
System.out.println( "Accessor clients = " + minaAcceptor.getCurrentSessions() );
}
}
} ).start();
}
}