Mercurial > hg > rlgwebd
comparison rlgterm.js @ 112:4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
Server-side, have gamemux 'end' events include the name and game, so
they can be sent to WebSockets connected to /status. This means a
WebSocket client only needs to update its choice list when it gets a
begin or end message with its own username. So it only needs to check
/pstatus/<name> at those times and can stop polling.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Mon, 16 Jul 2012 08:23:51 -0700 |
| parents | f56fdfeed01a |
| children | d7d7cdcba3b4 |
comparison
equal
deleted
inserted
replaced
| 111:f56fdfeed01a | 112:4f2b89e6fde2 |
|---|---|
| 531 statsock.close(); | 531 statsock.close(); |
| 532 statsock = null; | 532 statsock = null; |
| 533 } | 533 } |
| 534 return; | 534 return; |
| 535 } | 535 } |
| 536 if (session.lcred) { | |
| 537 /* When starting the socket, the choices list might not be initialized. */ | |
| 538 getchoices(); | |
| 539 } | |
| 536 if (statsock) | 540 if (statsock) |
| 537 return; | 541 return; |
| 538 statsock = new WebSocket("ws://" + window.location.host + "/status"); | 542 statsock = new WebSocket("ws://" + window.location.host + "/status"); |
| 539 statsock.onmessage = function (ev) { | 543 statsock.onmessage = function (ev) { |
| 540 var msg; | 544 var msg; |
| 542 msg = JSON.parse(ev.data); | 546 msg = JSON.parse(ev.data); |
| 543 } catch (e) { | 547 } catch (e) { |
| 544 if (e instanceof SyntaxError) | 548 if (e instanceof SyntaxError) |
| 545 return; | 549 return; |
| 546 } | 550 } |
| 547 if (msg.t != "t") { | 551 if (msg.t == "t") { |
| 548 return; | 552 tableCurrent(msg.g); |
| 549 } | 553 } |
| 550 tableCurrent(msg.g); | 554 else if ((msg.t == "b" || msg.t == "e") && msg.p == session.lname) { |
| 555 getchoices(); | |
| 556 } | |
| 551 }; | 557 }; |
| 552 statsock.onclose = function (ev) { | 558 statsock.onclose = function (ev) { |
| 553 statsock = null; | 559 statsock = null; |
| 554 } | 560 } |
| 555 } | 561 } |
| 556 | 562 |
| 557 function getcurrent(clear) { | 563 function getcurrent(clear) { |
| 564 if (WebSocket) { | |
| 565 return; | |
| 566 } | |
| 558 if (session.id || clear) { | 567 if (session.id || clear) { |
| 559 if (statInterval) { | 568 if (statInterval) { |
| 560 window.clearInterval(statInterval); | 569 window.clearInterval(statInterval); |
| 561 statInterval = null; | 570 statInterval = null; |
| 562 } | 571 } |
| 565 if (!statInterval) { | 574 if (!statInterval) { |
| 566 statInterval = window.setInterval(getcurrent, statDelta); | 575 statInterval = window.setInterval(getcurrent, statDelta); |
| 567 } | 576 } |
| 568 if (session.lcred) | 577 if (session.lcred) |
| 569 getchoices(); | 578 getchoices(); |
| 570 if (WebSocket) { | |
| 571 return; | |
| 572 } | |
| 573 var req = new XMLHttpRequest(); | 579 var req = new XMLHttpRequest(); |
| 574 req.onerror = errHandler; | 580 req.onerror = errHandler; |
| 575 req.onreadystatechange = function () { | 581 req.onreadystatechange = function () { |
| 576 if (req.readyState != 4 || req.status != 200) | 582 if (req.readyState != 4 || req.status != 200) |
| 577 return; | 583 return; |
