diff options
| author | Adam Soltys <[email protected]> | 2019-07-14 00:42:05 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2019-07-14 00:42:05 -0700 |
| commit | ef8e8b76706fc907c2d6702e2b6741635ff6733d (patch) | |
| tree | 4355945d15e6134c11bdf3e21c58b64a5a89687b /sockets.js | |
| parent | cb30426a5053345396b6ec1705fbf239df16f4c3 (diff) | |
| download | coinos-server-ef8e8b76706fc907c2d6702e2b6741635ff6733d.tar.gz coinos-server-ef8e8b76706fc907c2d6702e2b6741635ff6733d.zip | |
refactor zmq and socket setup into separate files
Diffstat (limited to 'sockets.js')
| -rw-r--r-- | sockets.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/sockets.js b/sockets.js new file mode 100644 index 00000000..29f4c642 --- /dev/null +++ b/sockets.js @@ -0,0 +1,59 @@ +import io from "socket.io"; + +/* eslint-disable-next-line */ +const pick = (O, ...K) => K.reduce((o, k) => ((o[k] = O[k]), o), {}); +const l = console.log; + +module.exports = (app, server) => { + const socket = io(server, { origins: "*:*" }); + const sids = {}; + + 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(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) => { + /* eslint-disable-next-line */ + callback( + await db.User.findOne({ + where: { + username: socket.request.user + } + }) + ); + }); + + socket.on("disconnect", s => { + let user = sids[socket.id]; + sids[user].splice(sids[user].indexOf(socket.id), 1); + delete sids[socket.id]; + }); + }); + + const 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); + } + }); + }; + + return [socket, emit]; +}; |
