censeo
Version:
Run arbitrary JavaScript or PogoScript on a server
106 lines • 4.54 kB
JavaScript
(function() {
var self = this;
var botname, CenseoError;
botname = require("node-random-name");
console.log("Client name", botname);
CenseoError = function(message, code) {
this.message = message;
return this.code = code;
};
CenseoError.prototype = new Error();
CenseoError.prototype.name = "CenseoError";
CenseoError.prototype.consturctor = CenseoError;
module.exports = function(port) {
var self = this;
var requestId, newRequestId, unWrapError, running;
requestId = 0;
newRequestId = function() {
++requestId;
return botname + ":" + requestId;
};
unWrapError = function(doThrow) {
var receiveError;
return receiveError = function(error) {
return doThrow(new CenseoError(error.message));
};
};
running = function(socket, options, success) {
return socket.on("running:" + options.id, function(result) {
return success({
stop: function() {
var self = this;
return new Promise(function(success) {
socket.on("stopped:" + options.id, success);
return socket.emit("stop", options);
});
},
data: result.data
});
});
};
return {
getSocket: function() {
var self = this;
return new Promise(function(success) {
var io;
if (self.socket) {
return success(self.socket);
} else {
io = require("socket.io-client");
self.socket = io("http://localhost:" + port);
return self.socket.on("connect", function() {
return success(self.socket);
});
}
});
},
exec: function(options) {
var self = this;
var gen1_asyncResult, socket;
return new Promise(function(gen2_onFulfilled) {
gen2_onFulfilled(Promise.resolve(self.getSocket()).then(function(gen1_asyncResult) {
socket = gen1_asyncResult;
return new Promise(function(success, error) {
options.id = newRequestId();
socket.on("ran:" + options.id, success);
socket.on("error:" + options.id, unWrapError(error));
return socket.emit("run", options);
});
}));
});
},
runTask: function(func, gen3_options) {
var self = this;
var context;
context = gen3_options !== void 0 && Object.prototype.hasOwnProperty.call(gen3_options, "context") && gen3_options.context !== void 0 ? gen3_options.context : {};
var options, gen4_asyncResult, socket;
return new Promise(function(gen2_onFulfilled) {
options = {
func: func.toString(),
context: context
};
gen2_onFulfilled(Promise.resolve(self.getSocket()).then(function(gen4_asyncResult) {
socket = gen4_asyncResult;
return new Promise(function(success, error) {
options.id = newRequestId();
socket.emit("runTask", options);
socket.on("error:" + options.id, unWrapError(error));
return running(socket, options, success);
});
}));
});
},
run: function(func, gen5_options) {
var self = this;
var context;
context = gen5_options !== void 0 && Object.prototype.hasOwnProperty.call(gen5_options, "context") && gen5_options.context !== void 0 ? gen5_options.context : {};
var options;
options = {
func: func.toString(),
context: context
};
return self.exec(options, func);
}
};
};
}).call(this);