Mercurial > hg > rlgwebd
comparison rlgterm.js @ 108:86a458080e80
RLG-Web client: add playing through WebSockets.
Add client-side support for WebSocket play.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Sun, 15 Jul 2012 18:18:53 -0700 |
| parents | dc1414faee19 |
| children | 67b393f10c2b |
comparison
equal
deleted
inserted
replaced
| 107:b64e31c5ec31 | 108:86a458080e80 |
|---|---|
| 316 else { | 316 else { |
| 317 debug(1, "Ignoring keycode " + keynum); | 317 debug(1, "Ignoring keycode " + keynum); |
| 318 return; | 318 return; |
| 319 } | 319 } |
| 320 ev.preventDefault(); | 320 ev.preventDefault(); |
| 321 var datareq = new XMLHttpRequest(); | 321 if (session.sock) { |
| 322 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": code}; | 322 session.sock.send(JSON.stringify({"t": "d", "d": code})); |
| 323 datareq.onerror = errHandler; | 323 } |
| 324 datareq.onreadystatechange = postResponseHandler; | 324 else { |
| 325 datareq.open('POST', '/feed', true); | 325 var datareq = new XMLHttpRequest(); |
| 326 datareq.send(JSON.stringify(msgDict)); | 326 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": code}; |
| 327 datareq.onerror = errHandler; | |
| 328 datareq.onreadystatechange = postResponseHandler; | |
| 329 datareq.open('POST', '/feed', true); | |
| 330 datareq.send(JSON.stringify(msgDict)); | |
| 331 } | |
| 327 return; | 332 return; |
| 328 } | 333 } |
| 329 | 334 |
| 330 var charshifts = { '-': "5f", '=': "2b", '[': "7b", ']': "7d", '\\': "7c", | 335 var charshifts = { '-': "5f", '=': "2b", '[': "7b", ']': "7d", '\\': "7c", |
| 331 ';': "3a", '\'': "22", ',': "3c", '.': "3e", '/': "3f", '`': "7e" | 336 ';': "3a", '\'': "22", ',': "3c", '.': "3e", '/': "3f", '`': "7e" |
| 374 else if (c in kpkeys) { | 379 else if (c in kpkeys) { |
| 375 keystr = kpkeys[c]; | 380 keystr = kpkeys[c]; |
| 376 } | 381 } |
| 377 else | 382 else |
| 378 return; | 383 return; |
| 379 var datareq = new XMLHttpRequest(); | 384 if (session.sock) { |
| 380 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": keystr}; | 385 session.sock.send(JSON.stringify({"t": "d", "d": keystr})); |
| 381 datareq.onerror = errHandler; | 386 } |
| 382 datareq.onreadystatechange = postResponseHandler; | 387 else { |
| 383 datareq.open('POST', '/feed', true); | 388 var datareq = new XMLHttpRequest(); |
| 384 datareq.send(JSON.stringify(msgDict)); | 389 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": keystr}; |
| 390 datareq.onerror = errHandler; | |
| 391 datareq.onreadystatechange = postResponseHandler; | |
| 392 datareq.open('POST', '/feed', true); | |
| 393 datareq.send(JSON.stringify(msgDict)); | |
| 394 } | |
| 385 return; | 395 return; |
| 386 } | 396 } |
| 387 | 397 |
| 388 function setup() { | 398 function setup() { |
| 389 keyHexCodes.init(); | 399 keyHexCodes.init(); |
| 650 } | 660 } |
| 651 | 661 |
| 652 function startgame(game) { | 662 function startgame(game) { |
| 653 if (session.id != null || !session.lcred) | 663 if (session.id != null || !session.lcred) |
| 654 return; | 664 return; |
| 665 if (WebSocket) { | |
| 666 wsStart(game); | |
| 667 return; | |
| 668 } | |
| 655 var smsg = {}; | 669 var smsg = {}; |
| 656 smsg["key"] = session.lcred; | 670 smsg["key"] = session.lcred; |
| 657 smsg["game"] = game.uname; | 671 smsg["game"] = game.uname; |
| 658 smsg["h"] = 24; | 672 smsg["h"] = 24; |
| 659 smsg["w"] = 80; | 673 smsg["w"] = 80; |
| 693 req.open('POST', '/play', true); | 707 req.open('POST', '/play', true); |
| 694 req.send(JSON.stringify(smsg)); | 708 req.send(JSON.stringify(smsg)); |
| 695 return; | 709 return; |
| 696 } | 710 } |
| 697 | 711 |
| 712 function wsStart(game) { | |
| 713 var sockurl = "ws://" + window.location.host + "/play/" + game.uname; | |
| 714 sockurl += "?key=" + session.lcred + "&w=80&h=24"; | |
| 715 ws = new WebSocket(sockurl); | |
| 716 ws.onopen = function (event) { | |
| 717 session.id = true; | |
| 718 session.playing = true; | |
| 719 session.sock = ws; | |
| 720 setmode("play"); | |
| 721 }; | |
| 722 ws.onmessage = function (event) { | |
| 723 var msgObject = JSON.parse(event.data); | |
| 724 if (msgObject.t == 's') { | |
| 725 termemu.resize(msgObject.h, msgObject.w); | |
| 726 message("You are now playing " + msgObject.g + "."); | |
| 727 } | |
| 728 else if (msgObject.t == 'd') { | |
| 729 writeData(msgObject.d); | |
| 730 } | |
| 731 }; | |
| 732 ws.onclose = function (event) { | |
| 733 session.sock = null; | |
| 734 gameover(); | |
| 735 }; | |
| 736 } | |
| 737 | |
| 698 function startwatching(gamenumber) { | 738 function startwatching(gamenumber) { |
| 699 if (session.id != null) | 739 if (session.id != null) |
| 700 return; | 740 return; |
| 701 if (WebSocket) { | 741 if (WebSocket) { |
| 702 wsWatch(gamenumber); | 742 wsWatch(gamenumber); |
