summaryrefslogtreecommitdiff
path: root/js/codeq
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@araneo.org>2015-10-05 14:23:22 +0200
committerTimotej Lazar <timotej.lazar@araneo.org>2015-10-05 14:23:22 +0200
commitbf5d14be83b1da487d505cb64307629ae0e7e146 (patch)
tree092421829db738b1de44dacde42e7ab4cbcc9564 /js/codeq
parent28e59b13a7c348570ee15663dc5153c5c8012794 (diff)
Update robot.js to use websockets (WIP)
Diffstat (limited to 'js/codeq')
-rw-r--r--js/codeq/robot.js75
1 files changed, 42 insertions, 33 deletions
diff --git a/js/codeq/robot.js b/js/codeq/robot.js
index 51965d4..442cfb1 100644
--- a/js/codeq/robot.js
+++ b/js/codeq/robot.js
@@ -138,7 +138,6 @@
var //problem = info.problem,
jqDescriptionContent = jqDescription.find('.description'),
jqEditor = jqCode.find('.code_editor'),
- jqTerminal = jqConsole.find('.console'),
jqHints = jqInfo.find('.hints'),
editor = codeq.makeEditor(jqEditor[0], {
mode: 'python',
@@ -146,11 +145,36 @@
value: currentSolution || ''
}),
activityHandler = codeq.makeActivityHandler(editor, problemDef.id),
- terminal = makeRobotTerminalHandler(jqTerminal, editor, problemDef.id, activityHandler),
hinter = codeq.makeHinter(jqHints, jqEditor, editor, 'robot_hints', problemDef, commonDef),
commError = function (error) {
alert(error);
- };
+ },
+ reconnectTimer = null,
+ address = '192.168.1.174:8000', // TODO get this from settings
+ url = 'ws://' + address + '/',
+ socket = eio(url);
+
+ // set up the websocket events
+ socket.on('close', function (data) {
+ console.log('websocket closed, trying to reopen in 1 s');
+ reconnectTimer = setTimeout(function () {
+ reconnectTimer = null;
+ socket.open();
+ }, 1000);
+ });
+ socket.on('message', function(data) {
+ //console.log('Received: ' + data);
+ var json_obj = JSON.parse(data),
+ sensors, sensor, text = '';
+ if (json_obj.event == 'update') {
+ sensors = json_obj.sensors;
+ for (sensor in sensors) {
+ if (!sensors.hasOwnProperty(sensor)) continue;
+ text += sensor + ': ' + sensors[sensor] + '<br />\n'
+ }
+ $('div.console').html('<p style="color: lightgreen; font-family: monospace;">'+text+'</p>');
+ }
+ });
codeq.tr.registerDictionary('robot', problemDef.translations);
codeq.tr.translateDom(jqScreen);
@@ -189,7 +213,7 @@
hinter.handle(data.hints);
}
else {
- terminal.append('error: ' + data.message);
+ commError('error: ' + data.message);
}
})
.fail(commError)
@@ -199,35 +223,12 @@
var url = 'http://' + $('#robot_ip').val() + ':8000/run',
doc = editor.getDoc();
- $.ajax(url, {
- method: 'POST',
- data: JSON.stringify({program: doc.getValue()})
- }).done(function (data) {
- if (data.code === 0) {
- terminal.append('<run>\n', 'output');
- }
- else {
- terminal.append('error: ' + data.message + '\n');
- }
- }).fail(function (jqXHR, textStatus, err) {
- commError('Could not access '+url);
- });
+ socket.send(JSON.stringify({action: 'run', program: doc.getValue()}));
});
jqBtnStop.on('click', function () {
var url = 'http://' + $('#robot_ip').val() + ':8000/stop';
- $.ajax(url, {
- method: 'POST'
- }).done(function (data) {
- if (data.code === 0) {
- terminal.append('<stop>\n', 'output');
- }
- else {
- terminal.append('error: ' + data.message + '\n');
- }
- }).fail(function (jqXHR, textStatus, err) {
- commError('Could not access '+url);
- });
+ socket.send(JSON.stringify({action: 'stop'}));
});
codeq.comms.loadProblem(problemDef.id).done();
@@ -235,19 +236,27 @@
return {
destroy: function () {
codeq.comms.endProblem().done();
+
+ if (socket) {
+ socket.off('close');
+ socket.off('message');
+ socket.close();
+ socket = null;
+ }
+ if (reconnectTimer !== null) {
+ clearTimeout(reconnectTimer);
+ reconnectTimer = null;
+ }
+
$('#screen_robot .title').text('');//empty the title text
jqAllButtons.off();
editor.off('change');
- codeq.comms.off('terminal_output'); // stop listening for the terminal events from server
activityHandler.flush();
hinter.destroy();
- terminal.destroy();
jqDescriptionContent.empty();
jqEditor.empty(); // TODO: perhaps you do not want to "free" the editor, just empty it
- jqTerminal.empty(); // TODO: the same with the console
jqDescriptionContent = null;
jqEditor = null;
- jqTerminal = null;
jqHints = null;
codeq.tr.registerDictionary('robot', codeq.tr.emptyDictionary);
}