package br.com.webbudget.application.channels; import java.util.HashSet; import java.util.Set; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.websocket.Session; import org.slf4j.Logger; /** * Classe para representar o usuarios conectados nos channels via websocket * * @author Arthur Gregorio * * @version 1.0.0 * @since 2.3.0, 20/09/2016 */ @ApplicationScoped public class WebSocketSessions { @Inject private Logger logger; private final Set<Session> sessions; /** * */ public WebSocketSessions() { this.sessions = new HashSet<>(); } /** * Adiciona na lista de sessoes uma nova sessao de um usuario conectado * * @param session a sessao do usuario */ public void add(Session session) { this.sessions.add(session); } /** * Remove uma sessao da lista de sessoes * * @param session a session que precisa ser removida */ public void remove(Session session) { this.sessions.remove(session); } /** * Metodo para enviar as mensagens a todos os clientes conectados * */ public void notifyOpenSessions() { this.sessions .stream() .filter(Session::isOpen) .forEach(session -> { try { session.getBasicRemote().sendText("newMessage"); } catch (Exception ex) { this.logger.error("Can't notify session {0}", session.getId(), ex); } }); } }