polling.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /** @const @type {number} */
  2. var POLL_INTERVAL = 5000;
  3. function doGet(url, callback) {
  4. var xhr = new XMLHttpRequest();
  5. xhr.onreadystatechange = function(e) {
  6. if (xhr.readyState === 4) {
  7. var resp = null;
  8. if (xhr.status === 200) {
  9. resp = xhr.response;
  10. try {
  11. resp = JSON.parse(/** @type {string} */ (resp));
  12. } catch (e) {
  13. resp = null;
  14. }
  15. }
  16. callback(xhr.status, resp);
  17. }
  18. };
  19. xhr.open('GET', url, true);
  20. xhr.send(null);
  21. }
  22. function initPolling() {
  23. lazyGetPseudonyme(function(pseudo) {
  24. if (pseudo) {
  25. doGet("/api/poll?grid=" +GRID_PUBLIC_ID +"&v=" +KNOWN_VERSION, function(status, resp) {
  26. if (resp) {
  27. GRID = new Grid(resp, pseudo);
  28. if (resp["players"]) {
  29. GRID.updatePlayers(resp["players"]);
  30. if (!GRID.playerSelf)
  31. GRID.playerSelf = GRID.players[GRID.playerSelfId];
  32. onPlayersUpdated();
  33. }
  34. if (resp["grid"]) {
  35. GRID.update(resp["grid"]);
  36. uiCreateGrid();
  37. }
  38. if (resp["gridTime"]) {
  39. GRID.gridTime = parseInt(resp["gridTime"], 10);
  40. } else {
  41. scheduleNextPoll();
  42. }
  43. KNOWN_VERSION = Math.max(KNOWN_VERSION, resp["v"] || 0);
  44. } // TODO else cannot init party
  45. });
  46. } // TODO else cannot init pseudo
  47. });
  48. }
  49. function pollNow() {
  50. if (pollNow.polling !== true) {
  51. if (pollNow.pollSchedule) {
  52. clearTimeout(pollNow.pollSchedule);
  53. pollNow.pollSchedule = 0;
  54. }
  55. pollNow.polling = true;
  56. doGet("/api/poll?grid=" +GRID_PUBLIC_ID +"&v=" +KNOWN_VERSION, function(status, resp) {
  57. if (pollNow.stopped !== true) {
  58. pollNow.polling = false;
  59. if (resp) {
  60. updateOnPollResult(resp);
  61. }
  62. scheduleNextPoll();
  63. }
  64. });
  65. }
  66. }
  67. function stopPolling() {
  68. pollNow.stopped = true;
  69. if (pollNow.pollSchedule) {
  70. clearTimeout(pollNow.pollSchedule);
  71. pollNow.pollSchedule = 0;
  72. }
  73. console.log("stop polling");
  74. }
  75. function scheduleNextPoll() {
  76. pollNow.stopped = false;
  77. if (!pollNow.pollSchedule)
  78. pollNow.pollSchedule = setInterval(pollNow, POLL_INTERVAL);
  79. };