diff options
| author | Adam Soltys <[email protected]> | 2020-03-11 15:10:40 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2020-03-11 15:10:40 -0700 |
| commit | c0888fab024cc9f7c99812bfabf9d7774312dbf7 (patch) | |
| tree | cad95683af97432f6092a2c2bae10fbb7a588db5 /lib/sockets.js | |
| parent | bf2b51f0c2ae9b8f0f330dde6411e45fc0da8a25 (diff) | |
| download | coinos-server-c0888fab024cc9f7c99812bfabf9d7774312dbf7.tar.gz coinos-server-c0888fab024cc9f7c99812bfabf9d7774312dbf7.zip | |
refactor
Diffstat (limited to 'lib/sockets.js')
| -rw-r--r-- | lib/sockets.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/sockets.js b/lib/sockets.js new file mode 100644 index 00000000..3ebf86d7 --- /dev/null +++ b/lib/sockets.js @@ -0,0 +1,67 @@ +const jwt = require("jsonwebtoken"); +const io = require("socket.io"); +const Sequelize = require("sequelize"); + +/* eslint-disable-next-line */ +const pick = (O, ...K) => K.reduce((o, k) => ((o[k] = O[k]), o), {}); +const sids = {}; + +socket = io(server, { origins: "*:*" }); +emit = (username, msg, data) => { + if (data.username !== undefined) data = pick(data, ...whitelist); + + if (!sids[username]) return; + sids[username].map((sid, i) => { + try { + socket.to(sid).emit(msg, data); + } catch (e) { + sids[username].splice(i, 1); + } + }); +}; + +socket.use((socket, next) => { + try { + let token = socket.handshake.query.token; + let user = jwt.decode(token).username; + socket.request.user = user; + sids[user] ? sids[user].push(socket.id) : (sids[user] = [socket.id]); + sids[socket.id] = user; + } catch (e) { + l.error("error creating socket", e); + } + next(); +}); + +socket.sockets.on("connect", async socket => { + socket.emit("connected"); + if (app.get("rates")) socket.emit("rate", app.get("rates").ask); + socket.on("getuser", async (data, callback) => { + l.info("socket open", socket.request.user); + const user = await db.User.findOne({ + include: [ + { + model: db.Payment, + as: "payments", + order: [["id", "DESC"]], + received: { + [Sequelize.Op.ne]: null + }, + limit: 12 + } + ], + where: { + username: socket.request.user + } + }); + + callback(user); + }); + + socket.on("disconnect", s => { + let user = sids[socket.id]; + l.info("socket closed", user); + sids[user].splice(sids[user].indexOf(socket.id), 1); + delete sids[socket.id]; + }); +}); |
