diff --git a/examples/vncviewer/rfbclient.js b/examples/vncviewer/rfbclient.js index 8645763..a1e05ab 100644 --- a/examples/vncviewer/rfbclient.js +++ b/examples/vncviewer/rfbclient.js @@ -13,6 +13,11 @@ var hexy = require('./hexy').hexy; // constants var rfb = require('./constants'); +for (var key in rfb) +{ + module.exports[key] = rfb[key]; +} + function RfbClient(stream, params) { @@ -629,154 +634,4 @@ function createConnection(params) return new RfbClient(stream, params); } - -var host = process.argv[2]; -var port = process.argv[3]; -var password = process.argv[4] -if (!host) - host = '127.0.0.1'; -if (!port) - port = 5900; - -var opts = {}; -opts.host = host; -opts.port = port; -opts.password = password; -opts.rfbfile = process.argv[5]; -//opts.rfbFileOut = process.argv[5]; - -clog(opts); - - -var x11 = require('../../lib/x11'); -var xclient = x11.createClient(); - -var r = createConnection(opts); -r.on('connect', function() { - console.log('======================== here'); - startUI(); -}); -console.log('added CONNECT handler'); - - - -function startUI() -{ - -var Exposure = x11.eventMask.Exposure; -var PointerMotion = x11.eventMask.PointerMotion; -var ButtonPress = x11.eventMask.ButtonPress; -var ButtonRelease = x11.eventMask.ButtonRelease; -var KeyPress = x11.eventMask.KeyPress; -var KeyRelease = x11.eventMask.KeyRelease; - - -xclient.on('connect', function(display) { - - var X = display.client; - X.require('big-requests', function(BigReq) { - BigReq.Enable(function(maxLen) { - - var keycode2keysym = []; - var min = display.min_keycode; - var max = display.max_keycode; - X.GetKeyboardMapping(min, max-min, function(list) { - for (var i=0; i < list.length; ++i) - { - var keycode = i + min; - var keysyms = list[i]; - keycode2keysym[keycode] = keysyms; - } - - - var root = display.screen[0].root; - var white = display.screen[0].white_pixel; - var black = display.screen[0].black_pixel; - - var wid = X.AllocID(); - X.CreateWindow( - wid, root, - 10, 10, r.width, r.height, - 1, 1, 0, - { - backgroundPixel: white, eventMask: Exposure|PointerMotion|ButtonPress|ButtonRelease|KeyPress|KeyRelease - } - ); - X.MapWindow(wid); - console.log('AAAAAAAAAAAAAAAAAAAA'); - - var gc = X.AllocID(); - X.CreateGC(gc, wid, { foreground: black, background: white } ); - X.ChangeProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 8, r.title); - - - //var pixmap1 = X.AllocID(); - //X.CreatePixmap(pixmap1, wid, 32, 128, 128); - //var pic = X.AllocID(); - //Render.CreatePicture(pic, pixmap1, Render.rgba32); - - - //var pic1 = X.AllocID(); - //Render.CreatePicture(pic1, wid, Render.rgb24); - var buttonsState = 0; - - X.on('error', function(err) { - clog(err); - }); - - X.on('event', function(ev) { - //clog(ev); - if (ev.type == 12) // expose - { - //X.PutImage(2, wid, gc, 128, 128, 0, 0, 0, 24, bitmap); - - } else if (ev.type == 6) { // mousemove - r.pointerEvent(ev.x, ev.y, buttonsState); - } else if (ev.type == 4 || ev.type == 5) { // mousedown - var buttonBit = 1 << (ev.keycode - 1); - // set button bit - if (ev.type == 4) - buttonsState |= buttonBit; - else - buttonsState &= ~buttonBit; - r.pointerEvent(ev.x, ev.y, buttonsState); - } else if (ev.type == 2 || ev.type == 3) { - //clog(keycode2keysym[ev.keycode]); - var shift = ev.buttons & 1; - //clog(shift); - var keysym = keycode2keysym[ev.keycode][shift]; - var isDown = (ev.type == 2) ? 1 : 0; - r.keyEvent(keysym, isDown); - } - }); - - r.on('resize', function(rect) - { - X.ResizeWindow(wid, rect.width, rect.height); - }); - - console.log('listening rect events'); - r.on('rect', function(rect) { - //clog('========= in handler'); - //clog(rect); - if (rect.encoding == rfb.encodings.raw) { - // format, drawable, gc, width, height, dstX, dstY, leftPad, depth, data - X.PutImage(2, wid, gc, rect.width, rect.height, rect.x, rect.y, 0, 24, rect.buffer); - } else if (rect.encoding == rfb.encodings.copyRect) { - X.CopyArea(wid, wid, gc, rect.src.x, rect.src.y, rect.x, rect.y, rect.width, rect.height); - } else if (rect.encoding == rfb.encodings.hextile) - { - clog('hextile rec!!!'); - clog(rect); - rect.on('tile', function(tile) { - clog(tile); - }); - } - }); - -}); -}); -}); -}); - -} +exports.createConnection = createConnection; diff --git a/examples/vncviewer/vncgui.js b/examples/vncviewer/vncgui.js new file mode 100644 index 0000000..40e1ac6 --- /dev/null +++ b/examples/vncviewer/vncgui.js @@ -0,0 +1,125 @@ +"use strict"; + +var rfb = require('./rfbclient'); +var x11 = require('../../lib/x11'); + +// TODO: use optimist for args parsing +var host = process.argv[2]; +var port = process.argv[3]; +var password = process.argv[4] +if (!host) + host = '127.0.0.1'; +if (!port) + port = 5900; + +var opts = {}; +opts.host = host; +opts.port = port; +opts.password = password; +opts.rfbfile = process.argv[5]; +//opts.rfbFileOut = process.argv[5]; + + + + +var Exposure = x11.eventMask.Exposure; +var PointerMotion = x11.eventMask.PointerMotion; +var ButtonPress = x11.eventMask.ButtonPress; +var ButtonRelease = x11.eventMask.ButtonRelease; +var KeyPress = x11.eventMask.KeyPress; +var KeyRelease = x11.eventMask.KeyRelease; + +x11.createClient(function(display) { + var X = display.client; + X.require('big-requests', function(BigReq) { + BigReq.Enable(function(err, maxLen) { + var keycode2keysym = []; + var min = display.min_keycode; + var max = display.max_keycode; + X.GetKeyboardMapping(min, max-min, function(err, list) { + for (var i=0; i < list.length; ++i) + { + var keycode = i + min; + var keysyms = list[i]; + keycode2keysym[keycode] = keysyms; + } + + + var root = display.screen[0].root; + var white = display.screen[0].white_pixel; + var black = display.screen[0].black_pixel; + + var r = rfb.createConnection(opts); + r.on('connect', function() { + + var wid = X.AllocID(); + X.CreateWindow(wid, root, 0, 0, r.width, r.height); + X.ChangeWindowAttributes(wid, { + backgroundPixel: black, + eventMask: Exposure|PointerMotion|ButtonPress|ButtonRelease|KeyPress|KeyRelease + }); + X.ChangeProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 8, r.title); + X.MapWindow(wid); + + var gc = X.AllocID(); + X.CreateGC(gc, wid, { foreground: black, background: white } ); + + //var pixbuf = X.AllocID(); + //X.CreatePixmap(pixbuf, wid, 32, r.width, r.height); + //var pic = X.AllocID(); + //Render.CreatePicture(pic, pixbuf, Render.rgba32); + + var buttonsState = 0; + X.on('error', function(err) { + console.log(err); + }); + + X.on('event', function(ev) { + if (ev.type == 12) // expose + { + // TODO: update only expose rect + //X.PutImage(2, wid, gc, 128, 128, 0, 0, 0, 24, bitmap); + } else if (ev.type == 6) { // mousemove + r.pointerEvent(ev.x, ev.y, buttonsState); + } else if (ev.type == 4 || ev.type == 5) { // mousedown + var buttonBit = 1 << (ev.keycode - 1); + // set button bit + if (ev.type == 4) + buttonsState |= buttonBit; + else + buttonsState &= ~buttonBit; + r.pointerEvent(ev.x, ev.y, buttonsState); + } else if (ev.type == 2 || ev.type == 3) { + var shift = ev.buttons & 1; + var keysym = keycode2keysym[ev.keycode][shift]; + var isDown = (ev.type == 2) ? 1 : 0; + r.keyEvent(keysym, isDown); + } + }); + + r.on('resize', function(rect) + { + X.ResizeWindow(wid, rect.width, rect.height); + }); + r.on('rect', function(rect) { + if (rect.encoding == rfb.encodings.raw) { + // format, drawable, gc, width, height, dstX, dstY, leftPad, depth, data + X.PutImage(2, wid, gc, rect.width, rect.height, rect.x, rect.y, 0, 24, rect.buffer); + } else if (rect.encoding == rfb.encodings.copyRect) { + X.CopyArea(wid, wid, gc, rect.src.x, rect.src.y, rect.x, rect.y, rect.width, rect.height); + } else if (rect.encoding == rfb.encodings.hextile) { + console.log('hextile rec! (currently not fully supported'); + console.log(rect); + rect.on('tile', function(tile) { + console.log(tile); + }); + } + }); + + }); // r.on('connect) + }); // GetKeyboardMapping +}); // BigReq.Enable + +}); // require('big-requests + +}); // x11.createClient