Mercurial > hg > rlgwebd
comparison rlgterm.js @ 100:3dbfdaf62623
RLG-Web: begin converting to WebSockets.
Use WebSockets for watching, if the browser supports it. Functionality
is not complete yet.
author | John "Elwin" Edwards <elwin@sdf.org> |
---|---|
date | Thu, 12 Jul 2012 22:16:15 -0700 |
parents | 8a748eac7c11 |
children | e59d68082664 |
comparison
equal
deleted
inserted
replaced
99:2880cc4372bd | 100:3dbfdaf62623 |
---|---|
80 id: null, | 80 id: null, |
81 /* Login name and key */ | 81 /* Login name and key */ |
82 lname: null, | 82 lname: null, |
83 lcred: null, | 83 lcred: null, |
84 /* Whether the game is being played or just watched. */ | 84 /* Whether the game is being played or just watched. */ |
85 playing: false | 85 playing: false, |
86 /* WebSocket for communication */ | |
87 sock: null | |
86 }; | 88 }; |
87 | 89 |
88 /* The interval ID for checking the status of current games. */ | 90 /* The interval ID for checking the status of current games. */ |
89 var statInterval = null; | 91 var statInterval = null; |
90 /* How frequently to check. */ | 92 /* How frequently to check. */ |
653 } | 655 } |
654 | 656 |
655 function startwatching(gamenumber) { | 657 function startwatching(gamenumber) { |
656 if (session.id != null) | 658 if (session.id != null) |
657 return; | 659 return; |
660 if (WebSocket) { | |
661 wsWatch(gamenumber); | |
662 return; | |
663 } | |
658 var wmsg = {"n": Number(gamenumber)}; | 664 var wmsg = {"n": Number(gamenumber)}; |
659 var req = new XMLHttpRequest(); | 665 var req = new XMLHttpRequest(); |
660 req.onerror = errHandler; | 666 req.onerror = errHandler; |
661 req.onreadystatechange = function () { | 667 req.onreadystatechange = function () { |
662 if (req.readyState != 4 || req.status != 200) | 668 if (req.readyState != 4 || req.status != 200) |
690 startwatching(n); | 696 startwatching(n); |
691 } | 697 } |
692 return watcher; | 698 return watcher; |
693 } | 699 } |
694 | 700 |
701 function wsWatch(gamenumber) { | |
702 var sockurl = "ws://localhost:8080/watch/" + String(gamenumber); | |
703 var ws = new WebSocket(sockurl); | |
704 ws.onopen = function (event) { | |
705 session.id = true; | |
706 session.sock = ws; | |
707 message("You are now watching game #" + gamenumber + "."); | |
708 setmode("watch"); | |
709 }; | |
710 ws.onmessage = function (event) { | |
711 var msgObject = JSON.parse(event.data); | |
712 if (msgObject.t == 'd') { | |
713 writeData(msgObject.d); | |
714 } | |
715 }; | |
716 ws.onclose = function (event) { | |
717 session.sock = null; | |
718 gameover(); | |
719 }; | |
720 } | |
721 | |
695 function formreg(ev) { | 722 function formreg(ev) { |
696 ev.preventDefault(); | 723 ev.preventDefault(); |
697 if (session.id != null) | 724 if (session.id != null) |
698 return; | 725 return; |
699 var regmsg = {}; | 726 var regmsg = {}; |
773 } | 800 } |
774 | 801 |
775 function stop() { | 802 function stop() { |
776 if (!session.id) | 803 if (!session.id) |
777 return; | 804 return; |
805 if (session.sock) { | |
806 session.sock.close(); | |
807 return; | |
808 } | |
778 var req = new XMLHttpRequest(); | 809 var req = new XMLHttpRequest(); |
779 req.onerror = errHandler; | 810 req.onerror = errHandler; |
780 req.onreadystatechange = function () { | 811 req.onreadystatechange = function () { |
781 if (req.readyState == 4 && req.status == 200) { | 812 if (req.readyState == 4 && req.status == 200) { |
782 processMsg(req.responseText); | 813 processMsg(req.responseText); |