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 ?