rkeys
Version:
A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11
61 lines (60 loc) • 1.75 kB
JavaScript
// Generated by LiveScript 1.3.0
(function(){
var Em, _, Ws, wsocks, me;
Em = require('events').EventEmitter;
_ = require('lodash');
Ws = require('faye-websocket');
module.exports = me = import$(clone$(new Em()), {
init: function(httpServers){
var i$, len$, s, results$ = [];
wsocks = [];
for (i$ = 0, len$ = httpServers.length; i$ < len$; ++i$) {
s = httpServers[i$];
if (s) {
results$.push(s.on('upgrade', fn$));
}
}
return results$;
function fn$(req, socket, body){
var ws, addr;
if (!Ws.isWebSocket(req)) {
return;
}
wsocks.push(ws = new Ws(req, socket, body));
addr = socket.remoteAddress;
ws.on('close', function(){
return log0("disconnect " + addr);
});
ws.on('message', function(it){
var msg;
msg = JSON.parse(it.data);
return me.emit(_.keys(msg)[0], {
act: _.values(msg)[0],
ip: addr
});
});
return ws.on('open', function(){
log0("connect " + addr);
return me.emit('connect', ws);
});
}
},
broadcast: function(id, data){
var i$, ref$, len$, ws, ref1$, results$ = [];
for (i$ = 0, len$ = (ref$ = wsocks).length; i$ < len$; ++i$) {
ws = ref$[i$];
results$.push(ws.send(JSON.stringify((ref1$ = {}, ref1$[id + ""] = data, ref1$))));
}
return results$;
}
});
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
function clone$(it){
function fun(){} fun.prototype = it;
return new fun;
}
}).call(this);