88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
|
var printCallback;
|
||
|
// sends the input to the plugin for evaluation
|
||
|
var submit = function(code,callback) {
|
||
|
printCallback = callback;
|
||
|
// postpone the evaluation until the plugin is initialized
|
||
|
plugin.whenConnected(
|
||
|
function() {
|
||
|
if (requests == 0) {
|
||
|
startLoading();
|
||
|
}
|
||
|
|
||
|
requests++;
|
||
|
plugin.remote.run(code);
|
||
|
}
|
||
|
);
|
||
|
};
|
||
|
|
||
|
// puts the message on the terminal
|
||
|
var print = function(cls, msg) {
|
||
|
printCallback(cls,msg);
|
||
|
};
|
||
|
|
||
|
|
||
|
// will restart the plugin if it does not respond
|
||
|
var disconnectTimeout = null;
|
||
|
var startLoading = function() {
|
||
|
disconnectTimeout = setTimeout(disconnect, 3000);
|
||
|
};
|
||
|
|
||
|
var endLoading = function() {
|
||
|
clearTimeout(disconnectTimeout);
|
||
|
};
|
||
|
|
||
|
var disconnect = function() {
|
||
|
plugin.disconnect();
|
||
|
};
|
||
|
|
||
|
|
||
|
// interface provided to the plugin
|
||
|
var api = {
|
||
|
output: function(data) {
|
||
|
endLoading();
|
||
|
//print('input', data.input);
|
||
|
if (data.error) {
|
||
|
print('Error', data);
|
||
|
reset();
|
||
|
} else {
|
||
|
print(null, data);
|
||
|
reset();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
// obtaining absolute path of this script
|
||
|
var scripts = document.getElementsByTagName('script');
|
||
|
var path = scripts[scripts.length-1].src
|
||
|
.split('?')[0]
|
||
|
.split('/')
|
||
|
.slice(0, -1)
|
||
|
.join('/')+'/';
|
||
|
|
||
|
|
||
|
|
||
|
var requests;
|
||
|
|
||
|
// (re)initializes the plugin
|
||
|
var reset = function() {
|
||
|
requests = 0;
|
||
|
plugin = new jailed.Plugin(path+'plugin_v0.1.5.js', api);
|
||
|
plugin.whenDisconnected( function() {
|
||
|
// give some time to handle the last responce
|
||
|
setTimeout( function() {
|
||
|
endLoading();
|
||
|
console.log("resetting on fatal plugin error");
|
||
|
codeOutput.setValue("Sorry, your code is either too slow, has a fatal error, or contains an infinite loop.");
|
||
|
reset();
|
||
|
}, 10);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
// initialize everything
|
||
|
var plugin = null;
|
||
|
|
||
|
reset();
|