X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=d98c90210d7c3e216a0f4d7dad813bc45f96ffb7;hb=63f481e1e113ddd0a7deb36c658c83fa05d686d2;hp=d102ad027e351c10c417ce237615eebaa1a7ac4e;hpb=5874fde7896763aec2dd72109fd9bc7db9b97741;p=remoteglot diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index d102ad0..d98c902 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -127,6 +127,9 @@ var unique = null; /** @type {boolean} @private */ var enable_sound = false; +/** @type {!number} @private */ +var delay_ms = 0; + /** * Our best estimate of how many milliseconds we need to add to * new Date() to get the true UTC time. Calibrated against the @@ -257,48 +260,15 @@ var request_update = function() { current_analysis_xhr = $.ajax({ url: backend_url + "?ims=" + ims + "&unique=" + unique }).done(function(data, textstatus, xhr) { - sync_server_clock(xhr.getResponseHeader('Date')); - ims = xhr.getResponseHeader('X-RGLM'); - var num_viewers = xhr.getResponseHeader('X-RGNV'); - var new_data; - if (Array.isArray(data)) { - new_data = JSON.parse(JSON.stringify(current_analysis_data)); - JSON_delta.patch(new_data, data); - } else { - new_data = data; - } - - var minimum_version = xhr.getResponseHeader('X-RGMV'); - if (minimum_version && minimum_version > SCRIPT_VERSION) { - // Upgrade to latest version with a force-reload. - location.reload(true); - } - - // Verify that the PV makes sense. - var valid = true; - if (new_data['pv']) { - var hiddenboard = new Chess(new_data['position']['fen']); - for (var i = 0; i < new_data['pv'].length; ++i) { - if (hiddenboard.move(new_data['pv'][i]) === null) { - valid = false; - break; - } - } - } - - var timeout = 100; - if (valid) { - possibly_play_sound(current_analysis_data, new_data); - current_analysis_data = new_data; - update_board(); - update_num_viewers(num_viewers); + if (delay_ms === 0) { + process_update_response(data, textstatus, xhr); } else { - console.log("Received invalid update, waiting five seconds and trying again."); - setTimeout(function() { location.reload(true); }, 5000); + setTimeout(function() { process_update_response(data, textstatus, xhr); }, delay_ms); } // Next update. if (!backend_url.match(/history/)) { + var timeout = 100; current_analysis_request_timer = setTimeout(function() { request_update(); }, timeout); } }).fail(function(jqXHR, textStatus, errorThrown) { @@ -313,6 +283,47 @@ var request_update = function() { }); } +var process_update_response = function(data, textstatus, xhr) { + sync_server_clock(xhr.getResponseHeader('Date')); + ims = xhr.getResponseHeader('X-RGLM'); + var num_viewers = xhr.getResponseHeader('X-RGNV'); + var new_data; + if (Array.isArray(data)) { + new_data = JSON.parse(JSON.stringify(current_analysis_data)); + JSON_delta.patch(new_data, data); + } else { + new_data = data; + } + + var minimum_version = xhr.getResponseHeader('X-RGMV'); + if (minimum_version && minimum_version > SCRIPT_VERSION) { + // Upgrade to latest version with a force-reload. + location.reload(true); + } + + // Verify that the PV makes sense. + var valid = true; + if (new_data['pv']) { + var hiddenboard = new Chess(new_data['position']['fen']); + for (var i = 0; i < new_data['pv'].length; ++i) { + if (hiddenboard.move(new_data['pv'][i]) === null) { + valid = false; + break; + } + } + } + + if (valid) { + possibly_play_sound(current_analysis_data, new_data); + current_analysis_data = new_data; + update_board(); + update_num_viewers(num_viewers); + } else { + console.log("Received invalid update, waiting five seconds and trying again."); + setTimeout(function() { location.reload(true); }, 5000); + } +} + var possibly_play_sound = function(old_data, new_data) { if (!enable_sound) { return; @@ -2294,6 +2305,7 @@ var switch_backend = function(game) { window['switch_backend'] = switch_backend; window['flip'] = function() { board.flip(); redraw_arrows(); }; +window['set_delay_ms'] = function(ms) { delay_ms = ms; console.log('Delay is now ' + ms + ' ms.'); }; // Mostly from Wikipedia's chess set as of October 2022, but some pieces are from // the 2013 version, as I like those better (and it matches the 2014 PNGs; nobody