annotate rlgterm.js @ 170:50e4c9feeac2

RLGWebD: fix simultaneous player bug. Multiple games can now run at the same time, and data will be sent to the proper place. The interaction of multiple players with watchers has not yet been tested.
author John "Elwin" Edwards
date Fri, 09 Jan 2015 13:06:41 -0500
parents 0f6da35b27a0
children bf518a00190b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
1 /* rlgterm.js: Roguelike Gallery's driver for termemu.js */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
2
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
3 /* Data on the available games. */
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
4 var games = {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
5 "rogue3": {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
6 "name": "Rogue V3",
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
7 "uname": "rogue3"
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
8 },
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
9 "rogue4": {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
10 "name": "Rogue V4",
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
11 "uname": "rogue4"
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
12 },
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
13 "rogue5": {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
14 "name": "Rogue V5",
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
15 "uname": "rogue5"
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
16 },
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
17 "srogue": {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
18 "name": "Super-Rogue",
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
19 "uname": "srogue"
120
54979d35611a Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents: 118
diff changeset
20 },
54979d35611a Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents: 118
diff changeset
21 "arogue5": {
54979d35611a Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents: 118
diff changeset
22 "name": "Advanced Rogue 5",
54979d35611a Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents: 118
diff changeset
23 "uname": "arogue5"
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
24 }
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
25 };
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
26
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
27 var session = {
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
28 /* The session id assigned by the server. */
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
29 connect: false,
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
30 /* Login name and key are now in sessionStorage. */
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
31 /* Whether the game is being played or just watched. */
100
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
32 playing: false,
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
33 /* WebSocket for communication */
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
34 sock: null
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
35 };
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
36
73
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
37 /* The interval ID for checking the status of current games. */
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
38 var statInterval = null;
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
39 /* How frequently to check. */
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
40 var statDelta = 8000;
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
41 /* A WebSocket to listen for status events. */
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
42 var statsock = null;
163
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
43 /* List of currently active games. */
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
44 var currentList = [];
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
45 /* Last time the list was updated. */
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
46 var currentTS = null;
73
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
47
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
48 function writeData(hexstr) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
49 var codenum;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
50 var codes = [];
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
51 var nc;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
52 var u8wait = 0; /* Stores bits from previous bytes of multibyte sequences. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
53 var expect = 0; /* The number of 10------ bytes expected. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
54 /* UTF-8 translation. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
55 for (var i = 0; i < hexstr.length; i += 2) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
56 nc = Number("0x" + hexstr.substr(i, 2));
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
57 if (nc < 0x7F) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
58 /* 0------- */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
59 codes.push(nc);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
60 /* Any incomplete sequence will be discarded. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
61 u8wait = 0;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
62 expect = 0;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
63 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
64 else if (nc < 0xC0) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
65 /* 10------ : part of a multibyte sequence */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
66 if (expect > 0) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
67 u8wait <<= 6;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
68 u8wait += (nc & 0x3F);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
69 expect--;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
70 if (expect == 0) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
71 codes.push(u8wait);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
72 u8wait = 0;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
73 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
74 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
75 else {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
76 /* Assume an initial byte was missed. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
77 u8wait = 0;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
78 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
79 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
80 /* These will all discard any incomplete sequence. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
81 else if (nc < 0xE0) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
82 /* 110----- : introduces 2-byte sequence */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
83 u8wait = (nc & 0x1F);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
84 expect = 1;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
85 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
86 else if (nc < 0xF0) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
87 /* 1110---- : introduces 3-byte sequence */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
88 u8wait = (nc & 0x0F);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
89 expect = 2;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
90 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
91 else if (nc < 0xF8) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
92 /* 11110--- : introduces 4-byte sequence */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
93 u8wait = (nc & 0x07);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
94 expect = 3;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
95 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
96 else if (nc < 0xFC) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
97 /* 111110-- : introduces 5-byte sequence */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
98 u8wait = (nc & 0x03);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
99 expect = 4;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
100 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
101 else if (nc < 0xFE) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
102 /* 1111110- : introduces 6-byte sequence */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
103 u8wait = (nc & 0x01);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
104 expect = 5;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
105 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
106 else {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
107 /* 1111111- : should never appear */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
108 u8wait = 0;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
109 expect = 0;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
110 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
111 /* Supporting all 31 bits is probably overkill... */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
112 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
113 termemu.write(codes);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
114 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
115 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
116
75
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
117 function errHandler() {
96
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
118 message("Unable to connect to the server.", "warn");
75
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
119 }
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
120
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
121 function sendback(str) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
122 /* For responding to terminal queries. */
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
123 if (session.sock) {
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
124 session.sock.send(JSON.stringify({"t": "d", "d": str}));
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
125 }
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
126 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
127 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
128
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
129 function sendkey(ev) {
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
130 if (!session.playing)
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
131 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
132 var keynum = ev.keyCode;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
133 var code;
70
d7eb63cd7a16 Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents: 67
diff changeset
134 if (keynum >= 65 && keynum <= 90) {
d7eb63cd7a16 Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents: 67
diff changeset
135 /* Letters. */
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
136 if (ev.ctrlKey)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
137 keynum -= 64;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
138 else if (!ev.shiftKey)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
139 keynum += 32;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
140 code = keynum.toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
141 if (code.length < 2)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
142 code = "0" + code;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
143 }
70
d7eb63cd7a16 Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents: 67
diff changeset
144 else if (keynum >= 48 && keynum <= 57) {
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
145 /* The number row, NOT the numpad. */
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
146 if (ev.shiftKey) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
147 code = numShifts[keynum - 48].toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
148 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
149 else {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
150 code = keynum.toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
151 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
152 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
153 else if (keynum in keyHexCodes) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
154 if (ev.shiftKey)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
155 code = keyHexCodes[keynum][1];
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
156 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
157 code = keyHexCodes[keynum][0];
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
158 }
70
d7eb63cd7a16 Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents: 67
diff changeset
159 else if (keynum >= 16 && keynum <= 20) {
d7eb63cd7a16 Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents: 67
diff changeset
160 /* Shift, Cntl, Alt, CAPSLOCK */
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
161 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
162 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
163 else {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
164 debug(1, "Ignoring keycode " + keynum);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
165 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
166 }
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
167 ev.preventDefault();
108
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
168 if (session.sock) {
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
169 session.sock.send(JSON.stringify({"t": "d", "d": code}));
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
170 }
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
171 /* Otherwise it is disconnected */
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
172 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
173 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
174
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
175 var charshifts = { '-': "5f", '=': "2b", '[': "7b", ']': "7d", '\\': "7c",
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
176 ';': "3a", '\'': "22", ',': "3c", '.': "3e", '/': "3f", '`': "7e"
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
177 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
178
76
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
179 var kpkeys = { "KP1": "1b4f46", "KP2": "1b4f42", "KP3": "1b5b367e",
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
180 "KP4": "1b4f44", "KP5": "1b5b45", "KP6": "1b4f43",
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
181 "KP7": "1b4f48", "KP8": "1b4f41", "KP9": "1b5b357e" };
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
182
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
183 function vkey(c) {
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
184 if (!session.playing)
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
185 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
186 var keystr;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
187 if (c.match(/^[a-z]$/)) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
188 if (termemu.ctrlp()) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
189 var n = c.charCodeAt(0) - 96;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
190 keystr = n.toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
191 if (keystr.length < 2)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
192 keystr = "0" + keystr;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
193 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
194 else if (termemu.shiftp())
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
195 keystr = c.toUpperCase().charCodeAt(0).toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
196 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
197 keystr = c.charCodeAt(0).toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
198 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
199 else if (c.match(/^[0-9]$/)) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
200 if (termemu.shiftp())
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
201 keystr = numShifts[c.charCodeAt(0) - 48].toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
202 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
203 keystr = c.charCodeAt(0).toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
204 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
205 else if (c == '\n')
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
206 keystr = "0a";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
207 else if (c == '\t')
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
208 keystr = "09";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
209 else if (c == '\b')
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
210 keystr = "08";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
211 else if (c == ' ')
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
212 keystr = "20";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
213 else if (c in charshifts) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
214 if (termemu.shiftp())
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
215 keystr = charshifts[c];
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
216 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
217 keystr = c.charCodeAt(0).toString(16);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
218 }
76
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
219 else if (c in kpkeys) {
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
220 keystr = kpkeys[c];
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
221 }
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
222 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
223 return;
108
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
224 if (session.sock) {
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
225 session.sock.send(JSON.stringify({"t": "d", "d": keystr}));
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
226 }
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
227 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
228 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
229
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
230 function setup() {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
231 keyHexCodes.init();
4
ee22eb9ab009 Client: don't assume the terminal is 24x80.
John "Elwin" Edwards <elwin@sdf.org>
parents: 0
diff changeset
232 termemu.init("termwrap", 24, 80);
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
233 /* Is someone already logged in? */
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
234 if ("lcred" in sessionStorage) {
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
235 setmode("choose");
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
236 message("You are logged in as " + sessionStorage.getItem("lname") + ".");
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
237 }
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
238 else
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
239 setmode("login");
78
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
240 /* Set up the text size. */
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
241 var cssSize = termemu.view.style.fontSize;
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
242 var match = cssSize.match(/\d*/);
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
243 if (!match) {
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
244 return;
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
245 }
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
246 var csize = Number(match[0]);
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
247 var allscreen = document.getElementById("termwrap");
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
248 while (csize > 9 && csize < 48) {
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
249 if (allscreen.scrollWidth * 1.2 > window.innerWidth) {
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
250 csize = textsize(false);
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
251 }
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
252 else if (allscreen.scrollWidth * 2 < window.innerWidth) {
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
253 csize = textsize(true);
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
254 }
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
255 else
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
256 break;
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
257 }
116
d7d7cdcba3b4 Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents: 112
diff changeset
258 if (!window.WebSocket) {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
259 message("Your browser does not support WebSockets. " +
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
260 "This Web app will not work.", "warn");
109
67b393f10c2b RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 108
diff changeset
261 }
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
262 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
263 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
264
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
265 function toggleshift() {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
266 termemu.toggleshift();
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
267 keydiv = document.getElementById("shiftkey");
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
268 if (termemu.shiftp())
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
269 keydiv.className = "keysel";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
270 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
271 keydiv.className = "key";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
272 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
273 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
274
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
275 function togglectrl() {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
276 termemu.togglectrl();
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
277 keydiv = document.getElementById("ctrlkey");
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
278 if (termemu.ctrlp())
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
279 keydiv.className = "keysel";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
280 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
281 keydiv.className = "key";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
282 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
283 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
284
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
285 function formlogin(ev) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
286 ev.preventDefault();
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
287 /* What to do if logged in already? */
16
ef6127ed6da3 RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents: 9
diff changeset
288 var loginmsg = {};
ef6127ed6da3 RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents: 9
diff changeset
289 loginmsg["name"] = document.getElementById("input_name").value;
ef6127ed6da3 RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents: 9
diff changeset
290 loginmsg["pw"] = document.getElementById("input_pw").value;
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
291 var req = new XMLHttpRequest();
75
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
292 req.onerror = errHandler;
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
293 req.onreadystatechange = function () {
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
294 if (req.readyState != 4 || req.status != 200)
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
295 return;
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
296 var reply = JSON.parse(req.responseText);
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
297 if (reply.t == 'l') {
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
298 /* Success */
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
299 sessionStorage.setItem("lcred", reply.k);
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
300 sessionStorage.setItem("lname", reply.u);
89
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
301 message("You are now logged in as " + reply.u + ".");
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
302 setmode("choose");
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
303 }
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
304 else if (reply.t == 'E') {
96
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
305 var failmsg = "Logging in failed. ";
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
306 if (reply.c == 2)
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
307 failmsg += reply.s.match(/Invalid data: (.*)/)[1];
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
308 else if (reply.c == 3)
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
309 failmsg += "The username or password was incorrect.";
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
310 else if (reply.c == 6)
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
311 failmsg += "The server is shutting down.";
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
312 message(failmsg, "warn");
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
313 document.getElementById("input_name").value = "";
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
314 document.getElementById("input_pw").value = "";
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
315 }
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
316 };
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
317 req.open('POST', '/login', true);
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
318 req.send(JSON.stringify(loginmsg));
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
319 return;
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
320 }
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
321
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
322 function tableCurrent(gamelist) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
323 var gamediv = document.getElementById("gametable");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
324 while (gamediv.children.length > 2)
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
325 gamediv.removeChild(gamediv.children[2]);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
326 if (gamelist.length === 0) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
327 gamediv.style.display = "none";
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
328 document.getElementById("nogames").style.display = "block";
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
329 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
330 else {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
331 gamediv.style.display = "table";
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
332 document.getElementById("nogames").style.display = "none";
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
333 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
334 for (var i = 0; i < gamelist.length; i++) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
335 var row = document.createElement("div");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
336 var cell1 = document.createElement("div");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
337 var cell2 = document.createElement("div");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
338 var cell3 = document.createElement("div");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
339 var cell4 = document.createElement("div");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
340 cell1.appendChild(document.createTextNode(gamelist[i].p));
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
341 var uname = gamelist[i].g;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
342 if (uname in games)
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
343 cell2.appendChild(document.createTextNode(games[uname].name));
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
344 else {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
345 continue;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
346 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
347 cell3.appendChild(document.createTextNode(idlestr(gamelist[i].i)));
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
348 var button = document.createElement("span");
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
349 button.appendChild(document.createTextNode("Watch"));
161
a2a25b7631f1 RLGWebD client: fix watching.
John "Elwin" Edwards
parents: 159
diff changeset
350 button.onclick = makeWatcher(uname + "/" + gamelist[i].p);
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
351 button.className = "ibutton";
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
352 cell4.appendChild(button);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
353 row.appendChild(cell1);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
354 row.appendChild(cell2);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
355 row.appendChild(cell3);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
356 row.appendChild(cell4);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
357 gamediv.appendChild(row);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
358 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
359 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
360
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
361 /* Handles the status socket, opening and closing it when necessary. */
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
362 function wsCurrent() {
116
d7d7cdcba3b4 Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents: 112
diff changeset
363 if (!window.WebSocket)
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
364 return;
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
365 if (session.connect) {
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
366 /* Don't bother with status if already playing/watching. */
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
367 if (statsock) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
368 statsock.close();
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
369 statsock = null;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
370 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
371 return;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
372 }
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
373 if ("lcred" in sessionStorage) {
112
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
374 /* When starting the socket, the choices list might not be initialized. */
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
375 getchoices();
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
376 }
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
377 if (statsock)
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
378 return;
106
dc1414faee19 RLG-Web client: determine the host for WebSocket connections.
John "Elwin" Edwards <elwin@sdf.org>
parents: 105
diff changeset
379 statsock = new WebSocket("ws://" + window.location.host + "/status");
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
380 statsock.onmessage = function (ev) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
381 var msg;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
382 try {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
383 msg = JSON.parse(ev.data);
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
384 } catch (e) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
385 if (e instanceof SyntaxError)
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
386 return;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
387 }
112
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
388 if (msg.t == "t") {
163
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
389 currentList = msg.g;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
390 currentTS = new Date();
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
391 tableCurrent(currentList);
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
392 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
393 else if (msg.t == "p") {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
394 var now = new Date();
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
395 var idletimes = {};
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
396 for (var i = 0; i < msg.g.length; i++) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
397 var tag = msg.g[i].g + "/" + msg.g[i].p;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
398 idletimes[tag] = msg.g[i].i;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
399 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
400 for (var i = 0; i < currentList.length; i++) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
401 var tag = currentList[i].g + "/" + currentList[i].p;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
402 if (tag in idletimes) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
403 currentList[i].i = idletimes[tag];
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
404 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
405 else {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
406 currentList[i].i += now - currentTS;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
407 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
408 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
409 currentTS = now;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
410 tableCurrent(currentList);
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
411 }
163
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
412 else if (msg.t == "b") {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
413 var justbegun = {};
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
414 justbegun.g = msg.g;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
415 justbegun.p = msg.p;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
416 justbegun.i = 0;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
417 currentList.push(justbegun);
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
418 tableCurrent(currentList);
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
419 if (msg.p == sessionStorage.getItem("lname")) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
420 getchoices();
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
421 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
422 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
423 else if (msg.t == "e") {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
424 var i = 0;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
425 while (i < currentList.length) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
426 if (currentList[i].g == msg.g && currentList[i].p == msg.p)
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
427 break;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
428 i++;
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
429 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
430 if (i < currentList.length) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
431 currentList.splice(i, 1);
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
432 }
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
433 tableCurrent(currentList);
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
434 if (msg.p == sessionStorage.getItem("lname")) {
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
435 getchoices();
0f6da35b27a0 RLGWebD: overhaul the list of current games.
John "Elwin" Edwards
parents: 161
diff changeset
436 }
112
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
437 }
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
438 };
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
439 statsock.onclose = function (ev) {
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
440 statsock = null;
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
441 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
442 }
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
443
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
444 /* FIXME gamelist API has changed */
73
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
445 function getcurrent(clear) {
116
d7d7cdcba3b4 Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents: 112
diff changeset
446 if (window.WebSocket) {
112
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
447 return;
4f2b89e6fde2 RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents: 111
diff changeset
448 }
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
449 if (session.connect || clear) {
73
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
450 if (statInterval) {
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
451 window.clearInterval(statInterval);
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
452 statInterval = null;
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
453 }
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
454 return;
73
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
455 }
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
456 if (!statInterval) {
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
457 statInterval = window.setInterval(getcurrent, statDelta);
d084610a89b5 Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents: 70
diff changeset
458 }
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
459 if ("lcred" in sessionStorage)
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
460 getchoices();
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
461 var req = new XMLHttpRequest();
75
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
462 req.onerror = errHandler;
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
463 req.onreadystatechange = function () {
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
464 if (req.readyState != 4 || req.status != 200)
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
465 return;
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
466 var reply;
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
467 try {
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
468 reply = JSON.parse(req.responseText);
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
469 } catch (e) {
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
470 if (e instanceof SyntaxError)
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
471 return;
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
472 }
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
473 if (!reply.s) {
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
474 return;
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
475 }
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
476 tableCurrent(reply.g);
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
477 };
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
478 req.open('GET', '/status', true);
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
479 req.send();
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
480 return;
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
481 }
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
482
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
483 function getchoices() {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
484 if (session.connect || !("lcred" in sessionStorage))
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
485 return;
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
486 var req = new XMLHttpRequest();
75
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
487 req.onerror = errHandler;
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
488 req.onreadystatechange = function () {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
489 if (req.readyState != 4 || req.status != 200)
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
490 return;
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
491 var reply;
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
492 try {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
493 reply = JSON.parse(req.responseText);
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
494 } catch (e) {
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
495 if (e instanceof SyntaxError)
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
496 return;
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
497 }
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
498 if (!("name" in reply) || reply["name"] != sessionStorage.getItem("lname")
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
499 || !("stat" in reply))
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
500 return;
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
501 var optdiv = document.getElementById("opttable");
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
502 /* Don't remove the first child, it's the header. */
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
503 while (optdiv.childNodes.length > 1)
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
504 optdiv.removeChild(optdiv.childNodes[1]);
64
e3082fd06520 Some status improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents: 63
diff changeset
505 for (var gname in games) {
e3082fd06520 Some status improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents: 63
diff changeset
506 if (!(gname in reply.stat))
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
507 continue;
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
508 var acttext;
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
509 if (reply.stat[gname] == "s")
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
510 acttext = "Resume your game";
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
511 else if (reply.stat[gname] == "0")
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
512 acttext = "Start a game";
111
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
513 else if (reply.stat[gname] == "p" || reply.stat[gname] == "d")
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
514 acttext = "Force save";
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
515 else
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
516 continue;
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
517 var button = document.createElement("span");
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
518 button.appendChild(document.createTextNode(acttext));
111
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
519 if ("s0".indexOf(reply.stat[gname]) >= 0) {
46
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
520 button.onclick = makeStarter(gname);
51
2eda3909f6a3 rlgterm.js: don't make nonfunctional button.
John "Elwin" Edwards <elwin@sdf.org>
parents: 47
diff changeset
521 button.className = "ibutton";
46
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
522 }
111
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
523 else {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
524 button.onclick = makeStopper(gname);
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
525 button.className = "ibutton";
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
526 }
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
527 var actdiv = document.createElement("div");
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
528 actdiv.appendChild(button);
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
529 var gamediv = document.createElement("div");
45
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
530 gamediv.appendChild(document.createTextNode(games[gname].name));
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
531 var rowdiv = document.createElement("div");
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
532 rowdiv.appendChild(gamediv);
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
533 rowdiv.appendChild(actdiv);
1bbd0e76ba92 RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents: 44
diff changeset
534 optdiv.appendChild(rowdiv);
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
535 }
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
536 };
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
537 req.open('GET', '/pstatus/' + sessionStorage.getItem("lname"), true);
44
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
538 req.send();
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
539 return;
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
540 }
b848cb50cd69 rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents: 41
diff changeset
541
46
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
542 /* This can't be in the loop in getchoices(), or the closure's scope will
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
543 * get overwritten on the next iteration, and then all the games end up
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
544 * being Super-Rogue.
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
545 */
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
546 function makeStarter(gname) {
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
547 if (!(gname in games))
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
548 return null;
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
549 var game = games[gname];
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
550 function starter(ev) {
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
551 startgame(game);
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
552 }
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
553 return starter;
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
554 }
59ecd99845eb rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents: 45
diff changeset
555
111
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
556 function makeStopper(gname) {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
557 if (!(gname in games))
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
558 return null;
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
559 var game = games[gname];
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
560 function stopper(ev) {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
561 stopgame(game);
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
562 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
563 return stopper;
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
564 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
565
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
566 function stopgame(game) {
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
567 if (!("lcred" in sessionStorage))
111
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
568 return;
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
569 var stopmsg = {"key": sessionStorage.getItem("lcred"), "g": game.uname};
111
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
570 var req = new XMLHttpRequest();
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
571 req.onerror = errHandler;
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
572 req.onreadystatechange = function () {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
573 if (req.readyState != 4 || req.status != 200)
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
574 return;
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
575 var reply = JSON.parse(req.responseText);
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
576 if (reply.t == 'E') {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
577 if (reply.c == 7)
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
578 message("That game has already stopped.");
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
579 else if (reply.c == 1) {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
580 logout();
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
581 message("The server forgot about you, please log in again.", "warn");
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
582 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
583 else {
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
584 message("That game could not be stopped because: " + reply.s +
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
585 "This might be a bug.", "warn");
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
586 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
587 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
588 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
589 req.open('POST', '/quit', true);
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
590 req.send(JSON.stringify(stopmsg));
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
591 return;
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
592 }
f56fdfeed01a Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents: 109
diff changeset
593
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
594 function startgame(game) {
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
595 if (!("lcred" in sessionStorage) || session.connect)
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
596 return;
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
597 if (!window.WebSocket) {
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
598 return;
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
599 }
108
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
600 var sockurl = "ws://" + window.location.host + "/play/" + game.uname;
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
601 sockurl += "?key=" + sessionStorage.getItem("lcred") + "&w=80&h=24";
108
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
602 ws = new WebSocket(sockurl);
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
603 ws.onopen = function (event) {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
604 session.connect = true;
108
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
605 session.playing = true;
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
606 session.sock = ws;
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
607 setmode("play");
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
608 };
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
609 ws.onmessage = function (event) {
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
610 var msgObject = JSON.parse(event.data);
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
611 if (msgObject.t == 's') {
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
612 termemu.resize(msgObject.h, msgObject.w);
118
56a756695740 rlgterm.js: display the game's proper name when starting.
John "Elwin" Edwards <elwin@sdf.org>
parents: 116
diff changeset
613 message("You are now playing " + games[msgObject.g].name + ".");
108
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
614 }
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
615 else if (msgObject.t == 'd') {
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
616 writeData(msgObject.d);
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
617 }
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
618 };
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
619 ws.onclose = function (event) {
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
620 session.sock = null;
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
621 gameover();
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
622 };
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
623 }
86a458080e80 RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 106
diff changeset
624
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
625 function makeWatcher(t) {
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
626 function watcher(ev) {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
627 startwatching(t);
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
628 }
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
629 return watcher;
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
630 }
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
631
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
632 function startwatching(tag) {
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
633 if (session.connect)
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
634 return;
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
635 var sockurl = "ws://" + window.location.host + "/watch/" + tag;
100
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
636 var ws = new WebSocket(sockurl);
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
637 ws.onopen = function (event) {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
638 session.connect = true;
100
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
639 session.sock = ws;
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
640 setmode("watch");
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
641 };
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
642 ws.onmessage = function (event) {
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
643 var msgObject = JSON.parse(event.data);
101
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
644 if (msgObject.t == 'w') {
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
645 termemu.resize(msgObject.h, msgObject.w);
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
646 termemu.reset();
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
647 termemu.toAltBuf();
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
648 var pname = msgObject.p;
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
649 var gname = games[msgObject.g].name;
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
650 message("You are now watching " + pname + " play " + gname + ".");
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
651 }
e59d68082664 RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents: 100
diff changeset
652 else if (msgObject.t == 'd') {
100
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
653 writeData(msgObject.d);
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
654 }
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
655 };
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
656 ws.onclose = function (event) {
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
657 session.sock = null;
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
658 gameover();
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
659 };
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
660 }
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
661
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
662 function formreg(ev) {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
663 ev.preventDefault();
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
664 /* This ought to check for being logged in instead. */
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
665 if (session.connect)
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
666 return;
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
667 var regmsg = {};
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
668 regmsg["name"] = document.getElementById("regin_name").value;
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
669 regmsg["pw"] = document.getElementById("regin_pw").value;
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
670 regmsg["email"] = document.getElementById("regin_email").value;
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
671 var req = new XMLHttpRequest();
75
2984604ce3e6 Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents: 73
diff changeset
672 req.onerror = errHandler;
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
673 req.onreadystatechange = function () {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
674 if (req.readyState != 4 || req.status != 200)
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
675 return;
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
676 var reply = JSON.parse(req.responseText);
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
677 if (reply.t == 'r') {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
678 /* Success */
89
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
679 message("Welcome " + reply.u + ", you are now registered.");
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
680 sessionStorage.setItem("lcred", reply.k);
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
681 sessionStorage.setItem("lname", reply.u);
89
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
682 message("You are now logged in as " + reply.u + ".");
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
683 setmode("choose");
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
684 }
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
685 else if (reply.t == 'E') {
93
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
686 var failmsg = "Registration failed.";
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
687 if (reply.c == 2) {
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
688 var errdesc = reply.s.match(/Invalid data: (.*)/)[1];
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
689 if (errdesc.match(/No name/))
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
690 failmsg += " You need to choose a name.";
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
691 else if (errdesc.match(/No password/))
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
692 failmsg += " You need to choose a password.";
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
693 else if (errdesc.match(/Invalid/)) {
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
694 failmsg += " Names must be letters and numbers. E-mail addresses " +
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
695 "can also contain these characters: @.-_";
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
696 }
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
697 else if (errdesc.match(/Username/))
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
698 failmsg += " Someone else is already using that name.";
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
699 else
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
700 failmsg += " This is probably a bug.";
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
701 }
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
702 else
104409bf5f03 rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 92
diff changeset
703 failmsg += " This is probably a bug.";
96
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
704 message(failmsg, "warn");
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
705 document.getElementById("regin_name").value = "";
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
706 document.getElementById("regin_pw").value = "";
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
707 document.getElementById("regin_email").value = "";
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
708 }
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
709 };
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
710 req.open('POST', '/addacct', true);
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
711 req.send(JSON.stringify(regmsg));
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
712 return;
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
713 }
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
714
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
715 function gameover() {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
716 if (!session.connect)
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
717 return;
38
b06a14876645 RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents: 35
diff changeset
718 /* TODO IFACE2 If the end was unexpected, tell player the game was saved. */
90
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
719 if (session.playing)
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
720 message("Finished playing.");
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
721 else
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
722 message("Finished watching.");
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
723 session.connect = false;
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
724 session.playing = false;
61
071ec6b1ec03 RLG-Web client: initialize and restore the terminal when watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 59
diff changeset
725 termemu.toNormBuf();
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
726 if ("lcred" in sessionStorage)
59
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
727 setmode("choose");
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
728 else
00b985b8ba6a RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents: 58
diff changeset
729 setmode("login");
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
730 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
731 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
732
47
27b7f0c8b9f0 RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents: 46
diff changeset
733 function logout() {
127
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
734 sessionStorage.removeItem("lcred");
e54018b26ed8 RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents: 120
diff changeset
735 sessionStorage.removeItem("lname");
47
27b7f0c8b9f0 RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents: 46
diff changeset
736 setmode("login");
27b7f0c8b9f0 RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents: 46
diff changeset
737 }
27b7f0c8b9f0 RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents: 46
diff changeset
738
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
739 /* TODO determine whether this is needed */
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
740 function stop() {
159
a613380ffdc2 RLGWebD: excise polling.
John "Elwin" Edwards
parents: 127
diff changeset
741 if (!session.connect)
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
742 return;
100
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
743 if (session.sock) {
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
744 session.sock.close();
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
745 return;
3dbfdaf62623 RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents: 97
diff changeset
746 }
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
747 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
748
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
749 function setmode(mode, ev) {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
750 if (ev)
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
751 ev.preventDefault();
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
752 if (mode == "play") {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
753 document.getElementById("keyboard").style.display = "block";
90
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
754 document.getElementById("playctl").style.display = "block";
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
755 document.getElementById("startgame").style.display = "none";
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
756 document.getElementById("login").style.display = "none";
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
757 document.getElementById("register").style.display = "none";
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
758 document.getElementById("current").style.display = "none";
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
759 }
90
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
760 else if (mode == "watch") {
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
761 document.getElementById("keyboard").style.display = "none";
90
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
762 document.getElementById("playctl").style.display = "block";
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
763 document.getElementById("startgame").style.display = "none";
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
764 document.getElementById("login").style.display = "none";
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
765 document.getElementById("register").style.display = "none";
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
766 document.getElementById("current").style.display = "none";
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
767 }
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
768 else if (mode == "choose") {
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
769 document.getElementById("keyboard").style.display = "none";
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
770 document.getElementById("playctl").style.display = "none";
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
771 document.getElementById("startgame").style.display = "block";
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
772 document.getElementById("login").style.display = "none";
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
773 document.getElementById("register").style.display = "none";
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
774 document.getElementById("current").style.display = "block";
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
775 getcurrent();
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
776 }
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
777 else if (mode == "login") {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
778 document.getElementById("keyboard").style.display = "none";
90
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
779 document.getElementById("playctl").style.display = "none";
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
780 document.getElementById("startgame").style.display = "none";
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
781 document.getElementById("login").style.display = "block";
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
782 document.getElementById("register").style.display = "none";
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
783 document.getElementById("current").style.display = "block";
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
784 getcurrent();
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
785 }
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
786 else if (mode == "register") {
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
787 document.getElementById("keyboard").style.display = "none";
90
6c6a6e4f1e5b RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents: 89
diff changeset
788 document.getElementById("playctl").style.display = "none";
39
e8ac0e3d2614 RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents: 38
diff changeset
789 document.getElementById("startgame").style.display = "none";
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
790 document.getElementById("login").style.display = "none";
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
791 document.getElementById("register").style.display = "block";
56
7f3ca16409fe RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents: 55
diff changeset
792 document.getElementById("current").style.display = "none";
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
793 }
105
a9371002aecc RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents: 101
diff changeset
794 wsCurrent();
19
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
795 }
188bbd857124 RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents: 16
diff changeset
796
76
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
797 function toggleBlock(id) {
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
798 var element = document.getElementById(id);
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
799 if (!element)
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
800 return;
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
801 if (element.style.display != "block")
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
802 element.style.display = "block";
67
b6a3b26fe0dc RLG-Web client: some visual improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents: 66
diff changeset
803 else
76
a497ecd116d9 Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents: 75
diff changeset
804 element.style.display = "none";
67
b6a3b26fe0dc RLG-Web client: some visual improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents: 66
diff changeset
805 }
b6a3b26fe0dc RLG-Web client: some visual improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents: 66
diff changeset
806
96
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
807 function message(msg, mtype) {
89
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
808 var msgdiv = document.createElement("div");
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
809 var msgtext = document.createTextNode(msg);
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
810 msgdiv.appendChild(msgtext);
96
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
811 if (mtype) {
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
812 msgdiv.className = mtype;
7bb634f6995c RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents: 94
diff changeset
813 }
89
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
814 var msgcontainer = document.getElementById("messages");
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
815 msgcontainer.insertBefore(msgdiv, msgcontainer.firstChild);
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
816 }
6145e1ea7ace RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents: 88
diff changeset
817
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
818 function debug(level, msg) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
819 if (level < debugSuppress)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
820 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
821 var msgdiv = document.createElement("div");
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
822 var msgtext = document.createTextNode(msg);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
823 msgdiv.appendChild(msgtext);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
824 document.getElementById("debug").appendChild(msgdiv);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
825 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
826 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
827
92
a4d3ecf188b7 RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents: 91
diff changeset
828 function setTitle(tstr) {
a4d3ecf188b7 RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents: 91
diff changeset
829 message(tstr);
a4d3ecf188b7 RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents: 91
diff changeset
830 }
a4d3ecf188b7 RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents: 91
diff changeset
831
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
832 function textsize(larger) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
833 var cssSize = termemu.view.style.fontSize;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
834 if (!cssSize) {
78
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
835 return null;
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
836 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
837 var match = cssSize.match(/\d*/);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
838 if (!match) {
78
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
839 return null;
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
840 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
841 var csize = Number(match[0]);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
842 var nsize;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
843 if (larger) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
844 if (csize >= 48)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
845 nsize = 48;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
846 else if (csize >= 20)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
847 nsize = csize + 4;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
848 else if (csize >= 12)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
849 nsize = csize + 2;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
850 else if (csize >= 8)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
851 nsize = csize + 1;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
852 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
853 nsize = 8;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
854 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
855 else {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
856 if (csize <= 8)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
857 nsize = 8;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
858 else if (csize <= 12)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
859 nsize = csize - 1;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
860 else if (csize <= 20)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
861 nsize = csize - 2;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
862 else if (csize <= 48)
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
863 nsize = csize - 4;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
864 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
865 nsize = 48;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
866 }
77
f8bb37f48d58 Make font resizing affect the keyboard too.
John "Elwin" Edwards <elwin@sdf.org>
parents: 76
diff changeset
867 var cssvalstr = nsize.toString() + "px";
f8bb37f48d58 Make font resizing affect the keyboard too.
John "Elwin" Edwards <elwin@sdf.org>
parents: 76
diff changeset
868 document.getElementById("term").style.fontSize = cssvalstr;
f8bb37f48d58 Make font resizing affect the keyboard too.
John "Elwin" Edwards <elwin@sdf.org>
parents: 76
diff changeset
869 document.getElementById("keys").style.fontSize = cssvalstr;
9
826a7ced69f8 Make the emulator screen resizable.
John "Elwin" Edwards <elwin@sdf.org>
parents: 6
diff changeset
870 termemu.fixsize();
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
871 debug(1, "Changing font size to " + nsize.toString());
78
06375a159188 Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents: 77
diff changeset
872 return nsize;
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
873 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
874
66
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
875 function idlestr(ms) {
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
876 if (typeof(ms) != "number")
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
877 return "?";
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
878 var seconds = Math.round(ms / 1000);
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
879 var ss = String(seconds % 60);
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
880 if (ss.length < 2)
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
881 ss = "0" + ss;
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
882 var mm = String(Math.floor((seconds % 3600) / 60));
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
883 if (mm.length < 2)
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
884 mm = "0" + mm;
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
885 var hh = String(Math.floor(seconds / 3600));
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
886 if (hh.length < 2)
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
887 hh = "0" + hh;
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
888 return hh + ":" + mm + ":" + ss;
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
889 }
57bf0dcd080e Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents: 65
diff changeset
890
0
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
891 function bell(on) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
892 var imgnode = document.getElementById("bell");
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
893 if (on) {
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
894 imgnode.style.visibility = "visible";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
895 window.setTimeout(bell, 1500, false);
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
896 }
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
897 else
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
898 imgnode.style.visibility = "hidden";
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
899 return;
bd412f63ce0d Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff changeset
900 }