1 package org.sapia.ubik.rmi.server.transport.nio.tcp; 2 3 import java.io.IOException ; 4 import java.net.InetSocketAddress ; 5 import java.net.UnknownHostException ; 6 import java.nio.channels.ServerSocketChannel ; 7 import java.rmi.RemoteException ; 8 9 import org.sapia.ubik.net.ServerAddress; 10 import org.sapia.ubik.net.nio.Dispatcher; 11 import org.sapia.ubik.net.nio.acceptor.Acceptor; 12 import org.sapia.ubik.net.nio.tcp.acceptor.TCPChannelManager; 13 import org.sapia.ubik.rmi.RemoteRuntimeException; 14 import org.sapia.ubik.rmi.server.Log; 15 import org.sapia.ubik.rmi.server.Server; 16 import org.sapia.ubik.util.Localhost; 17 18 33 class NioServer implements Server, AddressProvider { 34 35 private Acceptor _acceptor; 36 private NioAddress _addr; 37 38 NioServer(InetSocketAddress addr, Dispatcher dispatcher, int bufsize) { 39 RmiChannelHandlerFactory fac = new RmiChannelHandlerFactory(this, bufsize); 40 _acceptor = new Acceptor(new TCPChannelManager(addr, fac), dispatcher); 41 _acceptor.setDebug(Log.getDebugImpl()); 42 _acceptor.setBufferSize(bufsize); 43 } 44 45 48 public ServerAddress getAddress() { 49 return getServerAddress(); 50 } 51 52 55 public ServerAddress getServerAddress() { 56 if(_addr == null) { 57 ServerSocketChannel channel = (ServerSocketChannel ) _acceptor 58 .getChannel(); 59 int port = channel.socket().getLocalPort(); 60 try{ 61 _addr = new NioAddress(Localhost.getLocalAddress().getHostAddress(), port); 62 }catch(UnknownHostException e){ 63 throw new RemoteRuntimeException("Could not acquire local address", e); 64 } 65 } 66 return _addr; 67 } 68 69 72 public void start() throws RemoteException { 73 try { 74 _acceptor.start(); 75 } catch(IOException e) { 76 throw new RemoteException ("Could not start acceptor", e); 77 } 78 } 79 80 83 public void close() { 84 _acceptor.stop(); 85 } 86 } 87 | Popular Tags |