mensagens somente para um grupo de usuários
Carlos,
Na minha aplicação a tabela User tem dois tipos de usuários
"profesor" e "aluno", porém cada aluno pertence a um grupo
especifico. No momento que o professor enviar uma mensagem,
somente deve ser enviado para um determinado grupo que o professor
escolher , onde isso é controlado ?
Olá, Wilmar!
Como vai?
Você pode enviar para um channel privado, e neste channel direcionar para o identificador do grupo.
É bem semelhante ao que fizemos para enviar uma mensagem privada, mas neste caso, você direciona para o grupo.
Pegou a ideia?
Carlos, vamos ver se entendi
hoje o evento manda uma mensagem (que é um status da aplicação):
event(new StatusSimulation('PROCESSOU'));
Nesse caso eu teria que mandar dois parametros:
o status e o código do grupo ? assim:
event(new StatusSimulation('PROCESSOU','59'));
Então no Evento que hoje tem : public function broadcastOn()
return new Channel('status-simulation');
Seria:
new PrivateChannel('status-simulation.' . $this->grupo_id)
Confere até aqui ?
Lá na rota Channel, esta assim:
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
então ficaria assim :
Broadcast::channel('status-simulation.{grupoId}', function ($user, $grupoId) {
return (int) $user->grupo_id === (int) $grupoId;
});
Seria Isso ?
Como criou um channel privado, precisa altorizar nele:
https://github.com/especializati/larachat/blob/main/routes/channels.php#L5
Carlos,
criei um novo canal privado:
acrescentei a rota :
No echo.js ficou
fiz as mudanças no Evento e na Rota Channel, mas quando rodei o laravel-echo-server deu erro
Server ready!
[2023-03-20T19:13:33.097Z] - Preparing authentication request to: http://ufa.upmaster-em57.test
[2023-03-20T19:13:33.098Z] - Sending auth request to: http://ufa.upmaster-em57.test/broadcasting/auth
⚠ [2023-03-20T19:13:35.939Z] - kHYJ7_ypsm_iyryUAAAA could not be authenticated to upbussinessgame_database_private-uma-simulacao
Só uma correção,
quando o Evento é disparado é que aparece a mensagem de erro no laravel-echo-server
Teria o código no GitHub, só para checar as versões e etc?
Carlos,
fiz um vídeo que fica claro entender
https://drive.google.com/file/d/1Jkat8ACLA9fnEO8kfkujuHqAywHUeVxn/view?usp=sharing
Pode deixar os dois channels, só para você testar.
No channel privado que você vai direcionar para os usuários corretos;
No seu arquivo de rotas channel.php que vai validar se o id do grupo bate com o id da coluna na tabela de users;
--
Chegou a assistir o LaraChat? Só pra entender a dinâmica de chat privado? Como são muitos detalhes acho uma boa assistir primeiro.
Carlos,
segue a dúvida pra continuar com a implementação real time
https://drive.google.com/file/d/1SFcjZjBYGdBDxIhbGcgkAP66tFUTXpS3/view?usp=sharing
Olá, Wilmar!
Satisfação.
--
No seu caso, você deve ter uma tabela N:N para amarrar os usuários aos grupos, o que você precisa fazer é enviar a mensagem passando o grupo_id
Carlos,
segue a duvida
https://drive.google.com/file/d/1wseKj_0Fv50hlqFBMkNrqSgw5ncBcBKW/view?usp=sharing
Carlos,
outra dúvida no Evento, no metodo broadcastOn(), a diferença entre
um Channel e um PrivateChannel:
a) No PrivateChannel o usuario precisa estar autenticado na aplicação pra receber, enquanto no Channel qualquer pessoa pode receber
é isso ?
b) No PrivateChannel aceita filtro na rota channels.php enquanto no Channel não aceita, é certo isso ?
O PrivateChannel (canal privado) é para criar canais privados, ou seja, conteúdo que são direcionados, seja a usuários ou grupos.
Você pode criar um chat user x user, e também pode trabalhar com private channel para trabalhar com por exemplo, salas privadas.
--
Com presence channel, você pode criar por exemplo algo mais aberto (tipo aquele antigo e finado chat da uol)
Carlos,
desculpa por ter feito 2 perguntas, pois faltou essa:
segue a duvida
https://drive.google.com/file/d/1wseKj_0Fv50hlqFBMkNrqSgw5ncBcBKW/view?usp=sharing
Vou te direcionar para outro canal de atendimento, encaminha ela com todos os detalhes para o e-mail [email protected] que vou te orientar baseado em minha experiência com o assunto.
Carlos,
já enviei para o e-mail [email protected]
Pode deixar comigo, vou te responder lá, é porque estou de férias, por isso estou demorando um pouco mais para retornar.
Carlos,
desculpa não sabia, se for o caso , pode aproveitar suas férias, apenas me compensa os dias da assinatura, até
porque pra vc pensar melhor na resposta, rsrsrs. Já passei por isso, e férias e trabalho não combina. principalmente
pra gente que trabalha com a mente.
Olá, Wilmar!
Sim, descansar um pouco é bom hehehee
Sua dúvida foi bem pessoal, por isso te encaminhei para outro canal de atendimento, mesmo demorando responder uma dúvida (repito) pessoal, isso não te atrapalhou de usufruir da plataforma (consumir outros cursos), logo, não vejo a necessidade de compensar os dias na sua assinatura, a não ser que realmente se sinta prejudicado (não desejo isso de forma alguma). O que me diz?
De qualquer forma, vou continuar o seu atendimento pelo e-mail.
---
00:28 - Exato, na rota routes/channels.php que deve ficar o filtro do broadcasting
00:55 - Exato, o seu filtro está correto, se na tabela users tiver a coluna "group_id"
01:24 - Se o professor não tem um valor para group_id, por que ele iria mandar mensagem para algum grupo, se ele não pertence a nenhum?
Essa relação não seria N:N? Repense nos seus modelos de tabelas.
01:55 - Ficou bem estranho esse código, essa query dentro da rota. Talvez repensar os modelos de tabelas, e a relação entre elas, vai fazer mais sentido para esse caso.
PS. Pode responder no e-mail, vamos continuar por lá, encerrando esse atendimento aqui.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!