Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.apuntesdejava.websocket;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.ejb.Schedule;
- import javax.ejb.Singleton;
- import javax.websocket.OnClose;
- import javax.websocket.OnMessage;
- import javax.websocket.OnOpen;
- import javax.websocket.RemoteEndpoint;
- import javax.websocket.Session;
- import javax.websocket.server.ServerEndpoint;
- @ServerEndpoint("/broadcast")
- @Singleton //es - a la vez- nuestro EJB para programar eventos
- public class BroadcastUsuariosEndPoint {
- static final Logger LOGGER = Logger.getLogger(BroadcastUsuariosEndPoint.class.getName());
- //la lista de conexiones realizadas
- static final List<Session> conexiones = new ArrayList<>();
- /**
- * Evento que se ejecuta cuando un cliente se conecta
- *
- * @param session La sesion del cliente
- */
- @OnOpen
- public void iniciaSesion(Session session) {
- LOGGER.log(Level.INFO, "Iniciando la conexion de {0}", session.getId());
- conexiones.add(session); //Simplemente, lo agregamos a la lista
- }
- /**
- * Evento que se ejecuta cuando se pierde una conexion.
- *
- * @param session La sesion del cliente
- */
- @OnClose
- public void finConexion(Session session) {
- LOGGER.info("Terminando la conexion");
- if (conexiones.contains(session)) { // se averigua si está en la colección
- try {
- LOGGER.log(Level.INFO, "Terminando la conexion de {0}", session.getId());
- session.close(); //se cierra la conexión
- conexiones.remove(session); // se retira de la lista
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- }
- }
- }
- /**
- * Enviaremos un mensaje a todos los conectados
- */
- @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
- public void notificar() {
- LOGGER.log(Level.INFO, "Enviando notificacion a {0} conectados", conexiones.size());
- String mensaje = "Son las " + (new Date()) + " y hay " + conexiones.size() + " conectados "; // el mensaje a enviar
- for (Session sesion : conexiones) { //recorro toda la lista de conectados
- RemoteEndpoint.Basic remote = sesion.getBasicRemote(); //tomo la conexion remota con el cliente...
- try {
- remote.sendText(mensaje); //... y envío el mensajue
- } catch (IOException ex) {
- LOGGER.log(Level.WARNING, null, ex);
- }
- }
- }
- /**
- * Solo es un metodo que atiende las peticiones
- *
- * @param mensaje
- * @param sesion
- */
- @OnMessage
- public void onMessage(String mensaje, Session sesion) {
- LOGGER.info("Se recibe un mensaje, aunque no se hace nada");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement