View Javadoc

1   // ========================================================================
2   // Copyright (c) 2010 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.websocket;
15  
16  import org.eclipse.jetty.io.Buffer;
17  import org.eclipse.jetty.io.ThreadLocalBuffers;
18  import org.eclipse.jetty.io.nio.DirectNIOBuffer;
19  import org.eclipse.jetty.io.nio.IndirectNIOBuffer;
20  
21  
22  /* ------------------------------------------------------------ */
23  /** The WebSocket Buffer Pool.
24   * 
25   * The normal buffers are byte array buffers so that user processes
26   * can access directly.   However the generator uses direct buffers
27   * for the final output stage as they are filled in bulk and are more
28   * effecient to flush.
29   */
30  public class WebSocketBuffers
31  {
32      final private int _bufferSize;
33      final private ThreadLocalBuffers _buffers;
34      
35      public WebSocketBuffers(final int bufferSize)
36      {
37          _bufferSize=bufferSize;
38          _buffers = new ThreadLocalBuffers()
39          {
40              @Override
41              protected Buffer newHeader(int size)
42              {
43                  return new DirectNIOBuffer(bufferSize);
44              }
45              
46              @Override
47              protected Buffer newBuffer(int size)
48              {
49                  return new IndirectNIOBuffer(bufferSize);
50              }
51              
52              @Override
53              protected boolean isHeader(Buffer buffer)
54              {
55                  return buffer instanceof DirectNIOBuffer;
56              }
57          };    
58      }
59      
60      public Buffer getBuffer()
61      {
62          return _buffers.getBuffer();
63      }
64      
65      public Buffer getDirectBuffer()
66      {
67          return _buffers.getHeader();
68      }
69      
70      public void returnBuffer(Buffer buffer)
71      {
72          _buffers.returnBuffer(buffer);
73      }
74  
75      public int getBufferSize()
76      {
77          return _bufferSize;
78      }
79  }