Procházet zdrojové kódy

If user is logged in, add there socket-io client id to a dictionary of username=>client_id

sbkwgh před 8 roky
rodič
revize
b3254169b4
2 změnil soubory, kde provedl 29 přidání a 9 odebrání
  1. 20 1
      lib/sockets.js
  2. 9 8
      server.js

+ 20 - 1
lib/sockets.js

@@ -1,8 +1,26 @@
+let sharedSession = require("express-socket.io-session")
+
 module.exports = {
-	init (app, server) {
+	init (app, server, session) {
 		let io = require('socket.io')(server)
+		function setIoSockets (socket) {
+			let users = app.get('io-users')
+
+			if(socket.handshake.session.loggedIn) {
+				users[socket.handshake.session.username] = socket.id
+				app.set('io-users', users)
+			}
+		}
+
+		app.set('io-users', {})
+
+		io.use(sharedSession(session, {
+			autoSave: true
+		}))
 
 		io.on('connection', socket => {
+			setIoSockets(socket)
+
 			socket.on('join', room => {
 				socket.join(room)
 			})
@@ -11,6 +29,7 @@ module.exports = {
 				socket.leave(room)
 			})
 		})
+		io.on('login', setIoSockets)
 
 		app.set('io', io)
 	}

+ 9 - 8
server.js

@@ -10,16 +10,17 @@ let config = require('./config/server.js')
 //Middle-ware
 let bodyParser = require('body-parser')
 let morgan = require('morgan')
-let session = require('express-session')
+let expressSession = require('express-session')
+
+let session = expressSession({
+	secret: config.sessionSecret,
+	resave: true,
+	saveUninitialized: true
+})
 
 app.use(bodyParser.json())
 app.use(bodyParser.urlencoded({ extended: true }))
-app.use(session({
-	secret: config.sessionSecret,
-	resave: false,
-	saveUninitialized: true,
-	cookie: {}
-}))
+app.use(session)
 
 if(process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production') {
 	app.use(morgan('dev'))
@@ -47,7 +48,7 @@ sequelize
 			app.emit('appStarted')
 		})
 
-		sockets.init(app, server)
+		sockets.init(app, server, session)
 	})
 	.catch((err) => {
 		console.log(err)