View Javadoc

1   package org.eclipse.jetty.websocket;
2   
3   import org.eclipse.jetty.io.Buffer;
4   import org.eclipse.jetty.io.ByteArrayBuffer;
5   import org.eclipse.jetty.io.ThreadLocalBuffers;
6   import org.eclipse.jetty.io.nio.DirectNIOBuffer;
7   import org.eclipse.jetty.io.nio.IndirectNIOBuffer;
8   
9   
10  /* ------------------------------------------------------------ */
11  /** The WebSocket Buffer Pool.
12   * 
13   * The normal buffers are byte array buffers so that user processes
14   * can access directly.   However the generator uses direct buffers
15   * for the final output stage as they are filled in bulk and are more
16   * effecient to flush.
17   */
18  public class WebSocketBuffers
19  {
20      final private int _bufferSize;
21      final private ThreadLocalBuffers _buffers;
22      
23      public WebSocketBuffers(final int bufferSize)
24      {
25          _bufferSize=bufferSize;
26          _buffers = new ThreadLocalBuffers()
27          {
28              @Override
29              protected Buffer newHeader(int size)
30              {
31                  return new DirectNIOBuffer(bufferSize);
32              }
33              
34              @Override
35              protected Buffer newBuffer(int size)
36              {
37                  return new IndirectNIOBuffer(bufferSize);
38              }
39              
40              @Override
41              protected boolean isHeader(Buffer buffer)
42              {
43                  return buffer instanceof DirectNIOBuffer;
44              }
45          };    
46      }
47      
48      public Buffer getBuffer()
49      {
50          return _buffers.getBuffer();
51      }
52      
53      public Buffer getDirectBuffer()
54      {
55          return _buffers.getHeader();
56      }
57      
58      public void returnBuffer(Buffer buffer)
59      {
60          _buffers.returnBuffer(buffer);
61      }
62  
63      public int getBufferSize()
64      {
65          return _bufferSize;
66      }
67  }