You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.2 KiB
JavaScript

'use strict';
const user = require('../user');
const topics = require('../topics');
const SocketMeta = module.exports;
SocketMeta.rooms = {};
SocketMeta.reconnected = function (socket, data, callback) {
callback = callback || function () {};
if (socket.uid) {
topics.pushUnreadCount(socket.uid);
user.notifications.pushCount(socket.uid);
}
callback();
};
/* Rooms */
SocketMeta.rooms.enter = async function (socket, data) {
if (!socket.uid) {
return;
}
if (!data) {
throw new Error('[[error:invalid-data]]');
}
if (data.enter) {
data.enter = data.enter.toString();
}
if (data.enter && data.enter.startsWith('uid_') && data.enter !== `uid_${socket.uid}`) {
throw new Error('[[error:not-allowed]]');
}
if (data.enter && data.enter.startsWith('chat_')) {
throw new Error('[[error:not-allowed]]');
}
leaveCurrentRoom(socket);
if (data.enter) {
socket.join(data.enter);
socket.currentRoom = data.enter;
}
};
SocketMeta.rooms.leaveCurrent = async function (socket) {
if (!socket.uid || !socket.currentRoom) {
return;
}
leaveCurrentRoom(socket);
};
function leaveCurrentRoom(socket) {
if (socket.currentRoom) {
socket.leave(socket.currentRoom);
socket.currentRoom = '';
}
}
require('../promisify')(SocketMeta);