Skip to content
This repository was archived by the owner on Oct 31, 2025. It is now read-only.

Commit 52d4fd7

Browse files
authored
Create server.js
0 parents  commit 52d4fd7

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

server.js

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

0 commit comments

Comments
 (0)