KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > ubik > net > nio > tcp > acceptor > TCPChannelManager


1 package org.sapia.ubik.net.nio.tcp.acceptor;
2
3 import java.io.IOException JavaDoc;
4 import java.net.InetSocketAddress JavaDoc;
5 import java.nio.ByteBuffer JavaDoc;
6 import java.nio.channels.Channel JavaDoc;
7 import java.nio.channels.SelectionKey JavaDoc;
8 import java.nio.channels.Selector JavaDoc;
9 import java.nio.channels.ServerSocketChannel JavaDoc;
10 import java.nio.channels.SocketChannel JavaDoc;
11
12 import org.sapia.ubik.net.nio.ChannelHandler;
13 import org.sapia.ubik.net.nio.ChannelHandlerFactory;
14 import org.sapia.ubik.net.nio.ChannelManager;
15
16 /**
17  * Implements the <code>ChannelManager</code> interface over
18  * TCP sockets.
19  *
20  * @author Yanick Duchesne
21  *
22  * <dl>
23  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2005 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
24  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
25  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
26  * </dl>
27  */

28 public class TCPChannelManager implements ChannelManager {
29   
30   private InetSocketAddress JavaDoc _addr;
31   private ChannelHandlerFactory _factory;
32
33   public TCPChannelManager(InetSocketAddress JavaDoc addr, ChannelHandlerFactory factory){
34     _addr = addr;
35     _factory = factory;
36   }
37   
38   /**
39    * @see org.sapia.ubik.net.nio.ChannelManager#create()
40    */

41   public Channel JavaDoc create() throws IOException JavaDoc {
42     ServerSocketChannel JavaDoc chan = ServerSocketChannel.open();
43     chan.socket().bind(_addr);
44     chan.configureBlocking(true);
45     return chan;
46   }
47   
48   /**
49    * @see org.sapia.ubik.net.nio.ChannelManager#accept(java.nio.channels.Channel)
50    */

51   public Channel JavaDoc accept(Channel JavaDoc server) throws IOException JavaDoc {
52     SocketChannel JavaDoc client = ((ServerSocketChannel JavaDoc)server).accept();
53     if(client == null){
54       return null;
55     }
56     client.configureBlocking(false);
57     return client;
58   }
59   
60   /**
61    * @see org.sapia.ubik.net.nio.ChannelManager#getAddress(java.nio.channels.Channel)
62    */

63   public Object JavaDoc getAddress(Channel JavaDoc server) throws UnsupportedOperationException JavaDoc {
64     return ((ServerSocketChannel JavaDoc)server).socket().getInetAddress();
65   }
66   
67   /**
68    * @see org.sapia.ubik.net.nio.ChannelManager#register(java.nio.channels.Channel, java.nio.channels.Selector, int, java.lang.Object)
69    */

70   public SelectionKey JavaDoc register(Channel JavaDoc channel, Selector JavaDoc selector, int ops, Object JavaDoc attachment) throws IOException JavaDoc{
71     if(attachment == null){
72       return ((SocketChannel JavaDoc)channel).register(selector, ops);
73     }
74     else{
75       return ((SocketChannel JavaDoc)channel).register(selector, ops, attachment);
76     }
77   }
78   
79   /**
80    * @see org.sapia.ubik.net.nio.ChannelManager#read(java.nio.channels.Channel, java.nio.ByteBuffer)
81    */

82   public int read(Channel JavaDoc from, ByteBuffer JavaDoc to) throws IOException JavaDoc {
83     return ((SocketChannel JavaDoc)from).read(to);
84   }
85   
86   /**
87    * @see org.sapia.ubik.net.nio.ChannelManager#write(java.nio.channels.Channel, java.nio.ByteBuffer)
88    */

89   public int write(Channel JavaDoc to, ByteBuffer JavaDoc from) throws IOException JavaDoc {
90     return ((SocketChannel JavaDoc)to).write(from);
91   }
92   
93   /**
94    * @see org.sapia.ubik.net.nio.ChannelManager#createHandler()
95    */

96   public ChannelHandler createHandler() {
97     return _factory.createHandler();
98   }
99 }
100
Popular Tags