1 jls.loader.provide('jls.net.BufferSelectionHandler');
  2 
  3 jls.loader.require('jls.net.SelectionHandler');
  4 jls.loader.require('jls.lang.ByteBuffer');
  5 /*
  6  * TODO Allow read until string or byte array
  7  */
  8 jls.net.BufferSelectionHandler = jls.lang.Class.create(jls.net.SelectionHandler, /** @lends jls.net.BufferSelectionHandler.prototype */
  9 {
 10     /**
 11      * Creates a buffer selection handler.
 12      *
 13      * @param {jls.lang.Buffer} buffer The buffer to use.
 14      * @constructs
 15 	 * @augments jls.net.SelectionHandler
 16 	 * @class A selection handler for reading and writing a buffer.
 17      */
 18     initialize : function(buffer) {
 19         if (! (buffer instanceof jls.lang.Buffer)) {
 20             throw new jls.lang.Exception('Invalid buffer argument type (' + (typeof buffer) + ')');
 21         }
 22         this._buffer = buffer.slice();
 23     },
 24     buffer : function() {
 25         return this._buffer;
 26     },
 27     length : function() {
 28         return this._buffer.capacity();
 29     },
 30     reset : function() {
 31         this._buffer.clear();
 32         return this;
 33     },
 34     canRead : function() {
 35         return true;
 36     },
 37     canWrite : function() {
 38         return true;
 39     },
 40     onSelect : function(op, channel) {
 41         //jls.logger.info('BufferSelectionHandler.onSelect(' + op + ')' + ', remaining: ' + this._buffer.remaining() + '/' + this._buffer.capacity());
 42         if (this._buffer.remaining() == 0) {
 43             return jls.net.SelectionHandler.STATUS_DONE;
 44         }
 45         if (channel[op](this._buffer) < 0) {
 46             return jls.net.SelectionHandler.STATUS_FAILURE;
 47         }
 48         return this._buffer.remaining() == 0 ? jls.net.SelectionHandler.STATUS_DONE : jls.net.SelectionHandler.STATUS_IN_PROGRESS;
 49     },
 50     onRead : function(channel) {
 51         return this.onSelect(jls.net.SelectionHandler.OP_READ, channel);
 52     },
 53     onWrite : function(channel) {
 54         return this.onSelect(jls.net.SelectionHandler.OP_WRITE, channel);
 55     }
 56 });
 57 
 58