[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Wilmar Lima da Silva
Criador Wilmar Lima da Silva 10/03/2023

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 ?

Manager Carlos Ferreira 10/03/2023

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 Ferreira
Criador Wilmar Lima da Silva 10/03/2023

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 ?

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

Como criou um channel privado, precisa altorizar nele:
https://github.com/especializati/larachat/blob/main/routes/channels.php#L5

Carlos Ferreira
Criador Wilmar Lima da Silva 10/03/2023

Carlos,

criei um novo canal privado:

public function broadcastOn()
    {
        return new PrivateChannel('uma-simulacao.' . $this->simulacao_id);
        //return new Channel('status-simulation');
    }

acrescentei a rota :

Broadcast::channel('uma-simulacao.{simulacao_id}', function ($user, $simulacao_id) {
    return (int) $user->simulation_id === (int) $simulacao_id;
});

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

Wilmar Lima da Silva
Criador Wilmar Lima da Silva 10/03/2023

Só uma correção,

quando o Evento é disparado é que aparece a mensagem de erro no laravel-echo-server

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

Teria o código no GitHub, só para checar as versões e etc?

Carlos Ferreira
Criador Wilmar Lima da Silva 10/03/2023

Carlos,

fiz um vídeo que fica claro entender

https://drive.google.com/file/d/1Jkat8ACLA9fnEO8kfkujuHqAywHUeVxn/view?usp=sharing

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

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 Ferreira
Criador Wilmar Lima da Silva 10/03/2023

Carlos,

segue a dúvida pra continuar com a implementação real time

https://drive.google.com/file/d/1SFcjZjBYGdBDxIhbGcgkAP66tFUTXpS3/view?usp=sharing

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

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 Ferreira
Criador Wilmar Lima da Silva 10/03/2023

Carlos,

segue a duvida

https://drive.google.com/file/d/1wseKj_0Fv50hlqFBMkNrqSgw5ncBcBKW/view?usp=sharing

Wilmar Lima da Silva
Criador Wilmar Lima da Silva 10/03/2023

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 ?

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

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 Ferreira
Criador Wilmar Lima da Silva 10/03/2023

Carlos,

desculpa por ter feito 2 perguntas, pois faltou essa:

segue a duvida

https://drive.google.com/file/d/1wseKj_0Fv50hlqFBMkNrqSgw5ncBcBKW/view?usp=sharing

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

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 Ferreira
Criador Wilmar Lima da Silva 10/03/2023

Carlos,

já enviei para o e-mail [email protected]

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

Pode deixar comigo, vou te responder lá, é porque estou de férias, por isso estou demorando um pouco mais para retornar.

Carlos Ferreira
Criador Wilmar Lima da Silva 10/03/2023

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.

Wilmar Lima da Silva
Manager Carlos Ferreira 10/03/2023

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.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!