Configurando uma sala socket.io para um grupo específico com base no URL. Node.js, Express, Angluarjs
Eu tenho um aplicativo da Web em execução no nó usando express, angular, mongodb e socket.io, onde os usuários pertencem a grupos. Nesses grupos, preciso configurar um soquete de bate-papo, no qual apenas as pessoas pertencentes a esse grupo possam ver as mensagens específicas desse grupo e enviar mensagens apenas para outros usuários desse grupo. No momento, consegui configurar a sala de bate-papo socket.io com base nas diretrizes do site, mas as mensagens enviadas são visíveis para todos os outros grupos. Li que preciso configurar certas salas, mas não sei como configurá-las para que a sala seja específica ao grupo.
O grupo é mantido em um domínio: por exemplo ... www.mydomain.com/groups/groupId/room
O groupId é um ID exclusivo gerado pelo MongoDB. Estou usando o Angularjs no lado do cliente e tenho um controlador de grupo para os grupos. Se alguém tiver alguma idéia de como conseguir isso ou puder me indicar a direção certa, ficaria extremamente grato.
Meu código atual do lado do servidor:
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
socket.on('connectToServer', function (data) {
var name = data.name;
io.sockets.emit('user-join', name + " has connected to the group");
});
socket.on('send msg', function (data) {
io.sockets.emit('get msg', data);
});
});
e meu código do lado do cliente no groupController, no qual acesso um serviço Global que armazena os detalhes do usuário atual, é o seguinte:
var socket = io.connect();
$scope.msgs = [];
$scope.sendMsg = function () {
socket.emit('send msg', $scope.msg.text);
$scope.msg.text = "";
}
socket.on('get msg', function (data){
$scope.msgs.push(data);
});
var currentUser = Global.currentUser();
var name = currentUser.username;
socket.emit('connectToServer', {name: name});
socket.on('user-join', function (data) {
$scope.msgs.push(data);
});