Download backend/src/services/socketService.js from chainr-ai/CHAINR: direct link, hf CLI and curl.
- Browser
- Download file 1.52 kB
-
https://huggingface.co/chainr-ai/CHAINR/resolve/main/backend/src/services/socketService.js
- Command line
-
hf download hf://chainr-ai/CHAINR/backend/src/services/socketService.js
-
curl -L -o socketService.js https://huggingface.co/chainr-ai/CHAINR/resolve/main/backend/src/services/socketService.js
1.52 kB
| const jwt = require('jsonwebtoken'); | |
| const User = require('../models/User'); | |
| // Socket authentication middleware | |
| const authenticateSocket = async (socket, next) => { | |
| try { | |
| const token = socket.handshake.auth.token; | |
| if (!token) { | |
| return next(new Error('Authentication error')); | |
| } | |
| const decoded = jwt.verify(token, process.env.JWT_SECRET); | |
| const user = await User.findById(decoded.userId); | |
| if (!user) { | |
| return next(new Error('User not found')); | |
| } | |
| socket.userId = user._id.toString(); | |
| socket.user = user; | |
| next(); | |
| } catch (error) { | |
| next(new Error('Authentication error')); | |
| } | |
| }; | |
| const initializeSocket = (io) => { | |
| // Authentication middleware | |
| io.use(authenticateSocket); | |
| io.on('connection', (socket) => { | |
| console.log(`User ${socket.user.username} connected`); | |
| // Join user to their personal room | |
| socket.join(`user_${socket.userId}`); | |
| // Handle typing events | |
| socket.on('typing', (data) => { | |
| socket.to(`user_${socket.userId}`).emit('userTyping', { | |
| conversationId: data.conversationId, | |
| isTyping: data.isTyping | |
| }); | |
| }); | |
| // Handle disconnection | |
| socket.on('disconnect', () => { | |
| console.log(`User ${socket.user.username} disconnected`); | |
| }); | |
| // Update user's last seen | |
| socket.user.lastSeen = new Date(); | |
| socket.user.save().catch(console.error); | |
| }); | |
| return io; | |
| }; | |
| module.exports = { | |
| initializeSocket | |
| }; |