This repository was archived by the owner on Oct 31, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
110 lines (91 loc) · 2.38 KB
/
server.js
File metadata and controls
110 lines (91 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
var WebSocket = require("ws");
var http = require("http");
var path = require("path");
var fs = require("fs");
var URL = require("url");
var ws = require("ws");
var websockets = {};
var mainws = null;
function waitForBody(req) {
return new Promise((accept,reject) => {
var chunks = [];
req.on("data", (chunk) => {
chunks.push(chunk);
});
req.on("end", () => {
accept(Buffer.concat(chunks));
});
req.on("error", (e) => {
reject(e);
});
})
}
function createWebsocket() {
var wss = new ws.WebSocketServer({ noServer: true });
wss.on("connection", (ws) => {
ws.on("message", (data) => {
try{
var str = data.toString();
wss.clients.forEach((cl) => {
cl.send(str);
});
}catch(e){
ws.close();
}
});
});
return wss;
}
function setNoCorsHeaders(res) {
res.setHeader("Access-Control-Allow-Origin", "*");
}
function runStaticStuff(req, res, forceStatus) {
var url = URL.parse(req.url);
var pathname = url.pathname;
setNoCorsHeaders(res);
var file = path.join("./static/", pathname);
if (pathname == "/") {
file = "static/index.html";
}
if (file.split(".").length < 2) {
file += ".html";
}
if (!fs.existsSync(file)) {
file = "errors/404.html";
res.statusCode = 404;
}
if (typeof forceStatus !== "undefined") {
file = "errors/" + forceStatus + ".html";
res.statusCode = forceStatus;
}
fs.createReadStream(file).pipe(res);
}
async function handleHTTPRequest(req, res) {
var url = decodeURIComponent(req.url);
var urlsplit = url.split("/");
if (urlsplit[1] == "createRoomCode") {
var body = await waitForBody(req);
var json = JSON.parse(body.toString());
return;
}
runStaticStuff(req, res);
}
var server = http.createServer(handleHTTPRequest);
mainws = createWebsocket();
server.on("upgrade", function upgrade(request, socket, head) {
var url = decodeURIComponent(request.url);
var urlsplit = url.split("/");
var id = urlsplit[1];
if (websockets[id]) {
var wss = websockets[id];
wss.handleUpgrade(request, socket, head, function done(ws) {
wss.emit("connection", ws, request);
});
} else {
mainws.handleUpgrade(request, socket, head, function done(ws) {
mainws.emit("connection", ws, request);
});
}
});
server.listen(3000);
console.log("Server started!");