KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > rmi > server > transport > nio > tcp > NioServer


1 package org.sapia.ubik.rmi.server.transport.nio.tcp;
2
3 import java.io.IOException JavaDoc;
4 import java.net.InetSocketAddress JavaDoc;
5 import java.net.UnknownHostException JavaDoc;
6 import java.nio.channels.ServerSocketChannel JavaDoc;
7 import java.rmi.RemoteException JavaDoc;
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 /**
19  * @author Yanick Duchesne
20  *
21  * <dl>
22  * <dt><b>Copyright: </b>
23  * <dd>Copyright &#169; 2002-2005 <a HREF="http://www.sapia-oss.org">Sapia Open
24  * Source Software </a>. All Rights Reserved.</dd>
25  * </dt>
26  * <dt><b>License: </b>
27  * <dd>Read the license.txt file of the jar or visit the <a
28  * HREF="http://www.sapia-oss.org/license.html">license page </a> at the Sapia
29  * OSS web site</dd>
30  * </dt>
31  * </dl>
32  */

33 class NioServer implements Server, AddressProvider {
34
35   private Acceptor _acceptor;
36   private NioAddress _addr;
37
38   NioServer(InetSocketAddress JavaDoc 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   /**
46    * @see org.sapia.ubik.rmi.server.transport.nio.tcp.AddressProvider#getAddress()
47    */

48   public ServerAddress getAddress() {
49     return getServerAddress();
50   }
51
52   /**
53    * @see org.sapia.ubik.rmi.server.Server#getServerAddress()
54    */

55   public ServerAddress getServerAddress() {
56     if(_addr == null) {
57       ServerSocketChannel JavaDoc channel = (ServerSocketChannel JavaDoc) _acceptor
58           .getChannel();
59       int port = channel.socket().getLocalPort();
60       try{
61         _addr = new NioAddress(Localhost.getLocalAddress().getHostAddress(), port);
62       }catch(UnknownHostException JavaDoc e){
63         throw new RemoteRuntimeException("Could not acquire local address", e);
64       }
65     }
66     return _addr;
67   }
68
69   /**
70    * @see org.sapia.ubik.rmi.server.Server#start()
71    */

72   public void start() throws RemoteException JavaDoc {
73     try {
74       _acceptor.start();
75     } catch(IOException JavaDoc e) {
76       throw new RemoteException JavaDoc("Could not start acceptor", e);
77     }
78   }
79
80   /**
81    * @see org.sapia.ubik.rmi.server.Server#close()
82    */

83   public void close() {
84     _acceptor.stop();
85   }
86 }
87
Popular Tags