Exemple #1
0
 setTimeout(function () {
     var r = new RFB({
         port : port,
         password : '******',
         securityType : 'vnc',
     });
     
     r.on('unknownRect', function () {
         assert.fail('caught on unknownRect');
     });
     
     r.requestRedraw();
     r.dimensions(function (dims) {
         clearTimeout(to.dimensions);
         assert.eql(dims, { width : 720, height : 400 });
         setTimeout(function () {
             q.stdin.write('quit\n');
         }, 500);
     });
 }, 15000);
Exemple #2
0
var vncbot = function(cfg, onReadyCb) {

    var r = new RFB(cfg);



    r.on('raw', function(rect) {
        assert.equal(rect.bitsPerPixel, 32);

        var k = [rect.x, rect.y, rect.width, rect.height].join('|');
        if (DEBUG) {
            console.log('-> RAW ' + k);
        }
        var cb = pendingScreens[k];
        if (cb) {
            if (DEBUG) { console.log('w/ cb'); }
            var result = cb(rect);
            if (result) {
                saveRect(rect, result);
            }
        }
        else {
            if (DEBUG) { console.log('wo/ cb'); }
        }
    });

    r.on('error', function(err) {
        console.error('ERROR', err);
    });

    r.on('end', function() {
        console.log('ENDED');
    });



    r.dimensions(function(_dims) {
        dims[0] = _dims.width;
        dims[1] = _dims.height;
        if (DEBUG) { console.log('DIMS: ' + dims.join('x')); }
        if (onReadyCb) {
            onReadyCb(dims);
        }
    });

    

    var api = {

        // KEY INPUT

        sendKeysNow: function(queue) {
            queue.forEach(function(k) {
                if (DEBUG_LOW) { console.log('KEY: ' + k); }
                var kk = keyToHex(k);
                r.sendKey(kk, 1);
                r.sendKey(kk, 0);
            });
        },

        sendKeys: function(queue, dt, cb) {
            //console.log('QUEUE: ' + JSON.stringify(queue));
            var timer;
            if (!dt) { dt = 25; }

            var onTimer = function() {
                var k = queue.shift();
                var isDown;

                if (k === undefined) {
                    clearInterval(timer);
                    if (cb) { return cb(); } else { return; }
                }

                if (typeof k !== 'string' && k.length) {
                    isDown = !!k[1];
                    k = k[0];
                }

                if (DEBUG_LOW) {
                    if (isDown !== undefined) {
                        console.log('KEY: ' + k + ' ' + (isDown ? 1 : 0));
                    }
                    else {
                        console.log('KEY: ' + k);
                    }
                }

                k = keyToHex(k);

                if (isDown !== undefined) {
                    r.sendKey(k, isDown);
                }
                else {
                    r.sendKey(k, 1);
                    r.sendKey(k, 0);
                }
            };

            timer = setInterval(onTimer, dt);
        },

        sendKeyCommand: function(s, dt, cb) {
            var a = s.split('+');
            var b = clone(a).reverse();
            a = a.map(function(i) { return [i, 1]; });
            b = b.map(function(i) { return [i, 0]; });
            a = a.concat(b);
            api.sendKeys(a, dt, cb);
        },

        sendKey: function(k, isDown) {
            if (DEBUG_LOW) { console.log('KEY: ' + k + ' ' + (isDown ? 1 : 0) ); }
            if (typeof k === 'string') {
                k = keyToHex(k);
            }
            r.sendKey(k, isDown);
        },



        // POINTER INPUT

        sendPointers: function(queue, dt, cb) {
            var timer;

            var onTimer = function() {
                var p = queue.shift();
                if (p === undefined) {
                    clearInterval(timer);
                    if (cb) { return cb(); } else { return; }
                }
                if (DEBUG_LOW) { console.log('POINTER: ' + p); }
                r.sendPointer(p[0], p[1], p[2]); // x, y, mask
            };

            timer = setInterval(onTimer, dt);
        },

        sendPointer: function(x, y, mask) {
            r.sendPointer(x, y, mask);
        },

        sendClick: function(x, y) {
            r.sendPointer(x, y, 1);
            r.sendPointer(x, y, 0);
        },



        // SCREEN OUTPUT

        redraw: function(cb) {
            if (cb) {
                var k = [0, 0, dims[0], dims[1]].join('|');
                pendingScreens[k] = cb;
            }
            r.requestRedraw();
        },

        update: function(x, y, w, h, cb) {
            if (cb) {
                var k = [x, y, w, h].join('|');
                pendingScreens[k] = cb;
            }
            r.requestUpdate({x:x, y:y, width:w, height:h});
        },



        copyText: function(text) {
            r.copyText(text);
        },



        // WAITING

        wait: function(dt, cb) {
            if (!DEBUG_WAITS) {
                return setTimeout(cb, dt);
            }

            console.log('waiting ' + dt + ' ms...');
            setTimeout(function() {
                console.log('resuming');
                cb();
            }, dt);
        },



        // TERMINATE SESSION

        end: function() {
            r.end();
        }

    };

    return api;
};