Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Web Sockets: Como notificar clientes específicos

Utilizando como exemplo o curso, se na nossa loja tivesse a funcionalidade de falar com os atendentes da casa do código via chat, após algum atendente pegar a conversa, as trocas de mensagens deveriam acontecer apenas entre a pessoa que iniciou a conversa via chat com a atendente, ou então pegando a ideia mais geral de um chat privado, a a troca de mensagens deve restringir-se aos participantes de uma sala. Utilizando web sockets como garantir que as mensagens sejam trocadas apenas por duas pessoas ou entre um determinado grupo de pessoas e não via broad cast

3 respostas

Fala ai Ricardo, de boa ?

Cara, não entendi muito bem sua dúvida.

Oi Mateus, é o seguinte, oque eu gostaria de saber é utilizando web sockets , como eu garanto a entrega da mensagem para usuários especificos.

Imagina uma sala em um bate papo, se eu estou na sala 10 por exemplo, a mensagem que eu enviar deve ir somente para os outros usuários que estão na sala 10.

solução!

Olá, eu consegui fazer oque eu queria, agora se uma pessoa por exemplo está em um chat na sala discussão de JavaEE por exemplo, as mensagens que ele enviar no chat serão entregues apenas na sala de Java EEE e não nas salas de discussão de phyton,php...

@ServerEndpoint("/chat/{room}")
public class ChatEndPoint implements Serializable{


    private static final long serialVersionUID = 1L;


    private static List<Session> sessions =  new ArrayList<>();


    @OnOpen
    public void onOpen(Session session, @PathParam("room") final String room, EndpointConfig endpointConfig) {

        session.getUserProperties().put("room", room);
        sessions.add(session);
    }

    public void send(Mensagem mensagem) {

        for(Session session : sessions) {    
            String room = (String) session.getUserProperties().get("room");
            if(session.isOpen() && room.equals(mensagem.getSala().getSalaId().toString()) ) {
                try {
                    session.getBasicRemote().sendText(mensagem.toJson());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {

        sessions.remove(session);
    }


}
<script type="text/javascript">

var canal = new WebSocket("ws://localhost:8080#{request.contextPath}/chat/#{chatMB.sala.salaId}");
canal.onmessage=  function(message){
//...
}
</script>

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software