1 jls.loader.provide('jls.net.Selector'); 2 3 jls.loader.requireLibrary('jls_net'); 4 5 jls.net.Selector = jls.lang.Class.create( /** @lends jls.net.Selector.prototype */ 6 { 7 /** 8 * Creates a selector. 9 * 10 * @constructs 11 * @class This class represents a multiplexor of sockets. 12 * A selector allows to detect when I/O is ready for a set of sockets 13 */ 14 initialize : function() { 15 this._selector = new _native.net.Selector(); 16 }, 17 /** 18 * Closes this selector. 19 * 20 * @returns {jls.net.Selector} This selector. 21 */ 22 close : function() { 23 this._selector.close(); 24 return this; 25 }, 26 /** 27 * Registers a socket in this selector. 28 * 29 * @param {jls.net.Socket} socket The socket to register. 30 * @param {Object} key The selection key. 31 * @param {Number} [mode] The interest set for this registration. 32 * @returns {jls.net.Selector} This selector. 33 */ 34 register : function(socket, key, mode) { 35 mode = mode || jls.net.Selector.OP_READ; 36 this._selector.register(socket.getFD(), key, mode); 37 return this; 38 }, 39 /** 40 * Removes a socket from this selector. 41 * 42 * @param {Object} key The selection key. 43 * @returns {jls.net.Selector} This selector. 44 */ 45 unregister : function(key) { 46 this._selector.unregister(key); 47 return this; 48 }, 49 /** 50 * Selects a set of keys whose corresponding channels are ready for I/O operations. 51 * 52 * @returns {Array} The selector's selected-key set. 53 * The array contains an Objects for each selected key with the following properties: 54 * 'key': the registered key, 'inFlags': the registered interest set, 'outFlags': the selected insterest set. 55 */ 56 select : function() { 57 this._selector.select(); 58 return this._selector.selectedKeys(); 59 } 60 }); 61 62 Object.extend(jls.net.Selector, /** @lends jls.net.Selector */ 63 { 64 OP_ACCEPT : _native.net.Selector.POLL_EXCEPT | _native.net.Selector.POLL_READ, // TODO 65 OP_CONNECT : _native.net.Selector.POLL_EXCEPT | _native.net.Selector.POLL_READ, // TODO 66 OP_READ : _native.net.Selector.POLL_READ, 67 OP_WRITE : _native.net.Selector.POLL_WRITE 68 }); 69 70 // TODO SelectedKey Class ?