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