diff --git a/src/server.js b/src/server.js index 4300364..1b5ba39 100644 --- a/src/server.js +++ b/src/server.js @@ -1,12 +1,14 @@ const Koa = require("koa"); const koaBody = require("koa-body"); const Router = require("koa-router"); +const WS = require("ws"); const http = require("http"); const logger = require("simple-console-logger"); const app = new Koa(); const server = http.createServer(app.callback()); const router = new Router(); +const wss = new WS.Server({ server }); const debugLevel = GetConvar("livemap_debug_level", "warn"); const access = GetConvar("livemap_access_control", "*"); @@ -23,6 +25,8 @@ router.use(async (ctx, next) => { }); require("./src/blips")(router); +require("./src/sockets")(wss, access); + app.use(koaBody({ patchKoa: true, })) diff --git a/src/sockets.js b/src/sockets.js new file mode 100644 index 0000000..05e5456 --- /dev/null +++ b/src/sockets.js @@ -0,0 +1,27 @@ +const log = require("simple-console-logger").getLogger("LiveMap Sockets"); +const WS = require("ws"); + +const SocketController = (wss, access) => { + wss.broadcast = function broadcast(data) { + wss.clients.forEach(function each(client) { + if (client.readyState === WS.OPEN) { + client.send(data); + } + }); + }; + + wss.on("connection", function connection(ws, req) { //ws, res + log.trace("Access is: %s", access); + if (access !== "*") { // We don't want to accept all requests + if (req.headers.origin !== access) { + ws.close(); + log.warn("Someone tried connecting from an invalid origin: %s", req.headers.origin); + } + } + log.debug("connection made from", req.headers.origin); + }); + + return {}; +}; + +module.exports = SocketController; \ No newline at end of file