general chat
This commit is contained in:
@@ -21,7 +21,10 @@ async function login(username, password)
|
||||
|
||||
const token = jwt.sign
|
||||
(
|
||||
{userId: user.id},
|
||||
{
|
||||
userId: user.id,
|
||||
username: username
|
||||
},
|
||||
process.env.JWT_SECRET,
|
||||
{expiresIn: '1h'}
|
||||
);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
const {query} = require('../db');
|
||||
|
||||
async function saveMessage(userId, content)
|
||||
{
|
||||
const result = await query
|
||||
(
|
||||
'INSERT INTO messages (sender_id, content) VALUES ($1 ,$2) RETURNING *',
|
||||
[userId, content]
|
||||
);
|
||||
return (result.rows[0]);
|
||||
}
|
||||
|
||||
async function getRecentMessages(limit = 50)
|
||||
{
|
||||
const result = await query
|
||||
(
|
||||
`SELECT m.sender_id, m.content, m.created_at, u.username
|
||||
FROM messages m
|
||||
JOIN users u ON m.sender_id = u.id
|
||||
ORDER BY m.created_at DESC
|
||||
LIMIT $1`,
|
||||
[limit]
|
||||
);
|
||||
return (result.rows.reverse());
|
||||
}
|
||||
|
||||
module.exports =
|
||||
{
|
||||
saveMessage,
|
||||
getRecentMessages
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
const jwt = require('jsonwebtoken');
|
||||
const chatService = require('./global_chat');
|
||||
|
||||
function setupSocketIO(io)
|
||||
{
|
||||
io.use((socket, next) =>
|
||||
{
|
||||
const token = socket.handshake.auth.token;
|
||||
if (!token)
|
||||
return (next(new Error('Authentication error')));
|
||||
|
||||
try
|
||||
{
|
||||
const decoded = jwt.verify(token, process.env.JWT_SECRET);
|
||||
socket.user = decoded;
|
||||
next();
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
next(new Error('Authentication error'));
|
||||
}
|
||||
});
|
||||
|
||||
io.on('connection', (socket) =>
|
||||
{
|
||||
console.log(`User connected: ${socket.user.username}`);
|
||||
|
||||
socket.join('general-chat');
|
||||
socket.on('chat-message', async(data) =>
|
||||
{
|
||||
const message = await chatService.saveMessage(socket.user.userId, data.content);
|
||||
io.to('general-chat').emit('chat-message',
|
||||
{
|
||||
id:message.id,
|
||||
username: socket.user.username,
|
||||
content: message.content,
|
||||
created_at: message.created_at
|
||||
});
|
||||
});
|
||||
socket.on('disconnect', () =>
|
||||
{
|
||||
console.log(`User disconnected: ${socket.user.username}`);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = setupSocketIO;
|
||||
Reference in New Issue
Block a user