2020-05-27 20:33:51 +00:00
|
|
|
const fs = require("fs");
|
|
|
|
const https = require("https");
|
|
|
|
const WebSocket = require("ws");
|
|
|
|
|
|
|
|
const server = https.createServer({
|
|
|
|
cert: fs.readFileSync("cert.pem"),
|
|
|
|
key: fs.readFileSync("key.pem")
|
|
|
|
});
|
|
|
|
const wss = new WebSocket.Server({
|
2020-06-04 19:44:25 +00:00
|
|
|
...(process.env.NODE_ENV === "development" ? { port: 8081 } : { server }),
|
2020-05-27 20:33:51 +00:00
|
|
|
verifyClient: info =>
|
2020-07-19 18:40:40 +00:00
|
|
|
!!info.origin.match(
|
|
|
|
/^https?:\/\/(bra1n\.github\.io|localhost|eddbra1nprivatetownsquare\.xyz)/i
|
|
|
|
)
|
2020-05-27 20:33:51 +00:00
|
|
|
});
|
|
|
|
|
2020-06-04 19:44:25 +00:00
|
|
|
function noop() {}
|
|
|
|
|
|
|
|
function heartbeat() {
|
|
|
|
this.isAlive = true;
|
|
|
|
}
|
|
|
|
|
2020-05-27 20:33:51 +00:00
|
|
|
wss.on("connection", function connection(ws, req) {
|
|
|
|
ws.channel = req.url
|
|
|
|
.split("/")
|
|
|
|
.pop()
|
|
|
|
.toLocaleLowerCase();
|
2020-06-04 19:44:25 +00:00
|
|
|
ws.isAlive = true;
|
|
|
|
ws.on("pong", heartbeat);
|
2020-05-27 20:33:51 +00:00
|
|
|
ws.on("message", function incoming(data) {
|
2020-05-30 20:01:42 +00:00
|
|
|
if (!data.match(/^\["ping/i)) {
|
|
|
|
console.log(ws.channel, wss.clients.size, data);
|
|
|
|
}
|
2020-05-27 20:33:51 +00:00
|
|
|
wss.clients.forEach(function each(client) {
|
|
|
|
if (
|
|
|
|
client !== ws &&
|
|
|
|
client.readyState === WebSocket.OPEN &&
|
|
|
|
client.channel === ws.channel
|
|
|
|
) {
|
|
|
|
client.send(data);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2020-06-04 19:44:25 +00:00
|
|
|
const interval = setInterval(function ping() {
|
|
|
|
wss.clients.forEach(function each(ws) {
|
|
|
|
if (ws.isAlive === false) return ws.terminate();
|
|
|
|
ws.isAlive = false;
|
|
|
|
ws.ping(noop);
|
|
|
|
});
|
|
|
|
}, 30000);
|
|
|
|
|
|
|
|
wss.on("close", function close() {
|
|
|
|
clearInterval(interval);
|
|
|
|
});
|
|
|
|
|
|
|
|
if (process.env.NODE_ENV !== "development") {
|
|
|
|
server.listen(8080);
|
|
|
|
}
|