Mercurial > hg > rlgwebd
annotate rlgterm.js @ 158:9961a538c00e
rlgwebd.js: get rid of numerical game identifiers.
Games will be indentified by gamename/username pairs. This will allow
better interoperability with dgamelaunch.
Polling clients are no longer supported; the code remnants need to be
removed. The reaper() function will likely crash. Unexpectedly, the
WebSocket client still works well enough to play. Watching and listing
current games are probably broken.
author | John "Elwin" Edwards |
---|---|
date | Thu, 01 Jan 2015 15:56:22 -0500 |
parents | e54018b26ed8 |
children | a613380ffdc2 |
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 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
3 // A state machine that keeps track of polling the server. |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
4 var ajaxstate = { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
5 state: 0, |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
6 timerID: null, |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
7 clear: function () { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
8 if (this.timerID != null) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
9 window.clearTimeout(this.timerID); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
10 this.timerID = null; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
11 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
12 }, |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
13 set: function (ms) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
14 this.clear(); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
15 this.timerID = window.setTimeout(getData, ms); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
16 }, |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
17 gotdata: function () { |
35
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
18 this.set(1000); |
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
19 this.state = 1; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
20 }, |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
21 gotnothing: function () { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
22 if (this.state == 0) { |
35
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
23 this.set(1000); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
24 this.state = 1; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
25 } |
38
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
26 else if (this.state < 4) { |
35
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
27 this.set(4000); |
38
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
28 this.state++; |
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
29 } |
63
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
30 else if (session.playing) { |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
31 if (this.state < 8) { |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
32 this.set(15000); |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
33 this.state++; |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
34 } |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
35 else { |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
36 /* It's been over a minute. Stop polling. */ |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
37 this.clear(); |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
38 } |
38
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
39 } |
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
40 else { |
63
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
41 /* If watching, it can't stop polling entirely, because there |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
42 * are no POST events to start it up again. */ |
a077f9f84052
RLG-Web client: adjust polling for watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
61
diff
changeset
|
43 this.set(10000); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
44 } |
35
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
45 }, |
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
46 posted: function (wasdata) { |
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
47 if (wasdata) { |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
48 this.set(1000); |
35
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
49 this.state = 1; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
50 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
51 else { |
35
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
52 this.set(200); |
f15efa4818b4
rglterm.js: reduce the server polling.
John "Elwin" Edwards <elwin@sdf.org>
parents:
27
diff
changeset
|
53 this.state = 0; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
54 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
55 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
56 }; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
57 |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
58 /* Data on the available games. */ |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
59 var games = { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
60 "rogue3": { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
61 "name": "Rogue V3", |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
62 "uname": "rogue3" |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
63 }, |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
64 "rogue4": { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
65 "name": "Rogue V4", |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
66 "uname": "rogue4" |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
67 }, |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
68 "rogue5": { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
69 "name": "Rogue V5", |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
70 "uname": "rogue5" |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
71 }, |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
72 "srogue": { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
73 "name": "Super-Rogue", |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
74 "uname": "srogue" |
120
54979d35611a
Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents:
118
diff
changeset
|
75 }, |
54979d35611a
Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents:
118
diff
changeset
|
76 "arogue5": { |
54979d35611a
Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents:
118
diff
changeset
|
77 "name": "Advanced Rogue 5", |
54979d35611a
Add support for Advanced Rogue 5.
John "Elwin" Edwards <elwin@sdf.org>
parents:
118
diff
changeset
|
78 "uname": "arogue5" |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
79 } |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
80 }; |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
81 |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
82 var session = { |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
83 /* The session id assigned by the server. */ |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
84 id: null, |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
85 /* 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
|
86 /* 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
|
87 playing: false, |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
88 /* WebSocket for communication */ |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
89 sock: null |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
90 }; |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
91 |
73
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
92 /* 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
|
93 var statInterval = null; |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
94 /* How frequently to check. */ |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
95 var statDelta = 8000; |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
96 /* 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
|
97 var statsock = null; |
73
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
98 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
99 function writeData(hexstr) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
100 var codenum; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
101 var codes = []; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
102 var nc; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
103 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
|
104 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
|
105 /* UTF-8 translation. */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
106 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
|
107 nc = Number("0x" + hexstr.substr(i, 2)); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
108 if (nc < 0x7F) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
109 /* 0------- */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
110 codes.push(nc); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
111 /* Any incomplete sequence will be discarded. */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
112 u8wait = 0; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
113 expect = 0; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
114 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
115 else if (nc < 0xC0) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
116 /* 10------ : part of a multibyte sequence */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
117 if (expect > 0) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
118 u8wait <<= 6; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
119 u8wait += (nc & 0x3F); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
120 expect--; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
121 if (expect == 0) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
122 codes.push(u8wait); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
123 u8wait = 0; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
124 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
125 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
126 else { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
127 /* Assume an initial byte was missed. */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
128 u8wait = 0; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
129 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
130 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
131 /* These will all discard any incomplete sequence. */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
132 else if (nc < 0xE0) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
133 /* 110----- : introduces 2-byte sequence */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
134 u8wait = (nc & 0x1F); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
135 expect = 1; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
136 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
137 else if (nc < 0xF0) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
138 /* 1110---- : introduces 3-byte sequence */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
139 u8wait = (nc & 0x0F); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
140 expect = 2; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
141 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
142 else if (nc < 0xF8) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
143 /* 11110--- : introduces 4-byte sequence */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
144 u8wait = (nc & 0x07); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
145 expect = 3; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
146 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
147 else if (nc < 0xFC) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
148 /* 111110-- : introduces 5-byte sequence */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
149 u8wait = (nc & 0x03); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
150 expect = 4; |
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 else if (nc < 0xFE) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
153 /* 1111110- : introduces 6-byte sequence */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
154 u8wait = (nc & 0x01); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
155 expect = 5; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
156 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
157 else { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
158 /* 1111111- : should never appear */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
159 u8wait = 0; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
160 expect = 0; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
161 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
162 /* Supporting all 31 bits is probably overkill... */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
163 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
164 termemu.write(codes); |
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 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
167 |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
168 /* State for sending and receiving messages. */ |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
169 var nsend = 0; // The number of the next packet to send. |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
170 var nrecv = 0; // The next packet expected. |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
171 var msgQ = []; // Queue for out-of-order messages. |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
172 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
173 /* Processes a message from the server, returning true or false if it was a |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
174 * data message with or without data, null if not data. |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
175 * All non-special responseTexts should be handed directly to this function. |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
176 */ |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
177 function processMsg(msg) { |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
178 var msgDicts; |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
179 var havedata = null; // eventual return value |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
180 try { |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
181 msgDicts = JSON.parse(msg); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
182 } catch (e) { |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
183 if (e instanceof SyntaxError) |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
184 return null; |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
185 } |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
186 if (msgDicts.length === 0) |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
187 return false; |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
188 for (var j = 0; j < msgDicts.length; j++) { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
189 if (!msgDicts[j].t) |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
190 continue; |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
191 else if (msgDicts[j].t == "E") { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
192 if (msgDicts[j].c == 1 || msgDicts[j].c == 6 || msgDicts[j].c == 7) { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
193 gameover(); |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
194 if (msgDicts[j].c == 1) { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
195 logout(); |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
196 } |
47
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
197 } |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
198 debug(1, "Server error: " + msgDicts[j].s); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
199 } |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
200 // A data message |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
201 else if (msgDicts[j].t == "d") { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
202 if (msgDicts[j].n === nrecv) { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
203 writeData(msgDicts[j].d); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
204 nrecv++; |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
205 /* Process anything in the queue that's now ready. */ |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
206 var next; |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
207 while ((next = msgQ.shift()) !== undefined) { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
208 writeData(next.d); |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
209 nrecv++; |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
210 } |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
211 } |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
212 else if (msgDicts[j].n > nrecv) { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
213 /* The current message comes after one still missing. Queue this one |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
214 * for later use. */ |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
215 debug(1, "Got packet " + msgDicts[j].n + ", expected " + nrecv); |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
216 msgQ[msgDicts[j].n - nrecv - 1] = msgDicts[j]; |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
217 } |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
218 else { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
219 /* This message's number was encountered previously. */ |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
220 debug(1, "Discarding packet " + msgDicts[j].n + ", expected " + nrecv); |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
221 } |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
222 havedata = true; |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
223 } |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
224 else if (msgDicts[j].t == "T") { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
225 setTitle(msgDicts[j].d); |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
226 } |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
227 else if (msgDicts[j].t == "q") { |
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
228 gameover(); |
0
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 else { |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
231 debug(1, "Unrecognized server message " + msg); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
232 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
233 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
234 return havedata; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
235 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
236 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
237 function getData() { |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
238 if (session.id == null) |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
239 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
240 var datareq = new XMLHttpRequest(); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
241 var msg = JSON.stringify({"id": session.id, "t": "n"}); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
242 datareq.onerror = errHandler; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
243 datareq.onreadystatechange = function () { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
244 if (datareq.readyState == 4 && datareq.status == 200) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
245 var wasdata = processMsg(datareq.responseText); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
246 if (wasdata != null) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
247 if (wasdata) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
248 ajaxstate.gotdata(); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
249 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
250 ajaxstate.gotnothing(); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
251 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
252 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
253 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
254 }; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
255 datareq.open('POST', '/feed', true); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
256 datareq.send(msg); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
257 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
258 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
259 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
260 function postResponseHandler() { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
261 if (this.readyState == 4 && this.status == 200) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
262 // We might want to do something with wasdata someday. |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
263 var wasdata = processMsg(this.responseText); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
264 ajaxstate.posted(); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
265 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
266 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
267 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
268 |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
269 function errHandler() { |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
270 message("Unable to connect to the server.", "warn"); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
271 } |
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
272 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
273 function sendback(str) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
274 /* For responding to terminal queries. */ |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
275 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": str}; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
276 var datareq = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
277 datareq.onerror = errHandler; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
278 datareq.onreadystatechange = postResponseHandler; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
279 datareq.open('POST', '/feed', true); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
280 datareq.send(JSON.stringify(msgDict)); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
281 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
282 } |
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 function sendkey(ev) { |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
285 if (!session.playing) |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
286 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
287 var keynum = ev.keyCode; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
288 var code; |
70
d7eb63cd7a16
Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents:
67
diff
changeset
|
289 if (keynum >= 65 && keynum <= 90) { |
d7eb63cd7a16
Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents:
67
diff
changeset
|
290 /* Letters. */ |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
291 if (ev.ctrlKey) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
292 keynum -= 64; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
293 else if (!ev.shiftKey) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
294 keynum += 32; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
295 code = keynum.toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
296 if (code.length < 2) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
297 code = "0" + code; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
298 } |
70
d7eb63cd7a16
Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents:
67
diff
changeset
|
299 else if (keynum >= 48 && keynum <= 57) { |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
300 /* The number row, NOT the numpad. */ |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
301 if (ev.shiftKey) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
302 code = numShifts[keynum - 48].toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
303 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
304 else { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
305 code = keynum.toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
306 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
307 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
308 else if (keynum in keyHexCodes) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
309 if (ev.shiftKey) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
310 code = keyHexCodes[keynum][1]; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
311 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
312 code = keyHexCodes[keynum][0]; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
313 } |
70
d7eb63cd7a16
Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents:
67
diff
changeset
|
314 else if (keynum >= 16 && keynum <= 20) { |
d7eb63cd7a16
Try to get some compatibility for keys.
John "Elwin" Edwards <elwin@sdf.org>
parents:
67
diff
changeset
|
315 /* Shift, Cntl, Alt, CAPSLOCK */ |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
316 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
317 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
318 else { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
319 debug(1, "Ignoring keycode " + keynum); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
320 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
321 } |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
322 ev.preventDefault(); |
108
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
323 if (session.sock) { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
324 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
|
325 } |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
326 else { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
327 var datareq = new XMLHttpRequest(); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
328 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": code}; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
329 datareq.onerror = errHandler; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
330 datareq.onreadystatechange = postResponseHandler; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
331 datareq.open('POST', '/feed', true); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
332 datareq.send(JSON.stringify(msgDict)); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
333 } |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
334 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
335 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
336 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
337 var charshifts = { '-': "5f", '=': "2b", '[': "7b", ']': "7d", '\\': "7c", |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
338 ';': "3a", '\'': "22", ',': "3c", '.': "3e", '/': "3f", '`': "7e" |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
339 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
340 |
76
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
341 var kpkeys = { "KP1": "1b4f46", "KP2": "1b4f42", "KP3": "1b5b367e", |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
342 "KP4": "1b4f44", "KP5": "1b5b45", "KP6": "1b4f43", |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
343 "KP7": "1b4f48", "KP8": "1b4f41", "KP9": "1b5b357e" }; |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
344 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
345 function vkey(c) { |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
346 if (!session.playing) |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
347 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
348 var keystr; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
349 if (c.match(/^[a-z]$/)) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
350 if (termemu.ctrlp()) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
351 var n = c.charCodeAt(0) - 96; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
352 keystr = n.toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
353 if (keystr.length < 2) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
354 keystr = "0" + keystr; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
355 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
356 else if (termemu.shiftp()) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
357 keystr = c.toUpperCase().charCodeAt(0).toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
358 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
359 keystr = c.charCodeAt(0).toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
360 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
361 else if (c.match(/^[0-9]$/)) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
362 if (termemu.shiftp()) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
363 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
|
364 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
365 keystr = c.charCodeAt(0).toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
366 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
367 else if (c == '\n') |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
368 keystr = "0a"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
369 else if (c == '\t') |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
370 keystr = "09"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
371 else if (c == '\b') |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
372 keystr = "08"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
373 else if (c == ' ') |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
374 keystr = "20"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
375 else if (c in charshifts) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
376 if (termemu.shiftp()) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
377 keystr = charshifts[c]; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
378 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
379 keystr = c.charCodeAt(0).toString(16); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
380 } |
76
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
381 else if (c in kpkeys) { |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
382 keystr = kpkeys[c]; |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
383 } |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
384 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
385 return; |
108
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
386 if (session.sock) { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
387 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
|
388 } |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
389 else { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
390 var datareq = new XMLHttpRequest(); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
391 var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": keystr}; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
392 datareq.onerror = errHandler; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
393 datareq.onreadystatechange = postResponseHandler; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
394 datareq.open('POST', '/feed', true); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
395 datareq.send(JSON.stringify(msgDict)); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
396 } |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
397 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
398 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
399 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
400 function setup() { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
401 keyHexCodes.init(); |
4
ee22eb9ab009
Client: don't assume the terminal is 24x80.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
402 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
|
403 /* 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
|
404 if ("lcred" in sessionStorage) { |
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
405 setmode("choose"); |
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
406 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
|
407 } |
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
408 else |
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
409 setmode("login"); |
78
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
410 /* Set up the text size. */ |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
411 var cssSize = termemu.view.style.fontSize; |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
412 var match = cssSize.match(/\d*/); |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
413 if (!match) { |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
414 return; |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
415 } |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
416 var csize = Number(match[0]); |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
417 var allscreen = document.getElementById("termwrap"); |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
418 while (csize > 9 && csize < 48) { |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
419 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
|
420 csize = textsize(false); |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
421 } |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
422 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
|
423 csize = textsize(true); |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
424 } |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
425 else |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
426 break; |
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
427 } |
116
d7d7cdcba3b4
Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents:
112
diff
changeset
|
428 if (!window.WebSocket) { |
109
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
429 message("Your browser does not support WebSockets. You can still play, " + |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
430 "but it will be slower, and may not work in the future.", "warn"); |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
431 } |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
432 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
433 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
434 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
435 function toggleshift() { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
436 termemu.toggleshift(); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
437 keydiv = document.getElementById("shiftkey"); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
438 if (termemu.shiftp()) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
439 keydiv.className = "keysel"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
440 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
441 keydiv.className = "key"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
442 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
443 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
444 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
445 function togglectrl() { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
446 termemu.togglectrl(); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
447 keydiv = document.getElementById("ctrlkey"); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
448 if (termemu.ctrlp()) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
449 keydiv.className = "keysel"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
450 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
451 keydiv.className = "key"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
452 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
453 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
454 |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
455 function formlogin(ev) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
456 ev.preventDefault(); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
457 if (session.id != null) |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
458 return; |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
459 var loginmsg = {}; |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
460 loginmsg["name"] = document.getElementById("input_name").value; |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
461 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
|
462 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
463 req.onerror = errHandler; |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
464 req.onreadystatechange = function () { |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
465 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
|
466 return; |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
467 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
|
468 if (reply.t == 'l') { |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
469 /* Success */ |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
470 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
|
471 sessionStorage.setItem("lname", reply.u); |
89
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
472 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
|
473 setmode("choose"); |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
474 } |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
475 else if (reply.t == 'E') { |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
476 var failmsg = "Logging in failed. "; |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
477 if (reply.c == 2) |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
478 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
|
479 else if (reply.c == 3) |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
480 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
|
481 else if (reply.c == 6) |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
482 failmsg += "The server is shutting down."; |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
483 message(failmsg, "warn"); |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
484 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
|
485 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
|
486 } |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
487 }; |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
488 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
|
489 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
|
490 return; |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
491 } |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
492 |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
493 function tableCurrent(gamelist) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
494 var gamediv = document.getElementById("gametable"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
495 while (gamediv.children.length > 2) |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
496 gamediv.removeChild(gamediv.children[2]); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
497 if (gamelist.length === 0) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
498 gamediv.style.display = "none"; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
499 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
|
500 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
501 else { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
502 gamediv.style.display = "table"; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
503 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
|
504 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
505 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
|
506 var row = document.createElement("div"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
507 var cell1 = document.createElement("div"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
508 var cell2 = document.createElement("div"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
509 var cell3 = document.createElement("div"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
510 var cell4 = document.createElement("div"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
511 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
|
512 var uname = gamelist[i].g; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
513 if (uname in games) |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
514 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
|
515 else { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
516 continue; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
517 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
518 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
|
519 var button = document.createElement("span"); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
520 button.appendChild(document.createTextNode("Watch")); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
521 button.onclick = makeWatcher(gamelist[i].n); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
522 button.className = "ibutton"; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
523 cell4.appendChild(button); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
524 row.appendChild(cell1); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
525 row.appendChild(cell2); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
526 row.appendChild(cell3); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
527 row.appendChild(cell4); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
528 gamediv.appendChild(row); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
529 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
530 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
531 |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
532 /* 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
|
533 function wsCurrent() { |
116
d7d7cdcba3b4
Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents:
112
diff
changeset
|
534 if (!window.WebSocket) |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
535 return; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
536 if (session.id) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
537 /* 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
|
538 if (statsock) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
539 statsock.close(); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
540 statsock = null; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
541 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
542 return; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
543 } |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
544 if ("lcred" in sessionStorage) { |
112
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
545 /* 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
|
546 getchoices(); |
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
547 } |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
548 if (statsock) |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
549 return; |
106
dc1414faee19
RLG-Web client: determine the host for WebSocket connections.
John "Elwin" Edwards <elwin@sdf.org>
parents:
105
diff
changeset
|
550 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
|
551 statsock.onmessage = function (ev) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
552 var msg; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
553 try { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
554 msg = JSON.parse(ev.data); |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
555 } catch (e) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
556 if (e instanceof SyntaxError) |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
557 return; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
558 } |
112
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
559 if (msg.t == "t") { |
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
560 tableCurrent(msg.g); |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
561 } |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
562 else if ((msg.t == "b" || msg.t == "e") && |
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
563 msg.p == sessionStorage.getItem("lname")) { |
112
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
564 getchoices(); |
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
565 } |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
566 }; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
567 statsock.onclose = function (ev) { |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
568 statsock = null; |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
569 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
570 } |
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
571 |
73
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
572 function getcurrent(clear) { |
116
d7d7cdcba3b4
Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents:
112
diff
changeset
|
573 if (window.WebSocket) { |
112
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
574 return; |
4f2b89e6fde2
RLG-Web: improvements to choices and status messaging.
John "Elwin" Edwards <elwin@sdf.org>
parents:
111
diff
changeset
|
575 } |
73
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
576 if (session.id || clear) { |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
577 if (statInterval) { |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
578 window.clearInterval(statInterval); |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
579 statInterval = null; |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
580 } |
56
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
581 return; |
73
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
582 } |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
583 if (!statInterval) { |
d084610a89b5
Automatically update the lists of current games and actions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
70
diff
changeset
|
584 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
|
585 } |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
586 if ("lcred" in sessionStorage) |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
587 getchoices(); |
56
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
588 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
589 req.onerror = errHandler; |
56
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
590 req.onreadystatechange = function () { |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
591 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
|
592 return; |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
593 var reply; |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
594 try { |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
595 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
|
596 } catch (e) { |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
597 if (e instanceof SyntaxError) |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
598 return; |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
599 } |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
600 if (!reply.s) { |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
601 return; |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
602 } |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
603 tableCurrent(reply.g); |
56
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
604 }; |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
605 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
|
606 req.send(); |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
607 return; |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
608 } |
7f3ca16409fe
RLG-Web client: display a list of current games.
John "Elwin" Edwards <elwin@sdf.org>
parents:
55
diff
changeset
|
609 |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
610 function getchoices() { |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
611 if (session.id != null || !("lcred" in sessionStorage)) |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
612 return; |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
613 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
614 req.onerror = errHandler; |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
615 req.onreadystatechange = function () { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
616 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
|
617 return; |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
618 var reply; |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
619 try { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
620 reply = JSON.parse(req.responseText); |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
621 } catch (e) { |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
622 if (e instanceof SyntaxError) |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
623 return; |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
624 } |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
625 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
|
626 || !("stat" in reply)) |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
627 return; |
45
1bbd0e76ba92
RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents:
44
diff
changeset
|
628 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
|
629 /* 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
|
630 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
|
631 optdiv.removeChild(optdiv.childNodes[1]); |
64
e3082fd06520
Some status improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents:
63
diff
changeset
|
632 for (var gname in games) { |
e3082fd06520
Some status improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents:
63
diff
changeset
|
633 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
|
634 continue; |
45
1bbd0e76ba92
RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents:
44
diff
changeset
|
635 var acttext; |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
636 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
|
637 acttext = "Resume your game"; |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
638 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
|
639 acttext = "Start a game"; |
111
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
640 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
|
641 acttext = "Force save"; |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
642 else |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
643 continue; |
45
1bbd0e76ba92
RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents:
44
diff
changeset
|
644 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
|
645 button.appendChild(document.createTextNode(acttext)); |
111
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
646 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
|
647 button.onclick = makeStarter(gname); |
51
2eda3909f6a3
rlgterm.js: don't make nonfunctional button.
John "Elwin" Edwards <elwin@sdf.org>
parents:
47
diff
changeset
|
648 button.className = "ibutton"; |
46
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
649 } |
111
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
650 else { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
651 button.onclick = makeStopper(gname); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
652 button.className = "ibutton"; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
653 } |
45
1bbd0e76ba92
RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents:
44
diff
changeset
|
654 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
|
655 actdiv.appendChild(button); |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
656 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
|
657 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
|
658 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
|
659 rowdiv.appendChild(gamediv); |
1bbd0e76ba92
RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents:
44
diff
changeset
|
660 rowdiv.appendChild(actdiv); |
1bbd0e76ba92
RLG-Web: put the game options into a table.
John "Elwin" Edwards <elwin@sdf.org>
parents:
44
diff
changeset
|
661 optdiv.appendChild(rowdiv); |
44
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
662 } |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
663 }; |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
664 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
|
665 req.send(); |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
666 return; |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
667 } |
b848cb50cd69
rlgterm.js: present game options to the player.
John "Elwin" Edwards <elwin@sdf.org>
parents:
41
diff
changeset
|
668 |
46
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
669 /* 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
|
670 * 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
|
671 * being Super-Rogue. |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
672 */ |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
673 function makeStarter(gname) { |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
674 if (!(gname in games)) |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
675 return null; |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
676 var game = games[gname]; |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
677 function starter(ev) { |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
678 startgame(game); |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
679 } |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
680 return starter; |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
681 } |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
682 |
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
683 function startgame(game) { |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
684 if (session.id != null || !("lcred" in sessionStorage)) |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
685 return; |
116
d7d7cdcba3b4
Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents:
112
diff
changeset
|
686 if (window.WebSocket) { |
108
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
687 wsStart(game); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
688 return; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
689 } |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
690 var smsg = {}; |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
691 smsg["key"] = sessionStorage.getItem("lcred"); |
46
59ecd99845eb
rlgterm.js: make the options table functional.
John "Elwin" Edwards <elwin@sdf.org>
parents:
45
diff
changeset
|
692 smsg["game"] = game.uname; |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
693 smsg["h"] = 24; |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
694 smsg["w"] = 80; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
695 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
696 req.onerror = errHandler; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
697 req.onreadystatechange = function () { |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
698 if (req.readyState != 4 || req.status != 200) |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
699 return; |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
700 var reply = JSON.parse(req.responseText); |
55
96815eae4ebe
RLG-Web: make multiple watchers possible.
John "Elwin" Edwards <elwin@sdf.org>
parents:
51
diff
changeset
|
701 if (reply.t == 's') { |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
702 /* Success */ |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
703 session.id = reply.id; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
704 session.playing = true; |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
705 termemu.resize(reply.h, reply.w); |
91
e07f98799120
RLG-Web: improve game-starting messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
90
diff
changeset
|
706 message("You are now playing " + game.name + "."); |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
707 setmode("play"); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
708 getData(); |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
709 } |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
710 else if (reply.t == 'E') { |
47
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
711 if (reply.c == 1) { |
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
712 logout(); |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
713 message("The server forgot about you, please log in again.", "warn"); |
94
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
714 } |
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
715 else if (reply.c == 4) { |
109
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
716 if (reply.s == "dgamelaunch") { |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
717 message("You are already playing " + game.name + " over SSH.", |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
718 "warn"); |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
719 } |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
720 else { |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
721 message("You are already playing " + game.name + |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
722 " in another browser window.", "warn"); |
67b393f10c2b
RLG-Web: improve taking over sessions.
John "Elwin" Edwards <elwin@sdf.org>
parents:
108
diff
changeset
|
723 } |
94
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
724 } |
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
725 else if (reply.c == 7) { |
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
726 message("The game is being saved, try again in a few seconds."); |
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
727 } |
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
728 else { |
597e9477b8ae
RLG-Web: Allow games to be taken over.
John "Elwin" Edwards <elwin@sdf.org>
parents:
93
diff
changeset
|
729 message("The server says it can't start your game because \"" + |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
730 reply.s + "\". This is probably a bug.", "warn"); |
47
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
731 } |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
732 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
733 }; |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
734 req.open('POST', '/play', true); |
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
735 req.send(JSON.stringify(smsg)); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
736 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
737 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
738 |
111
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
739 function makeStopper(gname) { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
740 if (!(gname in games)) |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
741 return null; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
742 var game = games[gname]; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
743 function stopper(ev) { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
744 stopgame(game); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
745 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
746 return stopper; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
747 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
748 |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
749 function stopgame(game) { |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
750 if (!("lcred" in sessionStorage)) |
111
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
751 return; |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
752 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
|
753 var req = new XMLHttpRequest(); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
754 req.onerror = errHandler; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
755 req.onreadystatechange = function () { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
756 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
|
757 return; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
758 var reply = JSON.parse(req.responseText); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
759 if (reply.t == 'E') { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
760 if (reply.c == 7) |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
761 message("That game has already stopped."); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
762 else if (reply.c == 1) { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
763 logout(); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
764 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
|
765 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
766 else { |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
767 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
|
768 "This might be a bug.", "warn"); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
769 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
770 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
771 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
772 req.open('POST', '/quit', true); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
773 req.send(JSON.stringify(stopmsg)); |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
774 return; |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
775 } |
f56fdfeed01a
Replace taking over games with forced saves.
John "Elwin" Edwards <elwin@sdf.org>
parents:
109
diff
changeset
|
776 |
108
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
777 function wsStart(game) { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
778 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
|
779 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
|
780 ws = new WebSocket(sockurl); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
781 ws.onopen = function (event) { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
782 session.id = true; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
783 session.playing = true; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
784 session.sock = ws; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
785 setmode("play"); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
786 }; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
787 ws.onmessage = function (event) { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
788 var msgObject = JSON.parse(event.data); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
789 if (msgObject.t == 's') { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
790 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
|
791 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
|
792 } |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
793 else if (msgObject.t == 'd') { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
794 writeData(msgObject.d); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
795 } |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
796 }; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
797 ws.onclose = function (event) { |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
798 session.sock = null; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
799 gameover(); |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
800 }; |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
801 } |
86a458080e80
RLG-Web client: add playing through WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
106
diff
changeset
|
802 |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
803 function startwatching(gamenumber) { |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
804 if (session.id != null) |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
805 return; |
116
d7d7cdcba3b4
Fix WebSocket support checking.
John "Elwin" Edwards <elwin@sdf.org>
parents:
112
diff
changeset
|
806 if (window.WebSocket) { |
100
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
807 wsWatch(gamenumber); |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
808 return; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
809 } |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
810 var wmsg = {"n": Number(gamenumber)}; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
811 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
812 req.onerror = errHandler; |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
813 req.onreadystatechange = function () { |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
814 if (req.readyState != 4 || req.status != 200) |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
815 return; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
816 var reply = JSON.parse(req.responseText); |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
817 if (reply.t == 'w') { |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
818 /* Success */ |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
819 session.id = reply.id; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
820 session.playing = false; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
821 termemu.resize(reply.h, reply.w); |
61
071ec6b1ec03
RLG-Web client: initialize and restore the terminal when watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
59
diff
changeset
|
822 termemu.reset(); |
071ec6b1ec03
RLG-Web client: initialize and restore the terminal when watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
59
diff
changeset
|
823 termemu.toAltBuf(); |
91
e07f98799120
RLG-Web: improve game-starting messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
90
diff
changeset
|
824 var pname = reply.p; |
e07f98799120
RLG-Web: improve game-starting messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
90
diff
changeset
|
825 var gname = games[reply.g].name; |
e07f98799120
RLG-Web: improve game-starting messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
90
diff
changeset
|
826 message("You are now watching " + pname + " play " + gname + "."); |
90
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
827 setmode("watch"); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
828 getData(); |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
829 } |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
830 else if (reply.t == 'E') { |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
831 message("The game could not be watched: " + reply.s, "warn"); |
65
e63c26dc0497
RLG-Web client: refresh the current games list.
John "Elwin" Edwards <elwin@sdf.org>
parents:
64
diff
changeset
|
832 getcurrent(); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
833 } |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
834 }; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
835 req.open('POST', '/watch', true); |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
836 req.send(JSON.stringify(wmsg)); |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
837 return; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
838 } |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
839 |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
840 function makeWatcher(n) { |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
841 function watcher(ev) { |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
842 startwatching(n); |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
843 } |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
844 return watcher; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
845 } |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
846 |
100
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
847 function wsWatch(gamenumber) { |
106
dc1414faee19
RLG-Web client: determine the host for WebSocket connections.
John "Elwin" Edwards <elwin@sdf.org>
parents:
105
diff
changeset
|
848 var sockurl = "ws://" + window.location.host + "/watch/" + String(gamenumber); |
100
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
849 var ws = new WebSocket(sockurl); |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
850 ws.onopen = function (event) { |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
851 session.id = true; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
852 session.sock = ws; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
853 setmode("watch"); |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
854 }; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
855 ws.onmessage = function (event) { |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
856 var msgObject = JSON.parse(event.data); |
101
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
857 if (msgObject.t == 'w') { |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
858 termemu.resize(msgObject.h, msgObject.w); |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
859 termemu.reset(); |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
860 termemu.toAltBuf(); |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
861 var pname = msgObject.p; |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
862 var gname = games[msgObject.g].name; |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
863 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
|
864 } |
e59d68082664
RLG-Web: Complete the WebSocket watcher.
John "Elwin" Edwards <elwin@sdf.org>
parents:
100
diff
changeset
|
865 else if (msgObject.t == 'd') { |
100
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
866 writeData(msgObject.d); |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
867 } |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
868 }; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
869 ws.onclose = function (event) { |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
870 session.sock = null; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
871 gameover(); |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
872 }; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
873 } |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
874 |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
875 function formreg(ev) { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
876 ev.preventDefault(); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
877 if (session.id != null) |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
878 return; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
879 var regmsg = {}; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
880 regmsg["name"] = document.getElementById("regin_name").value; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
881 regmsg["pw"] = document.getElementById("regin_pw").value; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
882 regmsg["email"] = document.getElementById("regin_email").value; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
883 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
884 req.onerror = errHandler; |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
885 req.onreadystatechange = function () { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
886 if (req.readyState != 4 || req.status != 200) |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
887 return; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
888 var reply = JSON.parse(req.responseText); |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
889 if (reply.t == 'r') { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
890 /* Success */ |
89
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
891 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
|
892 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
|
893 sessionStorage.setItem("lname", reply.u); |
89
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
894 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
|
895 setmode("choose"); |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
896 } |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
897 else if (reply.t == 'E') { |
93
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
898 var failmsg = "Registration failed."; |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
899 if (reply.c == 2) { |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
900 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
|
901 if (errdesc.match(/No name/)) |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
902 failmsg += " You need to choose a name."; |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
903 else if (errdesc.match(/No password/)) |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
904 failmsg += " You need to choose a password."; |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
905 else if (errdesc.match(/Invalid/)) { |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
906 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
|
907 "can also contain these characters: @.-_"; |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
908 } |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
909 else if (errdesc.match(/Username/)) |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
910 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
|
911 else |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
912 failmsg += " This is probably a bug."; |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
913 } |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
914 else |
104409bf5f03
rlgterm.js: improve registration failure messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
92
diff
changeset
|
915 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
|
916 message(failmsg, "warn"); |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
917 document.getElementById("regin_name").value = ""; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
918 document.getElementById("regin_pw").value = ""; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
919 document.getElementById("regin_email").value = ""; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
920 } |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
921 }; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
922 req.open('POST', '/addacct', true); |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
923 req.send(JSON.stringify(regmsg)); |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
924 return; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
925 } |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
926 |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
927 function gameover() { |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
928 if (session.id == null) |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
929 return; |
38
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
930 /* 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
|
931 if (session.playing) |
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
932 message("Finished playing."); |
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
933 else |
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
934 message("Finished watching."); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
935 session.id = null; |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
936 session.playing = false; |
38
b06a14876645
RLG-Web: reduce polling further.
John "Elwin" Edwards <elwin@sdf.org>
parents:
35
diff
changeset
|
937 ajaxstate.clear(); |
61
071ec6b1ec03
RLG-Web client: initialize and restore the terminal when watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
59
diff
changeset
|
938 termemu.toNormBuf(); |
16
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
939 nsend = 0; |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
940 nrecv = 0; |
ef6127ed6da3
RLGWeb: switch to JSON protocol.
John "Elwin" Edwards <elwin@sdf.org>
parents:
9
diff
changeset
|
941 msgQ = []; |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
942 if ("lcred" in sessionStorage) |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
943 setmode("choose"); |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
944 else |
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
945 setmode("login"); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
946 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
947 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
948 |
47
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
949 function logout() { |
127
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
950 sessionStorage.removeItem("lcred"); |
e54018b26ed8
RLG-Web client: store login key in DOM Storage.
John "Elwin" Edwards <elwin@sdf.org>
parents:
120
diff
changeset
|
951 sessionStorage.removeItem("lname"); |
47
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
952 setmode("login"); |
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
953 } |
27b7f0c8b9f0
RLG-Web: make login sessions time out.
John "Elwin" Edwards <elwin@sdf.org>
parents:
46
diff
changeset
|
954 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
955 function stop() { |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
956 if (!session.id) |
39
e8ac0e3d2614
RLG-Web: separate logging in and starting a game.
John "Elwin" Edwards <elwin@sdf.org>
parents:
38
diff
changeset
|
957 return; |
100
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
958 if (session.sock) { |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
959 session.sock.close(); |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
960 return; |
3dbfdaf62623
RLG-Web: begin converting to WebSockets.
John "Elwin" Edwards <elwin@sdf.org>
parents:
97
diff
changeset
|
961 } |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
962 var req = new XMLHttpRequest(); |
75
2984604ce3e6
Begin handling XMLHttpRequest errors.
John "Elwin" Edwards <elwin@sdf.org>
parents:
73
diff
changeset
|
963 req.onerror = errHandler; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
964 req.onreadystatechange = function () { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
965 if (req.readyState == 4 && req.status == 200) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
966 processMsg(req.responseText); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
967 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
968 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
969 }; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
970 req.open('POST', '/feed', true); |
59
00b985b8ba6a
RLG-Web client: implement watching.
John "Elwin" Edwards <elwin@sdf.org>
parents:
58
diff
changeset
|
971 req.send(JSON.stringify({"id": session.id, "t": "q"})); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
972 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
973 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
974 |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
975 function setmode(mode, ev) { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
976 if (ev) |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
977 ev.preventDefault(); |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
978 if (mode == "play") { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
979 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
|
980 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
|
981 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
|
982 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
|
983 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
|
984 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
|
985 } |
90
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
986 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
|
987 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
|
988 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
|
989 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
|
990 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
|
991 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
|
992 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
|
993 } |
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
994 else if (mode == "choose") { |
6c6a6e4f1e5b
RLG-Web client: distinguish playing and watching in UI.
John "Elwin" Edwards <elwin@sdf.org>
parents:
89
diff
changeset
|
995 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
|
996 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
|
997 document.getElementById("startgame").style.display = "block"; |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
998 document.getElementById("login").style.display = "none"; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
999 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
|
1000 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
|
1001 getcurrent(); |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1002 } |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1003 else if (mode == "login") { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1004 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
|
1005 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
|
1006 document.getElementById("startgame").style.display = "none"; |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1007 document.getElementById("login").style.display = "block"; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1008 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
|
1009 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
|
1010 getcurrent(); |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1011 } |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1012 else if (mode == "register") { |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1013 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
|
1014 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
|
1015 document.getElementById("startgame").style.display = "none"; |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1016 document.getElementById("login").style.display = "none"; |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1017 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
|
1018 document.getElementById("current").style.display = "none"; |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1019 } |
105
a9371002aecc
RLG-Web client: use WebSockets for game lists.
John "Elwin" Edwards <elwin@sdf.org>
parents:
101
diff
changeset
|
1020 wsCurrent(); |
19
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1021 } |
188bbd857124
RLG-Web: add user registration
John "Elwin" Edwards <elwin@sdf.org>
parents:
16
diff
changeset
|
1022 |
76
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1023 function toggleBlock(id) { |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1024 var element = document.getElementById(id); |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1025 if (!element) |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1026 return; |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1027 if (element.style.display != "block") |
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1028 element.style.display = "block"; |
67
b6a3b26fe0dc
RLG-Web client: some visual improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents:
66
diff
changeset
|
1029 else |
76
a497ecd116d9
Improvements to the keyboard.
John "Elwin" Edwards <elwin@sdf.org>
parents:
75
diff
changeset
|
1030 element.style.display = "none"; |
67
b6a3b26fe0dc
RLG-Web client: some visual improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents:
66
diff
changeset
|
1031 } |
b6a3b26fe0dc
RLG-Web client: some visual improvements.
John "Elwin" Edwards <elwin@sdf.org>
parents:
66
diff
changeset
|
1032 |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
1033 function message(msg, mtype) { |
89
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1034 var msgdiv = document.createElement("div"); |
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1035 var msgtext = document.createTextNode(msg); |
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1036 msgdiv.appendChild(msgtext); |
96
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
1037 if (mtype) { |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
1038 msgdiv.className = mtype; |
7bb634f6995c
RLG-Web client: improvements to UI messages.
John "Elwin" Edwards <elwin@sdf.org>
parents:
94
diff
changeset
|
1039 } |
89
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1040 var msgcontainer = document.getElementById("messages"); |
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1041 msgcontainer.insertBefore(msgdiv, msgcontainer.firstChild); |
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1042 } |
6145e1ea7ace
RLG-Web: add a new message framework.
John "Elwin" Edwards <elwin@sdf.org>
parents:
88
diff
changeset
|
1043 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1044 function debug(level, msg) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1045 if (level < debugSuppress) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1046 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1047 var msgdiv = document.createElement("div"); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1048 var msgtext = document.createTextNode(msg); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1049 msgdiv.appendChild(msgtext); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1050 document.getElementById("debug").appendChild(msgdiv); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1051 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1052 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1053 |
92
a4d3ecf188b7
RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents:
91
diff
changeset
|
1054 function setTitle(tstr) { |
a4d3ecf188b7
RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents:
91
diff
changeset
|
1055 message(tstr); |
a4d3ecf188b7
RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents:
91
diff
changeset
|
1056 } |
a4d3ecf188b7
RLG-Web client: replace setTitle() with message().
John "Elwin" Edwards <elwin@sdf.org>
parents:
91
diff
changeset
|
1057 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1058 function textsize(larger) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1059 var cssSize = termemu.view.style.fontSize; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1060 if (!cssSize) { |
78
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
1061 return null; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1062 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1063 var match = cssSize.match(/\d*/); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1064 if (!match) { |
78
06375a159188
Try to guess a good text size.
John "Elwin" Edwards <elwin@sdf.org>
parents:
77
diff
changeset
|
1065 return null; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1066 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1067 var csize = Number(match[0]); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1068 var nsize; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1069 if (larger) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1070 if (csize >= 48) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1071 nsize = 48; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1072 else if (csize >= 20) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1073 nsize = csize + 4; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1074 else if (csize >= 12) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1075 nsize = csize + 2; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1076 else if (csize >= 8) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1077 nsize = csize + 1; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1078 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1079 nsize = 8; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1080 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1081 else { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1082 if (csize <= 8) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1083 nsize = 8; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1084 else if (csize <= 12) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1085 nsize = csize - 1; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1086 else if (csize <= 20) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1087 nsize = csize - 2; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1088 else if (csize <= 48) |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1089 nsize = csize - 4; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1090 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1091 nsize = 48; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1092 } |
77
f8bb37f48d58
Make font resizing affect the keyboard too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
76
diff
changeset
|
1093 var cssvalstr = nsize.toString() + "px"; |
f8bb37f48d58
Make font resizing affect the keyboard too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
76
diff
changeset
|
1094 document.getElementById("term").style.fontSize = cssvalstr; |
f8bb37f48d58
Make font resizing affect the keyboard too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
76
diff
changeset
|
1095 document.getElementById("keys").style.fontSize = cssvalstr; |
9
826a7ced69f8
Make the emulator screen resizable.
John "Elwin" Edwards <elwin@sdf.org>
parents:
6
diff
changeset
|
1096 termemu.fixsize(); |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1097 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
|
1098 return nsize; |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1099 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1100 |
66
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1101 function idlestr(ms) { |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1102 if (typeof(ms) != "number") |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1103 return "?"; |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1104 var seconds = Math.round(ms / 1000); |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1105 var ss = String(seconds % 60); |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1106 if (ss.length < 2) |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1107 ss = "0" + ss; |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1108 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
|
1109 if (mm.length < 2) |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1110 mm = "0" + mm; |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1111 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
|
1112 if (hh.length < 2) |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1113 hh = "0" + hh; |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1114 return hh + ":" + mm + ":" + ss; |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1115 } |
57bf0dcd080e
Display idle time of games in progress.
John "Elwin" Edwards <elwin@sdf.org>
parents:
65
diff
changeset
|
1116 |
0
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1117 function bell(on) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1118 var imgnode = document.getElementById("bell"); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1119 if (on) { |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1120 imgnode.style.visibility = "visible"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1121 window.setTimeout(bell, 1500, false); |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1122 } |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1123 else |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1124 imgnode.style.visibility = "hidden"; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1125 return; |
bd412f63ce0d
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
1126 } |