Skip to content

Commit 7a80a77

Browse files
committed
Add simple websocket server that remembers clients
1 parent 5736733 commit 7a80a77

File tree

3 files changed

+325
-0
lines changed

3 files changed

+325
-0
lines changed

chat-server/index.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
const express = require('express');
2+
const setupWs = require('express-ws');
3+
const uuidV1 = require('uuid/v1');
4+
5+
// init express app
6+
const app = express();
7+
// apply websockets to express
8+
setupWs(app);
9+
10+
const clients = [];
11+
const chatSessions = {};
12+
13+
// setup route
14+
// "/berserk/berserk-season-2-erinnerungen-der-hexe-734281"
15+
app.ws('/:series/:episode', (ws, req) => {
16+
const {series, episode} = req.params;
17+
const clientId = uuidV1();
18+
const chatKey = series + episode;
19+
20+
if (!chatSessions[chatKey]) {
21+
chatSessions[chatKey] = [];
22+
}
23+
24+
// assign index and store in memory db
25+
ws.uuid = clientId;
26+
clients.push(ws);
27+
28+
ws.on('message', msg => {
29+
console.log(msg);
30+
});
31+
32+
ws.on('close', () => {
33+
const clientIndex = clients.findIndex(c => c.uuid === clientId);
34+
clients.splice(clientIndex, 1);
35+
console.log('Client disconnected:', clientId, clients);
36+
});
37+
38+
console.log('New connection for', series, episode, 'with client:', clientId, '\n', clients);
39+
});
40+
41+
app.listen(3000);

chat-server/package.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "chat-server",
3+
"version": "1.0.0",
4+
"description": "Simple websocket chat server",
5+
"main": "index.js",
6+
"license": "MIT",
7+
"dependencies": {
8+
"express": "^4.15.3",
9+
"express-ws": "^3.0.0",
10+
"uuid": "^3.0.1"
11+
}
12+
}

chat-server/yarn.lock

Lines changed: 272 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,272 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1
3+
4+
5+
accepts@~1.3.3:
6+
version "1.3.3"
7+
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
8+
dependencies:
9+
mime-types "~2.1.11"
10+
negotiator "0.6.1"
11+
12+
13+
version "1.1.1"
14+
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
15+
16+
17+
version "0.5.2"
18+
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
19+
20+
content-type@~1.0.2:
21+
version "1.0.2"
22+
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
23+
24+
25+
version "1.0.6"
26+
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
27+
28+
29+
version "0.3.1"
30+
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
31+
32+
33+
version "2.6.7"
34+
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
35+
dependencies:
36+
ms "2.0.0"
37+
38+
[email protected], depd@~1.1.0:
39+
version "1.1.0"
40+
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
41+
42+
destroy@~1.0.4:
43+
version "1.0.4"
44+
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
45+
46+
47+
version "1.1.1"
48+
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
49+
50+
encodeurl@~1.0.1:
51+
version "1.0.1"
52+
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
53+
54+
escape-html@~1.0.3:
55+
version "1.0.3"
56+
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
57+
58+
etag@~1.8.0:
59+
version "1.8.0"
60+
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
61+
62+
express-ws@^3.0.0:
63+
version "3.0.0"
64+
resolved "https://registry.yarnpkg.com/express-ws/-/express-ws-3.0.0.tgz#7ddaaf3b7c758865c099905989911b6234477dbd"
65+
dependencies:
66+
ws "^2.0.0"
67+
68+
express@^4.15.3:
69+
version "4.15.3"
70+
resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662"
71+
dependencies:
72+
accepts "~1.3.3"
73+
array-flatten "1.1.1"
74+
content-disposition "0.5.2"
75+
content-type "~1.0.2"
76+
cookie "0.3.1"
77+
cookie-signature "1.0.6"
78+
debug "2.6.7"
79+
depd "~1.1.0"
80+
encodeurl "~1.0.1"
81+
escape-html "~1.0.3"
82+
etag "~1.8.0"
83+
finalhandler "~1.0.3"
84+
fresh "0.5.0"
85+
merge-descriptors "1.0.1"
86+
methods "~1.1.2"
87+
on-finished "~2.3.0"
88+
parseurl "~1.3.1"
89+
path-to-regexp "0.1.7"
90+
proxy-addr "~1.1.4"
91+
qs "6.4.0"
92+
range-parser "~1.2.0"
93+
send "0.15.3"
94+
serve-static "1.12.3"
95+
setprototypeof "1.0.3"
96+
statuses "~1.3.1"
97+
type-is "~1.6.15"
98+
utils-merge "1.0.0"
99+
vary "~1.1.1"
100+
101+
finalhandler@~1.0.3:
102+
version "1.0.3"
103+
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89"
104+
dependencies:
105+
debug "2.6.7"
106+
encodeurl "~1.0.1"
107+
escape-html "~1.0.3"
108+
on-finished "~2.3.0"
109+
parseurl "~1.3.1"
110+
statuses "~1.3.1"
111+
unpipe "~1.0.0"
112+
113+
forwarded@~0.1.0:
114+
version "0.1.0"
115+
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
116+
117+
118+
version "0.5.0"
119+
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
120+
121+
http-errors@~1.6.1:
122+
version "1.6.1"
123+
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
124+
dependencies:
125+
depd "1.1.0"
126+
inherits "2.0.3"
127+
setprototypeof "1.0.3"
128+
statuses ">= 1.3.1 < 2"
129+
130+
131+
version "2.0.3"
132+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
133+
134+
135+
version "1.3.0"
136+
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec"
137+
138+
139+
version "0.3.0"
140+
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
141+
142+
143+
version "1.0.1"
144+
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
145+
146+
methods@~1.1.2:
147+
version "1.1.2"
148+
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
149+
150+
mime-db@~1.27.0:
151+
version "1.27.0"
152+
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
153+
154+
mime-types@~2.1.11, mime-types@~2.1.15:
155+
version "2.1.15"
156+
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
157+
dependencies:
158+
mime-db "~1.27.0"
159+
160+
161+
version "1.3.4"
162+
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
163+
164+
165+
version "2.0.0"
166+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
167+
168+
169+
version "0.6.1"
170+
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
171+
172+
on-finished@~2.3.0:
173+
version "2.3.0"
174+
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
175+
dependencies:
176+
ee-first "1.1.1"
177+
178+
parseurl@~1.3.1:
179+
version "1.3.1"
180+
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
181+
182+
183+
version "0.1.7"
184+
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
185+
186+
proxy-addr@~1.1.4:
187+
version "1.1.4"
188+
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3"
189+
dependencies:
190+
forwarded "~0.1.0"
191+
ipaddr.js "1.3.0"
192+
193+
194+
version "6.4.0"
195+
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
196+
197+
range-parser@~1.2.0:
198+
version "1.2.0"
199+
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
200+
201+
safe-buffer@~5.0.1:
202+
version "5.0.1"
203+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
204+
205+
206+
version "0.15.3"
207+
resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309"
208+
dependencies:
209+
debug "2.6.7"
210+
depd "~1.1.0"
211+
destroy "~1.0.4"
212+
encodeurl "~1.0.1"
213+
escape-html "~1.0.3"
214+
etag "~1.8.0"
215+
fresh "0.5.0"
216+
http-errors "~1.6.1"
217+
mime "1.3.4"
218+
ms "2.0.0"
219+
on-finished "~2.3.0"
220+
range-parser "~1.2.0"
221+
statuses "~1.3.1"
222+
223+
224+
version "1.12.3"
225+
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2"
226+
dependencies:
227+
encodeurl "~1.0.1"
228+
escape-html "~1.0.3"
229+
parseurl "~1.3.1"
230+
send "0.15.3"
231+
232+
233+
version "1.0.3"
234+
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
235+
236+
"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
237+
version "1.3.1"
238+
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
239+
240+
type-is@~1.6.15:
241+
version "1.6.15"
242+
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
243+
dependencies:
244+
media-typer "0.3.0"
245+
mime-types "~2.1.15"
246+
247+
ultron@~1.1.0:
248+
version "1.1.0"
249+
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864"
250+
251+
unpipe@~1.0.0:
252+
version "1.0.0"
253+
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
254+
255+
256+
version "1.0.0"
257+
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
258+
259+
uuid@^3.0.1:
260+
version "3.0.1"
261+
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
262+
263+
vary@~1.1.1:
264+
version "1.1.1"
265+
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
266+
267+
ws@^2.0.0:
268+
version "2.3.1"
269+
resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80"
270+
dependencies:
271+
safe-buffer "~5.0.1"
272+
ultron "~1.1.0"

0 commit comments

Comments
 (0)